Mostrando postagens com marcador Java. Mostrar todas as postagens
Mostrando postagens com marcador Java. Mostrar todas as postagens

sexta-feira, 29 de outubro de 2010

Mudanças na execução da lógica

>Por Juliana

Olá,
Uma semana já se passou desde que apresentamos a prévia na aula de Aplicativos e na feira do SESI. Durante esse tempo fizemos várias alterações, inclusive na forma como o usuário deverá interagir com o programa para executar sua lógica. Essa execução se dará através de um Painel de Controle, que irá controlar Simulador e Robô Real. Mais tarde, provevelmente, algum integrante do grupo lhes apresentará tal tela.
Até ontem a noite ainda estavamos com alguns problemas na execução. Ao pausar a simulação, o Eclipse acusava java.net.SocketTimeoutException. O problema foi resolvido ao percebermos que a variável executando do Simulador apenas deveria ser alterada para false ao se fechar a janela de simulação.
Assim, temos:

PainelControle.java
if (Evento.getSource() == btPausar) {
Funcoes.executando = 0;
rbSimulador.setEnabled(true);
rbReal.setEnabled(true);
btExecutar.setEnabled(true);
btAbrir.setEnabled(true);
}

Simulador.java
public void windowClosing(WindowEvent arg0) {
Funcoes.executando = 0;
Funcoes.menu.simulador.arena.executando = false;

arg0.getWindow().setVisible(false);
Funcoes.menu.painelControle.btAbrir.setEnabled(true);
Funcoes.menu.painelControle.btExecutar.setEnabled(true);
caminho = null;
Prog1.llMinis.removeAll(Prog1.llMinis);
Prog1.pnArea.removeAll();
}

Até a semana que vem,
Juliana

sexta-feira, 22 de outubro de 2010

Desenvolvimento em Java: Cadastro de lógica

>Por Juliana

Boa tarde,
Ontem, enquanto dávamos uma conferida pré-feira em todo o projeto GoGoBots, notamos um erro na exclusão de comportamentos ao fazer o cadastro. O comportamento excluído era sempre o primeiro. Após algumas tentativas, chegamos ao seguinte trecho de código, que, de forma simples, resolveu nosso problema.

btRemover.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
Mini m = (Mini) ((JButton)(e.getSource())).getParent().getParent();
Prog1.llMinis.remove(m);
Prog1.pnArea.removeAll();
for (int i = 0; i < Prog1.llMinis.size(); i++) {
Prog1.pnArea.add(Prog1.llMinis.get(i));
}
Prog1.pnArea.updateUI();
Prog1.pnArea.validate();
if (!(Funcoes.existeComportamento(Prog1.llMinis))) {
Prog1.btSalvarComoLogica.setEnabled(false);
Prog1.btSalvarLogica.setEnabled(false);
}

}

});


Até semana que vem,
Juliana

Posição dos Objetos na Arena

>por Matheus

Hey! Tudo certo?
Durante essa semana nos foi solicitado que alterassemos a forma como o usuário posiciona os objetos na arena. Até então os mesmos tinham posições fixas, como por exemplo (3,3). Estamos trabalhando para que as respectivas posições sejam alteradas pelo mouse.
Assim que tiver mais novidades deixo vocês informados.

Até a próxima!

Matheus

sexta-feira, 15 de outubro de 2010

Validação de IP

>Por Matheus

Hey! Tudo certo?
Durante essa semana me foquei na programação em Java, contando sempre com o auxílio da Paula. Duas telas de configuração foram desenvolvidas e estão praticamente finalizadas. Nelas, nos deparamos com uma situação um tanto quanto inusitada: a validação de um endereço IP.

Para realizar essa validação, estamos utilizando uma expressão regular, que pode ser observada abaixo:

public boolean ValidaIP(String ip)
{
Pattern pattern = Pattern.compile("(([0-1]?[0-9]{1,2}\\.)|(2[0-4][0-9]\\.)|(25[0-5]\\.)){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))");
Matcher matcher = pattern.matcher(ip);
if( matcher.matches() )
return true;
else
return false;
}

Por hoje é só! Até a próxima.

Matheus

sexta-feira, 1 de outubro de 2010

Tela sobre o Projeto

>Por Paula

Olá ;D

Referente a interface das telas da aplicação em Java já foram praticamentes finalizadas, faltando somente a tela de ajuda, a qual não decidimos ainda como será desenvolvida. Estamos com um problema de justificamento, mas que logo será resolvido.

Segue abaixo a tela falando sobre o Projeto:



Paula

quinta-feira, 30 de setembro de 2010

Robô real

