Skip to content

Commit

Permalink
Melhorias no código XD
Browse files Browse the repository at this point in the history
  • Loading branch information
jeanbairro committed Oct 7, 2016
1 parent d1fd410 commit 1d69b15
Show file tree
Hide file tree
Showing 14 changed files with 80 additions and 91 deletions.
Binary file not shown.
Binary file modified fyja-game-language/build/classes/gals/Semantico.class
Binary file not shown.
Binary file not shown.
Binary file modified fyja-game-language/build/classes/interpretador/Comando.class
Binary file not shown.
Binary file modified fyja-game-language/build/classes/interpretador/Interpretador.class
Binary file not shown.
2 changes: 1 addition & 1 deletion fyja-game-language/nbproject/private/private.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group>
<file>file:/C:/Projetos/fyja-language/fyja-game-language/src/fyja/game/language/Globais.java</file>
<file>file:/C:/Projetos/fyja-language/fyja-game-language/src/interpretador/Comando.java</file>
<file>file:/C:/Projetos/fyja-language/fyja-game-language/src/fyja/game/language/Globals.java</file>
<file>file:/C:/Projetos/fyja-language/fyja-game-language/src/fyja/game/language/FyjaGameLanguage.java</file>
<file>file:/C:/Projetos/fyja-language/fyja-game-language/src/fyja/game/language/Tela.java</file>
<file>file:/C:/Projetos/fyja-language/fyja-game-language/src/gals/Semantico.java</file>
Expand Down
32 changes: 11 additions & 21 deletions fyja-game-language/src/fyja/game/language/FyjaGameLanguage.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,37 +10,30 @@
import java.awt.Graphics;
import java.awt.Image;
import interpretador.Interpretador;
import java.awt.Color;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

/**
*
* @author _jean
*/
public class FyjaGameLanguage implements Runnable {
private Mapa mapa;
private final Component tela;
private Component tela;
private Image buffer;
private Personagem personagem;

public FyjaGameLanguage(Component tela) {
this.tela = tela;
/* Atribui posição inicial na construção */
this.personagem = new Personagem(19, 19);
}

public void desenhaTela() {
private void desenhaTela() {
this.mapa.renderiza(buffer.getGraphics(), personagem);

Graphics g = this.tela.getGraphics();
if (g != null) {
g.drawImage(buffer, 0, 0, null);
g.dispose();
}
g.drawImage(buffer, 0, 0, null);
}

public void movePersonagem() throws Exception {
private void movePersonagem() throws Exception {
Comando comando = Interpretador.comandos.get(0);

if (comando.getQuantidadePassos() < 0){
Expand All @@ -52,7 +45,6 @@ public void movePersonagem() throws Exception {

switch(comando.getAcao()){
case Andar:
personagem.setCor(Color.YELLOW);
personagem.setAcaoNoMomento(Comando.Acoes.Andar);
personagem.percorrer(comando.getDirecao());
if (mapa.validaPosicao(personagem)){
Expand All @@ -63,7 +55,6 @@ public void movePersonagem() throws Exception {
}
break;
case Nadar:
personagem.setCor(Color.MAGENTA);
personagem.setAcaoNoMomento(Comando.Acoes.Nadar);
personagem.percorrer(comando.getDirecao());
if (mapa.validaPosicao(personagem)){
Expand All @@ -74,7 +65,6 @@ public void movePersonagem() throws Exception {
}
break;
case Pular:
personagem.setCor(Color.PINK);
personagem.setAcaoNoMomento(Comando.Acoes.Pular);
personagem.pular(comando.getDirecao(), comando.getQuantidadePassos());
if (mapa.validaPosicao(personagem)){
Expand All @@ -89,24 +79,24 @@ public void movePersonagem() throws Exception {

@Override
public void run() {
this.mapa = new Mapa(Globals.LINHAS_DO_MAPA, Globals.COLUNAS_DO_MAPA);
this.mapa = new Mapa(Globais.LINHAS_DO_MAPA, Globais.COLUNAS_DO_MAPA);
this.buffer = tela.getGraphicsConfiguration().createCompatibleImage(
Globals.LARGURA_DA_TELA, Globals.ALTURA_DA_TELA);
Globais.LARGURA_DA_TELA, Globais.ALTURA_DA_TELA);
Interpretador interpretador = new Interpretador();

try {
desenhaTela();
JTextArea textArea = new JTextArea(20, 20);
switch (JOptionPane.showConfirmDialog(null, new JScrollPane(textArea))) {
case JOptionPane.OK_OPTION:
interpretador.interpretar(textArea.getText());
interpretador.interpretar(textArea.getText().toUpperCase());
}

while (!Interpretador.comandos.isEmpty()) {
desenhaTela();
movePersonagem();
Thread.sleep(125
);
/* Pra movimentação ficar mais lenta */
Thread.sleep(125);
}
} catch (Exception ex){
JOptionPane.showMessageDialog(tela, "Você informou um caminho inválido. Detalhes: "+ex.getMessage());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,24 @@
*
* @author jean_
*/
public class Globals {
public class Globais {
/* Dimensões */
public static final int LINHAS_DO_MAPA = 20;
public static final int COLUNAS_DO_MAPA = 20;
public static final int TAMANHO_DOS_TILES = 15;
public static final int LARGURA_DA_TELA = COLUNAS_DO_MAPA * 30;
public static final int ALTURA_DA_TELA = LINHAS_DO_MAPA * 30;
public static final int ALTURA_DO_FOOTER = 100;

/* Objetos da Matriz */
public static final int BLOCO_BLOQUEIO = 0;
public static final int BLOCO_TERRA = 1;
public static final int BLOCO_DESTINO = 2;
public static final int BLOCO_PERSONAGEM = 3;
public static final int BLOCO_AGUA = 4;
public static final int BLOCO_CAMINHO = 5;


public static int mapa[][] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1 },
Expand Down
55 changes: 24 additions & 31 deletions fyja-game-language/src/fyja/game/language/Mapa.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,67 +9,60 @@
import java.awt.Color;
import java.awt.Graphics;

/**
*
* @author jean_
*/
public class Mapa {
private final int linhas;
private final int colunas;
private final int dados[][];

public Mapa(int linhas, int colunas) {
this.linhas = linhas;
this.colunas = colunas;
this.dados = Globals.mapa;
this.dados = Globais.mapa;
}

public void renderiza(Graphics g, Personagem personagem){
for (int i = Globals.LINHAS_DO_MAPA - 1; i >= 0; i--) {
for (int j = Globals.COLUNAS_DO_MAPA - 1; j >= 0; j--) {
int dest_x = j * Globals.TAMANHO_DOS_TILES;
int dest_y = i * Globals.TAMANHO_DOS_TILES;
for (int i = Globais.LINHAS_DO_MAPA - 1; i >= 0; i--) {
for (int j = Globais.COLUNAS_DO_MAPA - 1; j >= 0; j--) {
int dest_x = j * Globais.TAMANHO_DOS_TILES;
int dest_y = i * Globais.TAMANHO_DOS_TILES;

switch (this.dados[j][i]) {
case 0:
case Globais.BLOCO_BLOQUEIO:
g.setColor(Color.RED);
break;
case 1:
case Globais.BLOCO_TERRA:
g.setColor(Color.GREEN);
break;
case 2:
case Globais.BLOCO_DESTINO:
g.setColor(Color.WHITE);
break;
case 3:
case Globais.BLOCO_PERSONAGEM:
g.setColor(Color.YELLOW);
break;
case 4:
case Globais.BLOCO_AGUA:
g.setColor(Color.BLUE);
break;
case 5:
case Globais.BLOCO_CAMINHO:
g.setColor(Color.GRAY);
break;
}

//Pinta os blocos
g.fillRect(dest_x, dest_y,
dest_x + Globals.TAMANHO_DOS_TILES,
dest_y + Globals.TAMANHO_DOS_TILES);
dest_x + Globais.TAMANHO_DOS_TILES,
dest_y + Globais.TAMANHO_DOS_TILES);

//Desenha linha
//Desenha linha entre os blocos
g.setColor(Color.GRAY);
g.drawRect(
dest_x, dest_y,
dest_x + Globals.TAMANHO_DOS_TILES,
dest_y + Globals.TAMANHO_DOS_TILES
dest_x + Globais.TAMANHO_DOS_TILES,
dest_y + Globais.TAMANHO_DOS_TILES
);
}
}
}

public boolean validaPosicao(Personagem personagem) throws Exception {
if (personagem.getPosicaoX() < 0 || personagem.getPosicaoX() > Globals.COLUNAS_DO_MAPA - 1) {
if (personagem.getPosicaoX() < 0 || personagem.getPosicaoX() > Globais.COLUNAS_DO_MAPA - 1) {
return false;
} else if (personagem.getPosicaoY() < 0 || personagem.getPosicaoY() > Globals.LINHAS_DO_MAPA - 1) {
} else if (personagem.getPosicaoY() < 0 || personagem.getPosicaoY() > Globais.LINHAS_DO_MAPA - 1) {
return false;
} else if (dados[personagem.getPosicaoX()][personagem.getPosicaoY()] == 0){
return false;
Expand All @@ -83,14 +76,14 @@ public boolean validaPosicao(Personagem personagem) throws Exception {
}

public void trocaPosicaoPersonagem(Personagem personagem) {
for (int i = Globals.LINHAS_DO_MAPA - 1; i >= 0; i--) {
for (int j = Globals.COLUNAS_DO_MAPA - 1; j >= 0; j--) {
if (this.dados[j][i] == 3) {
this.dados[j][i] = 5;
for (int i = Globais.LINHAS_DO_MAPA - 1; i >= 0; i--) {
for (int j = Globais.COLUNAS_DO_MAPA - 1; j >= 0; j--) {
if (this.dados[j][i] == Globais.BLOCO_PERSONAGEM) {
this.dados[j][i] = Globais.BLOCO_CAMINHO;
}
}
}

this.dados[personagem.getPosicaoX()][personagem.getPosicaoY()] = 3;
this.dados[personagem.getPosicaoX()][personagem.getPosicaoY()] = Globais.BLOCO_PERSONAGEM;
}
}
4 changes: 0 additions & 4 deletions fyja-game-language/src/fyja/game/language/Personagem.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,6 @@
import interpretador.Comando.Acoes;
import java.awt.Color;

/**
*
* @author jean_
*/
public class Personagem {

public Personagem(int posicaoX, int posicaoY) {
Expand Down
6 changes: 1 addition & 5 deletions fyja-game-language/src/fyja/game/language/Tela.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,13 @@
*/
package fyja.game.language;

/**
*
* @author jean_
*/
public class Tela extends javax.swing.JFrame {

private FyjaGameLanguage game;

public Tela() {
initComponents();
setSize(Globals.LARGURA_DA_TELA, Globals.ALTURA_DA_TELA + Globals.ALTURA_DO_FOOTER);
setSize(Globais.LARGURA_DA_TELA, Globais.ALTURA_DA_TELA + Globais.ALTURA_DO_FOOTER);
setResizable(false);
setTitle("Fyja Language");
game = new FyjaGameLanguage(this);
Expand Down
46 changes: 29 additions & 17 deletions fyja-game-language/src/gals/Semantico.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,47 @@

public class Semantico implements Constants
{
/*
Um comando é composto por três dados: quantidade de passos, direção e ação.
O executeAction é chamado quando for recebido um desses dados, esses dados são recebidos na ordem citada acima.
Partindo disso implementamos a lógica para adicionar o dado recebidos em uma fila.
E quando nessa fila é adicionada o último dado que compões um comando, ou seja, uma ação (ANDAR ou PULAR ou NADAR),
sabemos que ela deve ser esvaziada, instanciando um novo comando.
*/
public void executeAction(int action, Token token) throws SemanticError
{
switch(action){
case 1:
Interpretador.fila.add(Comando.Acoes.Andar);
Interpretador.comandos.add(new Comando((int)Interpretador.fila.poll(),
(String)Interpretador.fila.poll(),
(Comando.Acoes) Interpretador.fila.poll()
));
Interpretador.filaInterpretacao.add(Comando.Acoes.Andar);
Interpretador.comandos.add(new Comando(
(int)Interpretador.filaInterpretacao.poll(),
(String)Interpretador.filaInterpretacao.poll(),
(Comando.Acoes) Interpretador.filaInterpretacao.poll()
));
break;
case 2:
Interpretador.fila.add(Comando.Acoes.Pular);
Interpretador.comandos.add(new Comando((int)Interpretador.fila.poll(),
(String)Interpretador.fila.poll(),
(Comando.Acoes) Interpretador.fila.poll()
));
Interpretador.filaInterpretacao.add(Comando.Acoes.Pular);
Interpretador.comandos.add(new Comando(
(int)Interpretador.filaInterpretacao.poll(),
(String)Interpretador.filaInterpretacao.poll(),
(Comando.Acoes) Interpretador.filaInterpretacao.poll()
));
break;
case 3:
Interpretador.fila.add(Comando.Acoes.Nadar);
Interpretador.comandos.add(new Comando((int)Interpretador.fila.poll(),
(String)Interpretador.fila.poll(),
(Comando.Acoes) Interpretador.fila.poll()
));
Interpretador.filaInterpretacao.add(Comando.Acoes.Nadar);
Interpretador.comandos.add(new Comando(
(int)Interpretador.filaInterpretacao.poll(),
(String)Interpretador.filaInterpretacao.poll(),
(Comando.Acoes) Interpretador.filaInterpretacao.poll()
));
break;
case 4:
Interpretador.fila.add(Integer.parseInt(token.getLexeme()));
/* Quantidade de Passos */
Interpretador.filaInterpretacao.add(Integer.parseInt(token.getLexeme()));
break;
case 5:
Interpretador.fila.add(token.getLexeme());
/* Direção */
Interpretador.filaInterpretacao.add(token.getLexeme());
break;
}
}
Expand Down
8 changes: 2 additions & 6 deletions fyja-game-language/src/interpretador/Comando.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,14 @@
*/
package interpretador;

/**
*
* @author jean_arrombadinho
*/
public class Comando {
public enum Acoes {
Andar, Pular, Nadar;
}

/*public enum Direcoes {
public enum Direcoes {
Norte, Sul, Leste, Oeste;
}*/
}

private Acoes acao;
private String direcao;
Expand Down
6 changes: 1 addition & 5 deletions fyja-game-language/src/interpretador/Interpretador.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,8 @@
import java.util.List;
import java.util.Queue;

/**
*
* @author jean_viadinho
*/
public class Interpretador {
public static Queue<Object> fila = new LinkedList<>();;
public static Queue<Object> filaInterpretacao = new LinkedList<>();
public static List<Comando> comandos = new ArrayList<>();

public void interpretar(String fonte) throws LexicalError, SyntaticError, SemanticError {
Expand Down

0 comments on commit 1d69b15

Please sign in to comment.