>Por Juliana

Olá

Como pode ser percebido, nos últimos meses nós dedicamos a maior parte do tempo ao desenvolvimento do Simulador. Embora este ainda não esteja 100% pronto, planejamos começar ainda essa semana a programar o robô real. Esta parte deve ser bem menos complicada já que boa parte da lógica será reaproveitada do Simulador.
Antes de iniciarmos a programação, queremos nos encontrar com o prof. Renê afim de resolver alguns pontos.

Boa semana para todos,
Juliana

sexta-feira, 24 de setembro de 2010

Relação Simulador - SimuladorCliente

>Por Juliana

Bom dia,
Eu e a Mariana viemos lhes relatando há algum tempo a respeito dos problemas com o Simulador. Mais recentemente temos tentado consertar a relação entre o Simulador e o SimuladorCliente. Essas duas classes já funcionam em conjunto quando estão sozinha em um mesmo projeto. No entanto, quando tentamos integrá-las ao Menu algo dá errado. Já tentamos algumas formas diferentes para resolver isso, e continuaremos tentando até alcançar o funcionamento desejado. Esperamos que seja logo.

Até semana que vem,
Juliana

sexta-feira, 10 de setembro de 2010

Rodando no Linux

>Por Paula

Olá ;D

Essa semana eu fiz o teste com a aplicação em Java no sistema operacional Linux para vizualizar como os objetos estavam ficando posicionados, já que a mudança de sistema operacional e a resolução da tela podem causar alterações nas posições dos componentes.
Abaixo segue a imagem de como a aplicação ficou no Linux, com o posicionamento dos componentes não houve nenhum problema, porém os acentos não apareceram no Linux.


Até mais!

Paula

Desenvolvimento técnico: Documentação

>Por Mariana

Hey

Resolvi trazer um pouco da documentação do projeto, a seguir uma breve explicação e uma ilustração.

O ambiente reproduz uma área plana, chamada de arena na qual atualmente é posicionado um robô e uma bola. Neste ambiente o robô executará os comportamentos para realizar uma tarefa.


Até mais e bons estudos
Mariana

sexta-feira, 3 de setembro de 2010

Desenvolvimento em JAVA - Conversor

>Por Mariana

Como dito anteriormente começamos desenvolver um jeito de controle remoto do simulador, por UDCP. Para isso ocorrer precisamos converter também float em bytes, a seguir a rotina que faz isso:

void comunicacaoRobo2() {
/** 6 floats * 4 bytes cada * 3 conjuntos de estado */
byte data[] = new byte[6 * 4 * 3];
byte cmd[] = new byte[1];

Estado estado[] = new Estado[3];
for (int i = 0; i <>
estado[i] = new Estado();

while (true) {
try {
estado[0].angulo = (float) (2 * Math.PI + robo2.angulo);
estado[0].x = tamXCm - (float) robo2.x;
estado[0].y = tamYCm - (float) robo2.y;
estado[0].dAngulo = (float) robo2.dAngulo;
estado[0].dx = -(float) robo2.dx;
estado[0].dy = -(float) robo2.dy;

estado[1].angulo = (float) bola.angulo;
estado[1].x = tamXCm - (float) bola.x;
estado[1].y = tamYCm - (float) bola.y;
estado[1].dAngulo = (float) 0;// bola.dAngulo;
estado[1].dx = -(float) bola.dx;
estado[1].dy = -(float) bola.dy;

estado[2].angulo = (float) (2 * Math.PI + robo1.angulo);
estado[2].x = tamXCm - (float) robo1.x;
estado[2].y = tamYCm - (float) robo1.y;
estado[2].dAngulo = (float) robo1.dAngulo;
estado[2].dx = -(float) robo1.dx;
estado[2].dy = -(float) robo1.dy;

leBytes(data, estado);

DatagramPacket packet = new DatagramPacket(cmd, 1);
socketRobo2.receive(packet);
if (cmd[0] == (byte) 0x88) {
packet.setData(data);
socketRobo2.send(packet);
// Thread.sleep(100);
} else {
System.out.format("%02x ", cmd[0]);
robo2.comando(cmd[0]);
Thread.sleep(20);
}
} catch (InterruptedException e) {
} catch (IOException e) {
e.printStackTrace();
}
}
}



Até mais e boas provas a todos.

Desenvolvimento técnico: Colisão

>Por Juliana

Olá,
Pensando em prováveis recursos futuros, foi desenvolvido o método verificaColisaoRoboRobo. Ele executa basicamente as mesmas funções que o método verificaColisaoBolaRobo. Para este ano, não pretendemos adicionar um segundo robô ao projeto. No entanto, estamos desde já preparando para que isso seja possível.
Veja o código:
void verificaColisaoRoboRobo(BufferedImage imageRobo1,
BufferedImage imageRobo2) {
Ponto p = verificaColisaoBolaRoboI(imageRobo1,
(int) (robo1.x * escalaCmPixel),
(int) (robo1.y * escalaCmPixel), robo2, imageRobo2,
(int) (robo2.x * escalaCmPixel),
(int) (robo2.y * escalaCmPixel));
if (p != null) {
getGraphics().drawOval((int) ((p.x * escalaCmPixel) - 20),
(int) (((-(p.y - tamYCm)) * escalaCmPixel) - 20), 40, 40);
afastaRoboDoPonto(robo1, p);
afastaRoboDoPonto(robo2, p);
}
}

Até a semana que vem,
Juliana

quinta-feira, 2 de setembro de 2010

Tela Desenvolvimento

>Por Paula

Olá ;D

Prosseguindo o trabalho em JAVA, desenvolvi a tela Desenvolvimento, na qual consta os nomes dos desenvolvedores do Projeto Gogobots, um agradecimento aos orientadores e as logomarcas das entidades relacionadas com o projeto, no caso o CTI, a UNESP e o grupo Apparatus.

Segue abaixo a tela Desenvolvimento:



Até mais!

Paula

sexta-feira, 27 de agosto de 2010

Desenvolvimento em JAVA - Conversor

>Por Mariana

Hey
Após a apresentação para a banca começamos desenvolver um jeito de controle remoto do simulador, por UDCP. Para isso ocorrer precisamos converter bytes em reais, a seguir a rotina que faz isso:

public void atribuiBytesEstado(Estado estado[], byte[] b) {
int ind = 0, x;
for (int i = 0; i <>
x = ((int) b[ind] & 0x000000ff)
+ (((int) b[ind + 1] <<>
+ (((int) b[ind + 2] <<>
+ (((int) b[ind + 3] <<>
System.out.format("%x %x %x %x %x\n", (int) b[0],
((int) b[1] <<>
(((int) b[3] <<>
ind += 4;
estado[i].angulo = Float.intBitsToFloat(x);
x = ((int) b[ind] & 0x000000ff)
+ (((int) b[ind + 1] <<>
+ (((int) b[ind + 2] <<>
+ (((int) b[ind + 3] <<>
ind += 4;
estado[i].x = Float.intBitsToFloat(x);
x = ((int) b[ind] & 0x000000ff)
+ (((int) b[ind + 1] <<>
+ (((int) b[ind + 2] <<>
+ (((int) b[ind + 3] <<>
ind += 4;
estado[i].y = Float.intBitsToFloat(x);
x = ((int) b[ind] & 0x000000ff)
+ (((int) b[ind + 1] <<>
+ (((int) b[ind + 2] <<>
+ (((int) b[ind + 3] <<>
ind += 4;
estado[i].dAngulo = Float.intBitsToFloat(x);
x = ((int) b[ind] & 0x000000ff)
+ (((int) b[ind + 1] <<>
+ (((int) b[ind + 2] <<>
+ (((int) b[ind + 3] <<>
ind += 4;
estado[i].dx = Float.intBitsToFloat(x);
x = ((int) b[ind] & 0x000000ff)
+ (((int) b[ind + 1] <<>
+ (((int) b[ind + 2] <<>
+ (((int) b[ind + 3] <<>
ind += 4;
estado[i].dy = Float.intBitsToFloat(x);
}
}

Até mais

Menu Principal - JAVA

>Por Paula

Oi!

Eu e o Matheus estamos trabalhando agora com a interface da aplicação em JAVA, algumas alterações já foram realizadas, uma dessas foi a do menu principal, no qual adicionamos os componentes JMenuBar, JToolBar e o desenvolvemos o StatusBar, que contém a data atual e o desenvolvedor. Segue abaixo a imagem de como está o menu atualmente:



Lembrando que ainda não está finalizado, mais alterações serão realizadas.
Até mais!

Paula

Desenvolvimento técnico: Cliente

>Por Juliana

Bom dia,
Como já foi dito pela Mariana, estivemos trabalhando com o controle remoto do Simulador. Por isso, hoje trouxe a vocês o método enviaComando. Nele, recebemos um comando da classe Simulador e o reenviamos ao Simulador que está em execução no computador cujo IP foi configurado. No caso estamos usando o localhost (127.0.0.1).
static void enviaComando(int cmd) {
try {
byte b[] = new byte[1];
b[0] = (byte) cmd;
DatagramPacket packet;
packet = new DatagramPacket(b, b.length, InetAddress
.getByName("127.0.0.1"), 7878);
socket.send(packet);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

Até a semana que vem.
Juliana

Layout Managers

>Por Matheus

Hey, tudo bom pessoal?

Como a aplicação Web está praticamente finalizada, eu e a Paula passaremos a trabalhar com a interface da aplicação Desktop, desenvolvida em Java. Para isso, estamos aprendendo um pouquinho mais sobre Layout Managers, como BorderLayout, GridLayout, etc.

Optamos por tal utilização pois o posicionamento em pontos fixos na tela (utilizando SetLocation ou SetBounds, por exemplo) pode não funcionar adequadamente em todas as plataformas.

Ainda não temos um vasto conhecimento sobre o assunto, mas estamos estudando e esperamos que ajude.

Para quem quiser dar uma olhadinha no assunto, vale a pena olhar esse tutorial da Oracle (aqui).

Até a próxima!

sexta-feira, 20 de agosto de 2010

Login em JAVA

>Por Paula

Olá ;D

Essa semana após eu terminar o módulo de usuário administrador de grupo na aplicação de PHP, parti para o término do Login em JAVA, arrumei a parte da interface e eis o resultado:



Lembrando que estamos nos últimos preparativos para a apresentação de sábado (21/08).
Até breve!

Paula

Desenvolvimento técnico: Salvar

>Por Juliana

Olá
Um detalhe que nós deixamos passar no desenvolvimento em Java foi relacionado a salvar os arquivos GGB. Os arquivos eram salvos, no entando, sem possibilidade de escolha do nome e caminho. Para isso, desenvolvemos o seguinte método:

public static File escolherCaminhoSalvar() {
String sNomeArq = null;
String pastaPadrao = MenuPrincipal.global.getProperty("PastaPadrao");
JFileChooser arquivo = new JFileChooser(pastaPadrao);
FileNameExtensionFilter filter = new FileNameExtensionFilter("Arquivo GoGoBots (.ggb)", "ggb");
arquivo.setFileFilter(filter);
arquivo.setFileSelectionMode(arquivo.FILES_ONLY);
int resultadoArq;
File arquivoNome;
while (true) {
resultadoArq = arquivo.showSaveDialog(null);
if (resultadoArq == arquivo.CANCEL_OPTION)
return null;
arquivoNome = arquivo.getSelectedFile();
if ((arquivoNome == null || arquivoNome.getName().equals("")))
javax.swing.JOptionPane.showMessageDialog(null, "Nome de Arquivo Inválido", "Nome de Arquivo Inválido", javax.swing.JOptionPane.ERROR_MESSAGE);
else if (arquivo.getSelectedFile().exists()) {
int certeza = JOptionPane.showConfirmDialog(null, "Tem certeza de que deseja substituir arquivo existente?", "Arquivo já existe", 0, 0);
if (certeza == 0)
break;
} else
break;
}
MenuPrincipal.global.setProperty("PastaPadrao", arquivo.getCurrentDirectory()
.toString());
MenuPrincipal.salvaConfiguracao();
try {
RandomAccessFile file = new RandomAccessFile(arquivoNome, "rw");
MenuPrincipal.salvaConfiguracao();
return arquivoNome;
} catch (Exception e) {
e.printStackTrace();
MenuPrincipal.salvaConfiguracao();
}
return null;
}

Até mais
Juliana

Menu em Java


>Por Mariana

Hey
Ultimos ajustes para a apresentação no sábado (21/08/2010) na sala 1. Temos trabalhado bastante em juntar os módulos que já estavam prontos, em java. Abaixo imagem do nosso menu, essa tela é provisória, sofrerá mudanças ainda.



Até mais

sexta-feira, 13 de agosto de 2010

Desenvolvimento em Java: Colisão

>Por Juliana

Bom dia,
Hoje vim mostrar a vocês o método verificaColisao() que está na classe Arena. Esse método scanneia as imagens e retorna os pontos na arena onde a bola e o robô etsão num mesmo instante. Saber o ponto exato de onde a colisão está ocorrendo é essencial para trabalharmos o choque entre os objetos.
void verificaColisao(BufferedImage image1,BufferedImage image2) {
int somaX = 0, somaY = 0;
int n=0;
int[] vImg1 = image1.getRGB(0, 0, tamX, tamY, null, 0, tamY);
int[] vImg2 = image2.getRGB(0, 0, tamX, tamY, null, 0, tamY);
for (int i = 0; i < x =" i" y =" i">0)
System.out.format("%d ", n);
}

Até semana que vem,
Juliana