From 0d82bf43de15965aea7bfe63ab4e3e760efee324 Mon Sep 17 00:00:00 2001 From: Leoo Resende Date: Sun, 2 Jul 2023 15:33:57 -0300 Subject: [PATCH 01/10] Adicionado arquivos iniciais do projeto. --- jogo-oito/.gitignore | 51 ++++++++++++++++++++++++++++++++++++++++++++ jogo-oito/pom.xml | 8 +++++++ 2 files changed, 59 insertions(+) diff --git a/jogo-oito/.gitignore b/jogo-oito/.gitignore index b83d222..8c3cbbe 100644 --- a/jogo-oito/.gitignore +++ b/jogo-oito/.gitignore @@ -1 +1,52 @@ /target/ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + + +### Maven ### +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/ +.settings/ +baeldung.jks +baeldung.p12 +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +src/main/resources/application.properties diff --git a/jogo-oito/pom.xml b/jogo-oito/pom.xml index ebc4845..372d39a 100644 --- a/jogo-oito/pom.xml +++ b/jogo-oito/pom.xml @@ -6,6 +6,14 @@ UTF-8 + + + org.junit.jupiter + junit-jupiter + 5.8.1 + test + + rest-unity-test From d52ca28232c314d8ec7c79044c690d67400bc943 Mon Sep 17 00:00:00 2001 From: Leoo Resende Date: Sun, 2 Jul 2023 15:43:20 -0300 Subject: [PATCH 02/10] =?UTF-8?q?Adicionado=20representa=C3=A7=C3=A3o=20da?= =?UTF-8?q?=20posi=C3=A7=C3=A3o=20de=20uma=20pe=C3=A7a,=20tabulerio=20e=20?= =?UTF-8?q?movimento=20de=20pe=C3=A7a.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gpt/infra/values/DirecaoMovimento.java | 46 +++++++++++ .../infra/values/DirecaoMovimentoTeclado.java | 27 ++++++ .../main/java/chat/gpt/model/PosicaoPeca.java | 27 ++++++ .../main/java/chat/gpt/model/Tabuleiro.java | 82 +++++++++++++++++++ 4 files changed, 182 insertions(+) create mode 100644 jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java create mode 100644 jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimentoTeclado.java create mode 100644 jogo-oito/src/main/java/chat/gpt/model/PosicaoPeca.java create mode 100644 jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java diff --git a/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java new file mode 100644 index 0000000..3cdcdb9 --- /dev/null +++ b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java @@ -0,0 +1,46 @@ +package chat.gpt.infra.values; + +import chat.gpt.model.PosicaoPeca; + +import java.util.Arrays; + +public enum DirecaoMovimento { + CIMA(1, 0), + BAIXO(-1, 0), + ESQUERDA(0, 1), + DIREITA(0, -1), + SEM_MOVIMENTO(-1, -1); + + private final int linha; + private final int coluna; + DirecaoMovimento(int linha, int coluna) { + this.linha = linha; + this.coluna = coluna; + } + + public int getLinha() { + return linha; + } + + public int getColuna() { + return coluna; + } + + public PosicaoPeca getPosicao() { + return new PosicaoPeca(this.linha, this.coluna); + } + + public static DirecaoMovimento pegaPelaPosicaoBotaoTocado(PosicaoPeca pVazia, PosicaoPeca pPecaClicada) { + int linha = pPecaClicada.pegarDiferencaLinhaPara(pVazia); + int coluna = pPecaClicada.pegarDiferencaColunaPara(pVazia); + return Arrays.stream(values()).filter(movimentoMouseValue -> movimentoMouseValue.linha == linha && + movimentoMouseValue.coluna == coluna).findFirst().orElse(DirecaoMovimento.SEM_MOVIMENTO); + } + + public static DirecaoMovimento pegaPeloTeclado(int teclaCode) { + return Arrays.stream(DirecaoMovimentoTeclado.values()).filter(movimentoTeclado -> movimentoTeclado.getTeclaCode() == teclaCode) + .map(DirecaoMovimentoTeclado::getMovimento) + .findFirst().orElse(DirecaoMovimento.SEM_MOVIMENTO); + + } +} diff --git a/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimentoTeclado.java b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimentoTeclado.java new file mode 100644 index 0000000..f71ceab --- /dev/null +++ b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimentoTeclado.java @@ -0,0 +1,27 @@ +package chat.gpt.infra.values; + +import java.awt.event.KeyEvent; + +public enum DirecaoMovimentoTeclado { + KEY_UP(KeyEvent.VK_UP, DirecaoMovimento.CIMA), + KEY_DOWN(KeyEvent.VK_DOWN, DirecaoMovimento.BAIXO), + KEY_LEFT(KeyEvent.VK_LEFT, DirecaoMovimento.ESQUERDA), + KEY_RIGHT(KeyEvent.VK_RIGHT, DirecaoMovimento.DIREITA); + + + private final DirecaoMovimento movimento; + private final int teclaCode; + + DirecaoMovimentoTeclado(int teclaCode, DirecaoMovimento movimento) { + this.teclaCode = teclaCode; + this.movimento = movimento; + } + + public DirecaoMovimento getMovimento() { + return movimento; + } + + public int getTeclaCode() { + return teclaCode; + } +} diff --git a/jogo-oito/src/main/java/chat/gpt/model/PosicaoPeca.java b/jogo-oito/src/main/java/chat/gpt/model/PosicaoPeca.java new file mode 100644 index 0000000..a3d811f --- /dev/null +++ b/jogo-oito/src/main/java/chat/gpt/model/PosicaoPeca.java @@ -0,0 +1,27 @@ +package chat.gpt.model; + +public class PosicaoPeca { + private final int linha; + private final int coluna; + + public PosicaoPeca(int linha, int coluna) { + this.linha = linha; + this.coluna = coluna; + } + + public int getLinha() { + return this.linha; + } + + public int getColuna() { + return this.coluna; + } + + public int pegarDiferencaLinhaPara(PosicaoPeca posicao) { + return this.linha - posicao.linha; + } + + public int pegarDiferencaColunaPara(PosicaoPeca posicao) { + return this.coluna - posicao.coluna; + } +} diff --git a/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java b/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java new file mode 100644 index 0000000..27ac979 --- /dev/null +++ b/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java @@ -0,0 +1,82 @@ +package chat.gpt.model; + +import chat.gpt.infra.contratos.TabuleiroLaco; +import chat.gpt.infra.util.Util; +import chat.gpt.infra.values.DirecaoMovimento; + +public class Tabuleiro { + private int[][] tabuleiro; + + public Tabuleiro() { + this.resetaTabuleiro(); + } + + public void resetaTabuleiro() { + this.tabuleiro = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 0}}; + } + + public int pegaPecaPelaPosicao(PosicaoPeca posicaoPeca) { + return this.tabuleiro[posicaoPeca.getLinha()][posicaoPeca.getColuna()]; + } + + public void executaParaCadaPosicao(TabuleiroLaco tabuleiroLaco) { + for (int linha = 0; linha < 3; linha++) { + for (int coluna = 0; coluna < 3; coluna++) { + tabuleiroLaco.executar(linha, coluna); + } + } + } + + public PosicaoPeca encontraPosicaoPecaPeloNumero(int numeroPeca) { + for (int linha = 0; linha < 3; linha++) { + for (int coluna = 0; coluna < 3; coluna++) { + if (tabuleiro[linha][coluna] == numeroPeca) { + return new PosicaoPeca(linha, coluna); + } + } + } + throw new RuntimeException("Posição não encontrada"); + } + + public PosicaoPeca pegaPosicaoVazia() { + for (int linha = 0; linha < 3; linha++) { + for (int coluna = 0; coluna < 3; coluna++) { + if (this.tabuleiro[linha][coluna] == 0) { + return new PosicaoPeca(linha, coluna); + } + } + } + throw new RuntimeException("Ocorreu um erro no jogo"); + } + + public boolean movePeca(DirecaoMovimento direcao) { + PosicaoPeca posicaoVazia = this.pegaPosicaoVazia(); + PosicaoPeca pNovaPosicao = this.pegaNovaPosicao(posicaoVazia, direcao); + + if (Util.posicaoEhInvalida(pNovaPosicao)) return false; + + this.tabuleiro[posicaoVazia.getLinha()][posicaoVazia.getColuna()] + = this.tabuleiro[pNovaPosicao.getLinha()][pNovaPosicao.getColuna()]; + this.tabuleiro[pNovaPosicao.getLinha()][pNovaPosicao.getColuna()] = 0; + return true; + } + + private PosicaoPeca pegaNovaPosicao(PosicaoPeca pVazia, DirecaoMovimento direcao) { + int novaLinha = pVazia.getLinha() + direcao.getLinha(); + int novaColuna = pVazia.getColuna() + direcao.getColuna(); + return new PosicaoPeca(novaLinha, novaColuna); + } + + public boolean jogoConcluido() { + int count = 1; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + if (tabuleiro[i][j] != count % 9) { + return false; + } + count++; + } + } + return true; + } +} From a40760d2db47830a44b14b9b495be52d690a1f1c Mon Sep 17 00:00:00 2001 From: Leoo Resende Date: Sun, 2 Jul 2023 15:45:03 -0300 Subject: [PATCH 03/10] Removida logica do jogo da classe maine adicionada em uma classe especifica. --- .../src/main/java/chat/gpt/JogoDosOito.java | 158 +----------------- .../gpt/infra/contratos/TabuleiroLaco.java | 6 + .../main/java/chat/gpt/infra/util/Util.java | 16 ++ .../main/java/chat/gpt/ui/JogoDosOitoUI.java | 114 +++++++++++++ 4 files changed, 142 insertions(+), 152 deletions(-) create mode 100644 jogo-oito/src/main/java/chat/gpt/infra/contratos/TabuleiroLaco.java create mode 100644 jogo-oito/src/main/java/chat/gpt/infra/util/Util.java create mode 100644 jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java diff --git a/jogo-oito/src/main/java/chat/gpt/JogoDosOito.java b/jogo-oito/src/main/java/chat/gpt/JogoDosOito.java index e51dd08..009da41 100644 --- a/jogo-oito/src/main/java/chat/gpt/JogoDosOito.java +++ b/jogo-oito/src/main/java/chat/gpt/JogoDosOito.java @@ -1,158 +1,12 @@ package chat.gpt; -import java.awt.Font; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; +import chat.gpt.ui.JogoDosOitoUI; -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JOptionPane; +public class JogoDosOito { -public class JogoDosOito extends JFrame implements KeyListener { + public static final String NOME_DO_JOGO = "Jogo dos Oito"; - private int[][] tabuleiro = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 0 } }; - private JButton[][] botoes = new JButton[3][3]; - private JButton botaoReiniciar; - - public JogoDosOito() { - super("Jogo dos Oito"); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setSize(300, 300); - setLayout(new GridLayout(4, 3)); - - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - JButton botao = new JButton(); - botao.setFont(new Font("Arial", Font.BOLD, 36)); - botoes[i][j] = botao; - add(botao); - } - } - - botaoReiniciar = new JButton("Reiniciar"); - botaoReiniciar.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - reiniciarJogo(); - } - }); - add(new JLabel("")); - add(botaoReiniciar); - add(new JLabel("")); - - addKeyListener(this); - setFocusable(true); - atualizarTabuleiro(); - setVisible(true); - } - - public void keyPressed(KeyEvent e) { - int keyCode = e.getKeyCode(); - switch (keyCode) { - case KeyEvent.VK_UP: - mover(1, 0); - break; - case KeyEvent.VK_DOWN: - mover(-1, 0); - break; - case KeyEvent.VK_LEFT: - mover(0, 1); - break; - case KeyEvent.VK_RIGHT: - mover(0, -1); - break; - } - } - - public void keyTyped(KeyEvent e) { - } - - public void keyReleased(KeyEvent e) { - } - - private void mover(int linha, int coluna) { - int linhaVazia = -1; - int colunaVazia = -1; - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - if (tabuleiro[i][j] == 0) { - linhaVazia = i; - colunaVazia = j; - } - } - } - int novaLinha = linhaVazia + linha; - int novaColuna = colunaVazia + coluna; - if (novaLinha < 0 || novaLinha > 2 || novaColuna < 0 || novaColuna > 2) { - // movimento inválido - return; - } - tabuleiro[linhaVazia][colunaVazia] = tabuleiro[novaLinha][novaColuna]; - tabuleiro[novaLinha][novaColuna] = 0; - atualizarTabuleiro(); - if (jogoConcluido()) { - JOptionPane.showMessageDialog(this, "Parabéns, você venceu!"); - reiniciarJogo(); - } - } - - public static void main(String[] args) { - new JogoDosOito(); - } - - private boolean jogoConcluido() { - int count = 1; - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - if (tabuleiro[i][j] != count % 9) { - return false; - } - count++; - } - } - return true; - } - - private boolean movimentarPeca(int linha, int coluna) { - if (linha > 0 && tabuleiro[linha - 1][coluna] == 0) { - tabuleiro[linha - 1][coluna] = tabuleiro[linha][coluna]; - tabuleiro[linha][coluna] = 0; - return true; - } else if (linha < 2 && tabuleiro[linha + 1][coluna] == 0) { - tabuleiro[linha + 1][coluna] = tabuleiro[linha][coluna]; - tabuleiro[linha][coluna] = 0; - return true; - } else if (coluna > 0 && tabuleiro[linha][coluna - 1] == 0) { - tabuleiro[linha][coluna - 1] = tabuleiro[linha][coluna]; - tabuleiro[linha][coluna] = 0; - return true; - } else if (coluna < 2 && tabuleiro[linha][coluna + 1] == 0) { - tabuleiro[linha][coluna + 1] = tabuleiro[linha][coluna]; - tabuleiro[linha][coluna] = 0; - return true; - } - return false; - } - - private void atualizarTabuleiro() { - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - JButton botao = botoes[i][j]; - int valor = tabuleiro[i][j]; - if (valor == 0) { - botao.setText(""); - } else { - botao.setText(String.valueOf(valor)); - } - } - } - } - - private void reiniciarJogo() { - tabuleiro = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 0 } }; - atualizarTabuleiro(); - } + public static void main(String[] args) { + new JogoDosOitoUI(JogoDosOito.NOME_DO_JOGO).iniciarJogo(); + } } diff --git a/jogo-oito/src/main/java/chat/gpt/infra/contratos/TabuleiroLaco.java b/jogo-oito/src/main/java/chat/gpt/infra/contratos/TabuleiroLaco.java new file mode 100644 index 0000000..f47b00f --- /dev/null +++ b/jogo-oito/src/main/java/chat/gpt/infra/contratos/TabuleiroLaco.java @@ -0,0 +1,6 @@ +package chat.gpt.infra.contratos; + +public interface TabuleiroLaco { + + void executar(int linha, int coluna); +} diff --git a/jogo-oito/src/main/java/chat/gpt/infra/util/Util.java b/jogo-oito/src/main/java/chat/gpt/infra/util/Util.java new file mode 100644 index 0000000..99280cd --- /dev/null +++ b/jogo-oito/src/main/java/chat/gpt/infra/util/Util.java @@ -0,0 +1,16 @@ +package chat.gpt.infra.util; + +import chat.gpt.infra.values.DirecaoMovimento; +import chat.gpt.model.PosicaoPeca; + +public class Util { + + public static boolean movimentoEhInvalido(DirecaoMovimento pMovimento) { + return pMovimento.getColuna() == -1 && pMovimento.getLinha() == -1; + } + + public static boolean posicaoEhInvalida(PosicaoPeca pMovimento) { + return pMovimento.getLinha() < 0 || pMovimento.getLinha() > 2 + || pMovimento.getColuna() < 0 || pMovimento.getColuna() > 2; + } +} diff --git a/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java b/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java new file mode 100644 index 0000000..2eb610c --- /dev/null +++ b/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java @@ -0,0 +1,114 @@ +package chat.gpt.ui; + +import chat.gpt.infra.util.Util; +import chat.gpt.infra.values.DirecaoMovimento; +import chat.gpt.model.PosicaoPeca; +import chat.gpt.model.Tabuleiro; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; +import java.util.Arrays; + +public class JogoDosOitoUI { + + public static final String STR_VAZIA = ""; + private final Tabuleiro tabuleiro; + private final JButton[][] botoes = new JButton[3][3]; + private final JFrame jFrame; + + public JogoDosOitoUI(String titulo) { + this.jFrame = new JFrame(titulo); + this.tabuleiro = new Tabuleiro(); + } + + public void iniciarJogo() { + jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + jFrame.setSize(300, 300); + jFrame.setLayout(new GridLayout(4, 3)); + + this.criaComponentes(); + + this.permiteJogarPeloTeclado(); + jFrame.setFocusable(true); + this.atualizaTabuleiro(); + jFrame.setVisible(true); + } + + private void criaComponentes() { + this.tabuleiro.executaParaCadaPosicao((linha, coluna) -> { + JButton botaoPeca = this.criaBotaoPeca(); + botoes[linha][coluna] = botaoPeca; + this.adicionaComponentesJframe(botaoPeca); + botaoPeca.addActionListener(this::moverPecaPeloMouse); + }); + JButton botaoReiniciar = new JButton("Reiniciar"); + botaoReiniciar.addActionListener(e -> this.reiniciaJogo()); + this.adicionaComponentesJframe(new JLabel(STR_VAZIA), botaoReiniciar, new JLabel(STR_VAZIA)); + } + + private void moverPecaPeloMouse(ActionEvent e) { + String numeroPeca = ((JButton) e.getSource()).getText(); + if (numeroPeca.isEmpty()) return; + DirecaoMovimento direcaoMovimento = this.pegaDirecaoMovimentoMouse(numeroPeca); + this.movimentaPecaEAtualiza(direcaoMovimento); + } + + private void movimentaPecaPeloTeclado(KeyEvent e) { + DirecaoMovimento movimento = DirecaoMovimento.pegaPeloTeclado(e.getKeyCode()); + this.movimentaPecaEAtualiza(movimento); + } + + + private DirecaoMovimento pegaDirecaoMovimentoMouse(String numeroPeca) { + PosicaoPeca pPecaTocada = this.tabuleiro.encontraPosicaoPecaPeloNumero(Integer.parseInt(numeroPeca)); + PosicaoPeca pVazia = this.tabuleiro.pegaPosicaoVazia(); + return DirecaoMovimento.pegaPelaPosicaoBotaoTocado(pVazia, pPecaTocada); + } + + private void permiteJogarPeloTeclado() { + KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(e -> { + if (e.getID() == KeyEvent.KEY_PRESSED) this.movimentaPecaPeloTeclado(e); + return false; + }); + } + + private void reiniciaJogo() { + this.tabuleiro.resetaTabuleiro(); + this.atualizaTabuleiro(); + } + + private void movimentaPecaEAtualiza(DirecaoMovimento movimento) { + if (Util.movimentoEhInvalido(movimento)) return; + boolean moveu = this.tabuleiro.movePeca(movimento); + if (moveu) { + this.atualizaTabuleiro(); + this.verificaJogoConcluido(); + } + } + + private void verificaJogoConcluido() { + if (this.tabuleiro.jogoConcluido()) { + JOptionPane.showMessageDialog(this.jFrame, "Parabéns, você venceu!"); + } + } + + private void atualizaTabuleiro() { + this.tabuleiro.executaParaCadaPosicao((linha, coluna) -> { + JButton botao = this.botoes[linha][coluna]; + int pecaNumero = this.tabuleiro.pegaPecaPelaPosicao(new PosicaoPeca(linha, coluna)); + botao.setText(pecaNumero == 0 ? STR_VAZIA : String.valueOf(pecaNumero)); + }); + } + + private JButton criaBotaoPeca() { + JButton botao = new JButton(); + botao.setFont(new Font("Arial", Font.BOLD, 36)); + return botao; + } + + private void adicionaComponentesJframe(Component... components) { + Arrays.stream(components).forEach(this.jFrame::add); + } +} From b9d989d4f9e1a75a89dedb73dc0144f7462f7c7c Mon Sep 17 00:00:00 2001 From: Leoo Resende Date: Sun, 2 Jul 2023 15:45:24 -0300 Subject: [PATCH 04/10] Adicionado testes. --- jogo-oito/src/test/java/TabuleiroTest.java | 101 +++++++++++++++++++++ jogo-oito/src/test/java/UITest.java | 18 ++++ 2 files changed, 119 insertions(+) create mode 100644 jogo-oito/src/test/java/TabuleiroTest.java create mode 100644 jogo-oito/src/test/java/UITest.java diff --git a/jogo-oito/src/test/java/TabuleiroTest.java b/jogo-oito/src/test/java/TabuleiroTest.java new file mode 100644 index 0000000..201a3ed --- /dev/null +++ b/jogo-oito/src/test/java/TabuleiroTest.java @@ -0,0 +1,101 @@ +import chat.gpt.infra.util.Util; +import chat.gpt.infra.values.DirecaoMovimento; +import chat.gpt.model.PosicaoPeca; +import chat.gpt.model.Tabuleiro; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.awt.event.KeyEvent; + +class TabuleiroTest { + private Tabuleiro tabuleiro; + + @BeforeEach + public void inicializar() { + this.tabuleiro = new Tabuleiro(); + } + + @Test + void deveriaPegarPosicaoVazia() { + Assertions.assertDoesNotThrow(() -> this.tabuleiro.pegaPosicaoVazia()); + } + + @Test + void deveriaPegarPosicaoPecasExistentes() { + for (int i = 1; i < 9; i++) { + int numeroPeca = i; + Assertions.assertDoesNotThrow(() -> this.tabuleiro.encontraPosicaoPecaPeloNumero(numeroPeca)); + } + } + + @Test + void naoDeveriaPegarPosicaoDePecasInexistentes() { + for (int i = 9; i < 99; i++) { + int numeroPeca = i; + Assertions.assertThrows(RuntimeException.class, () -> this.tabuleiro.encontraPosicaoPecaPeloNumero(numeroPeca)); + } + } + + @Test + void naoDeveriaAceitarMovimentosInvalidos() { + boolean movimentoMouseInvalido = Util.movimentoEhInvalido(DirecaoMovimento.SEM_MOVIMENTO); + Assertions.assertTrue(movimentoMouseInvalido); + } + + @Test + void naoDeveriaAceitarPosicoesPecasInvalidas() { + Assertions.assertTrue(Util.posicaoEhInvalida(new PosicaoPeca(5, 5))); + Assertions.assertTrue(Util.posicaoEhInvalida(new PosicaoPeca(-5, -5))); + Assertions.assertTrue(Util.posicaoEhInvalida(new PosicaoPeca(15, 15))); + } + + @Test + void deveriaTerMovimentoComTeclasValidas() { + DirecaoMovimento movimentoInvalido1 = DirecaoMovimento.pegaPeloTeclado(KeyEvent.VK_UP); + Assertions.assertEquals(movimentoInvalido1, DirecaoMovimento.CIMA); + + DirecaoMovimento movimentoInvalido2 = DirecaoMovimento.pegaPeloTeclado(KeyEvent.VK_DOWN); + Assertions.assertEquals(movimentoInvalido2, DirecaoMovimento.BAIXO); + + DirecaoMovimento movimentoInvalido3 = DirecaoMovimento.pegaPeloTeclado(KeyEvent.VK_LEFT); + Assertions.assertEquals(movimentoInvalido3, DirecaoMovimento.ESQUERDA); + + DirecaoMovimento movimentoInvalido4 = DirecaoMovimento.pegaPeloTeclado(KeyEvent.VK_RIGHT); + Assertions.assertEquals(movimentoInvalido4, DirecaoMovimento.DIREITA); + } + + + @Test + void naoDeveriaTerMovimentoComTeclasInvalidas() { + DirecaoMovimento movimentoInvalido1 = DirecaoMovimento.pegaPeloTeclado(KeyEvent.VK_E); + Assertions.assertEquals(movimentoInvalido1, DirecaoMovimento.SEM_MOVIMENTO); + + DirecaoMovimento movimentoInvalido2 = DirecaoMovimento.pegaPeloTeclado(KeyEvent.VK_L); + Assertions.assertEquals(movimentoInvalido2, DirecaoMovimento.SEM_MOVIMENTO); + + DirecaoMovimento movimentoInvalido3 = DirecaoMovimento.pegaPeloTeclado(KeyEvent.VK_U); + Assertions.assertEquals(movimentoInvalido3, DirecaoMovimento.SEM_MOVIMENTO); + } + + @Test + @DisplayName("Teste da movimentação de pecas com sequencia de movimentos iniciais validos.") + void deveriaMoverPecasSeDirecaoForInvalida() { + Assertions.assertTrue(this.tabuleiro.movePeca(DirecaoMovimento.DIREITA)); + Assertions.assertTrue(this.tabuleiro.movePeca(DirecaoMovimento.DIREITA)); + Assertions.assertTrue(this.tabuleiro.movePeca(DirecaoMovimento.BAIXO)); + Assertions.assertTrue(this.tabuleiro.movePeca(DirecaoMovimento.BAIXO)); + Assertions.assertTrue(this.tabuleiro.movePeca(DirecaoMovimento.ESQUERDA)); + Assertions.assertTrue(this.tabuleiro.movePeca(DirecaoMovimento.ESQUERDA)); + Assertions.assertTrue(this.tabuleiro.movePeca(DirecaoMovimento.CIMA)); + Assertions.assertTrue(this.tabuleiro.movePeca(DirecaoMovimento.CIMA)); + } + + @Test + @DisplayName("Teste da movimentação de pecas com sequencia de movimentos iniciais invalidos.") + void naoDeveriaMoverPecasSeDirecaoForInvalida() { + Assertions.assertFalse(this.tabuleiro.movePeca(DirecaoMovimento.ESQUERDA)); + Assertions.assertFalse(this.tabuleiro.movePeca(DirecaoMovimento.CIMA)); + } +} diff --git a/jogo-oito/src/test/java/UITest.java b/jogo-oito/src/test/java/UITest.java new file mode 100644 index 0000000..1d515e3 --- /dev/null +++ b/jogo-oito/src/test/java/UITest.java @@ -0,0 +1,18 @@ +import chat.gpt.ui.JogoDosOitoUI; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class UITest { + + private JogoDosOitoUI ui; + + @BeforeEach + public void inicializar() { + this.ui = new JogoDosOitoUI("Teste"); + } + @Test + void deveriaIniciarJogoSemProblemas() { + Assertions.assertDoesNotThrow(() -> this.ui.iniciarJogo()); + } +} From c6f34754af4e1743914ed672a41674e18d19f48a Mon Sep 17 00:00:00 2001 From: Leoo Resende Date: Sun, 2 Jul 2023 17:16:22 -0300 Subject: [PATCH 05/10] Mudado o do tabuleiro para uma lista orientada a objetos. --- .../gpt/infra/values/DirecaoMovimento.java | 5 -- .../chat/gpt/infra/values/TabuleiroPecas.java | 29 ++++++++++++ .../main/java/chat/gpt/model/Tabuleiro.java | 46 +++++++++++++------ .../main/java/chat/gpt/ui/JogoDosOitoUI.java | 2 +- 4 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 jogo-oito/src/main/java/chat/gpt/infra/values/TabuleiroPecas.java diff --git a/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java index 3cdcdb9..f25a498 100644 --- a/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java +++ b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java @@ -26,10 +26,6 @@ public int getColuna() { return coluna; } - public PosicaoPeca getPosicao() { - return new PosicaoPeca(this.linha, this.coluna); - } - public static DirecaoMovimento pegaPelaPosicaoBotaoTocado(PosicaoPeca pVazia, PosicaoPeca pPecaClicada) { int linha = pPecaClicada.pegarDiferencaLinhaPara(pVazia); int coluna = pPecaClicada.pegarDiferencaColunaPara(pVazia); @@ -41,6 +37,5 @@ public static DirecaoMovimento pegaPeloTeclado(int teclaCode) { return Arrays.stream(DirecaoMovimentoTeclado.values()).filter(movimentoTeclado -> movimentoTeclado.getTeclaCode() == teclaCode) .map(DirecaoMovimentoTeclado::getMovimento) .findFirst().orElse(DirecaoMovimento.SEM_MOVIMENTO); - } } diff --git a/jogo-oito/src/main/java/chat/gpt/infra/values/TabuleiroPecas.java b/jogo-oito/src/main/java/chat/gpt/infra/values/TabuleiroPecas.java new file mode 100644 index 0000000..2092acf --- /dev/null +++ b/jogo-oito/src/main/java/chat/gpt/infra/values/TabuleiroPecas.java @@ -0,0 +1,29 @@ +package chat.gpt.infra.values; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public enum TabuleiroPecas { + LINHA_UM(1, 2, 3), + LINHA_DOIS(4, 5, 6), + LINHA_TRES(7, 8, 0); + + + private final int coluna1; + private final int coluna2; + private final int coluna3; + + TabuleiroPecas(int coluna1, int coluna2, int coluna3) { + this.coluna1 = coluna1; + this.coluna2 = coluna2; + this.coluna3 = coluna3; + } + + public static List> pegaPecasTabuleiro() { + return new ArrayList<>(Arrays.stream(TabuleiroPecas.values()) + .map(tabuleiroPecas -> Arrays.asList(tabuleiroPecas.coluna1, + tabuleiroPecas.coluna2, tabuleiroPecas.coluna3)) + .toList()); + } +} diff --git a/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java b/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java index 27ac979..48bc649 100644 --- a/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java +++ b/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java @@ -3,20 +3,38 @@ import chat.gpt.infra.contratos.TabuleiroLaco; import chat.gpt.infra.util.Util; import chat.gpt.infra.values.DirecaoMovimento; +import chat.gpt.infra.values.TabuleiroPecas; + +import java.util.*; public class Tabuleiro { - private int[][] tabuleiro; + private List> tabuleiro; public Tabuleiro() { - this.resetaTabuleiro(); + this.criaTabuleiro(); + } + + private void criaTabuleiro() { + this.tabuleiro = TabuleiroPecas.pegaPecasTabuleiro(); } public void resetaTabuleiro() { - this.tabuleiro = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 0}}; + this.tabuleiro.clear(); + this.criaTabuleiro(); } + public int pegaPecaPelaPosicao(PosicaoPeca posicaoPeca) { - return this.tabuleiro[posicaoPeca.getLinha()][posicaoPeca.getColuna()]; + return this.tabuleiro.get(posicaoPeca.getLinha()).get(posicaoPeca.getColuna()); + } + + public int pegaPecaPelaPosicao(int linha, int coluna) { + return this.pegaPecaPelaPosicao(new PosicaoPeca(linha, coluna)); + } + + private void mudaPosicaoPeca(PosicaoPeca posicaoAlvo, int novoValor) { + this.tabuleiro.get(posicaoAlvo.getLinha()) + .set(posicaoAlvo.getColuna(), novoValor); } public void executaParaCadaPosicao(TabuleiroLaco tabuleiroLaco) { @@ -30,7 +48,7 @@ public void executaParaCadaPosicao(TabuleiroLaco tabuleiroLaco) { public PosicaoPeca encontraPosicaoPecaPeloNumero(int numeroPeca) { for (int linha = 0; linha < 3; linha++) { for (int coluna = 0; coluna < 3; coluna++) { - if (tabuleiro[linha][coluna] == numeroPeca) { + if (this.pegaPecaPelaPosicao(new PosicaoPeca(linha, coluna)) == numeroPeca) { return new PosicaoPeca(linha, coluna); } } @@ -41,7 +59,7 @@ public PosicaoPeca encontraPosicaoPecaPeloNumero(int numeroPeca) { public PosicaoPeca pegaPosicaoVazia() { for (int linha = 0; linha < 3; linha++) { for (int coluna = 0; coluna < 3; coluna++) { - if (this.tabuleiro[linha][coluna] == 0) { + if (this.pegaPecaPelaPosicao(linha, coluna) == 0) { return new PosicaoPeca(linha, coluna); } } @@ -51,13 +69,13 @@ public PosicaoPeca pegaPosicaoVazia() { public boolean movePeca(DirecaoMovimento direcao) { PosicaoPeca posicaoVazia = this.pegaPosicaoVazia(); - PosicaoPeca pNovaPosicao = this.pegaNovaPosicao(posicaoVazia, direcao); + PosicaoPeca posicaoNova = this.pegaNovaPosicao(posicaoVazia, direcao); - if (Util.posicaoEhInvalida(pNovaPosicao)) return false; + if (Util.posicaoEhInvalida(posicaoNova)) return false; - this.tabuleiro[posicaoVazia.getLinha()][posicaoVazia.getColuna()] - = this.tabuleiro[pNovaPosicao.getLinha()][pNovaPosicao.getColuna()]; - this.tabuleiro[pNovaPosicao.getLinha()][pNovaPosicao.getColuna()] = 0; + this.mudaPosicaoPeca(posicaoVazia, + this.pegaPecaPelaPosicao(posicaoNova.getLinha(), posicaoNova.getColuna())); + this.mudaPosicaoPeca(posicaoNova, 0); return true; } @@ -69,9 +87,9 @@ private PosicaoPeca pegaNovaPosicao(PosicaoPeca pVazia, DirecaoMovimento direcao public boolean jogoConcluido() { int count = 1; - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - if (tabuleiro[i][j] != count % 9) { + for (int linha = 0; linha < 3; linha++) { + for (int coluna = 0; coluna < 3; coluna++) { + if (this.pegaPecaPelaPosicao(linha, coluna) != count % 9) { return false; } count++; diff --git a/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java b/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java index 2eb610c..dac5443 100644 --- a/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java +++ b/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java @@ -97,7 +97,7 @@ private void verificaJogoConcluido() { private void atualizaTabuleiro() { this.tabuleiro.executaParaCadaPosicao((linha, coluna) -> { JButton botao = this.botoes[linha][coluna]; - int pecaNumero = this.tabuleiro.pegaPecaPelaPosicao(new PosicaoPeca(linha, coluna)); + int pecaNumero = this.tabuleiro.pegaPecaPelaPosicao(linha, coluna); botao.setText(pecaNumero == 0 ? STR_VAZIA : String.valueOf(pecaNumero)); }); } From d98e845cb3311208d19cedf4b45dcf0cc20d0b6f Mon Sep 17 00:00:00 2001 From: Leoo Resende Date: Sun, 2 Jul 2023 18:30:16 -0300 Subject: [PATCH 06/10] Criado model de Peca e mudado o array de botoes para uma lista orientada a objetos. --- .../chat/gpt/infra/values/TabuleiroPecas.java | 20 ++++++----- .../src/main/java/chat/gpt/model/Peca.java | 14 ++++++++ .../main/java/chat/gpt/model/Tabuleiro.java | 20 +++++------ .../main/java/chat/gpt/ui/JogoDosOitoUI.java | 33 ++++++++++++------- 4 files changed, 56 insertions(+), 31 deletions(-) create mode 100644 jogo-oito/src/main/java/chat/gpt/model/Peca.java diff --git a/jogo-oito/src/main/java/chat/gpt/infra/values/TabuleiroPecas.java b/jogo-oito/src/main/java/chat/gpt/infra/values/TabuleiroPecas.java index 2092acf..47088d0 100644 --- a/jogo-oito/src/main/java/chat/gpt/infra/values/TabuleiroPecas.java +++ b/jogo-oito/src/main/java/chat/gpt/infra/values/TabuleiroPecas.java @@ -1,5 +1,7 @@ package chat.gpt.infra.values; +import chat.gpt.model.Peca; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -10,20 +12,20 @@ public enum TabuleiroPecas { LINHA_TRES(7, 8, 0); - private final int coluna1; - private final int coluna2; - private final int coluna3; + private final Peca pecaColuna1; + private final Peca pecaColuna2; + private final Peca pecaColuna3; TabuleiroPecas(int coluna1, int coluna2, int coluna3) { - this.coluna1 = coluna1; - this.coluna2 = coluna2; - this.coluna3 = coluna3; + this.pecaColuna1 = new Peca(coluna1); + this.pecaColuna2 = new Peca(coluna2); + this.pecaColuna3 = new Peca(coluna3); } - public static List> pegaPecasTabuleiro() { + public static List> pegaPecasTabuleiro() { return new ArrayList<>(Arrays.stream(TabuleiroPecas.values()) - .map(tabuleiroPecas -> Arrays.asList(tabuleiroPecas.coluna1, - tabuleiroPecas.coluna2, tabuleiroPecas.coluna3)) + .map(tabuleiroPecas -> Arrays.asList(tabuleiroPecas.pecaColuna1, + tabuleiroPecas.pecaColuna2, tabuleiroPecas.pecaColuna3)) .toList()); } } diff --git a/jogo-oito/src/main/java/chat/gpt/model/Peca.java b/jogo-oito/src/main/java/chat/gpt/model/Peca.java new file mode 100644 index 0000000..9993d28 --- /dev/null +++ b/jogo-oito/src/main/java/chat/gpt/model/Peca.java @@ -0,0 +1,14 @@ +package chat.gpt.model; + +public class Peca { + + private final int valor; + + public Peca(int valor) { + this.valor = valor; + } + + public int getValor() { + return this.valor; + } +} diff --git a/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java b/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java index 48bc649..5fb678f 100644 --- a/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java +++ b/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java @@ -8,7 +8,7 @@ import java.util.*; public class Tabuleiro { - private List> tabuleiro; + private List> tabuleiro; public Tabuleiro() { this.criaTabuleiro(); @@ -24,17 +24,17 @@ public void resetaTabuleiro() { } - public int pegaPecaPelaPosicao(PosicaoPeca posicaoPeca) { + public Peca pegaPecaPelaPosicao(PosicaoPeca posicaoPeca) { return this.tabuleiro.get(posicaoPeca.getLinha()).get(posicaoPeca.getColuna()); } - public int pegaPecaPelaPosicao(int linha, int coluna) { + public Peca pegaPecaPelaPosicao(int linha, int coluna) { return this.pegaPecaPelaPosicao(new PosicaoPeca(linha, coluna)); } - private void mudaPosicaoPeca(PosicaoPeca posicaoAlvo, int novoValor) { + private void mudaPosicaoPeca(PosicaoPeca posicaoAlvo, Peca peca) { this.tabuleiro.get(posicaoAlvo.getLinha()) - .set(posicaoAlvo.getColuna(), novoValor); + .set(posicaoAlvo.getColuna(), peca); } public void executaParaCadaPosicao(TabuleiroLaco tabuleiroLaco) { @@ -48,7 +48,7 @@ public void executaParaCadaPosicao(TabuleiroLaco tabuleiroLaco) { public PosicaoPeca encontraPosicaoPecaPeloNumero(int numeroPeca) { for (int linha = 0; linha < 3; linha++) { for (int coluna = 0; coluna < 3; coluna++) { - if (this.pegaPecaPelaPosicao(new PosicaoPeca(linha, coluna)) == numeroPeca) { + if (this.pegaPecaPelaPosicao(linha, coluna).getValor() == numeroPeca) { return new PosicaoPeca(linha, coluna); } } @@ -59,7 +59,7 @@ public PosicaoPeca encontraPosicaoPecaPeloNumero(int numeroPeca) { public PosicaoPeca pegaPosicaoVazia() { for (int linha = 0; linha < 3; linha++) { for (int coluna = 0; coluna < 3; coluna++) { - if (this.pegaPecaPelaPosicao(linha, coluna) == 0) { + if (this.pegaPecaPelaPosicao(linha, coluna).getValor() == 0) { return new PosicaoPeca(linha, coluna); } } @@ -74,8 +74,8 @@ public boolean movePeca(DirecaoMovimento direcao) { if (Util.posicaoEhInvalida(posicaoNova)) return false; this.mudaPosicaoPeca(posicaoVazia, - this.pegaPecaPelaPosicao(posicaoNova.getLinha(), posicaoNova.getColuna())); - this.mudaPosicaoPeca(posicaoNova, 0); + this.pegaPecaPelaPosicao(posicaoNova)); + this.mudaPosicaoPeca(posicaoNova, new Peca(0)); return true; } @@ -89,7 +89,7 @@ public boolean jogoConcluido() { int count = 1; for (int linha = 0; linha < 3; linha++) { for (int coluna = 0; coluna < 3; coluna++) { - if (this.pegaPecaPelaPosicao(linha, coluna) != count % 9) { + if (this.pegaPecaPelaPosicao(linha, coluna).getValor() != count % 9) { return false; } count++; diff --git a/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java b/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java index dac5443..a651f5f 100644 --- a/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java +++ b/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java @@ -9,37 +9,46 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; public class JogoDosOitoUI { public static final String STR_VAZIA = ""; private final Tabuleiro tabuleiro; - private final JButton[][] botoes = new JButton[3][3]; + private final List> botoes; private final JFrame jFrame; public JogoDosOitoUI(String titulo) { this.jFrame = new JFrame(titulo); this.tabuleiro = new Tabuleiro(); + this.botoes = new ArrayList<>(Arrays.asList( + new ArrayList<>(3), + new ArrayList<>(3), + new ArrayList<>(3) + )); } public void iniciarJogo() { - jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - jFrame.setSize(300, 300); - jFrame.setLayout(new GridLayout(4, 3)); - + this.criaJanela(); this.criaComponentes(); - this.permiteJogarPeloTeclado(); - jFrame.setFocusable(true); this.atualizaTabuleiro(); - jFrame.setVisible(true); + this.jFrame.setVisible(true); + } + + private void criaJanela() { + this.jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + this.jFrame.setSize(300, 300); + this.jFrame.setLayout(new GridLayout(4, 3)); + this.jFrame.setFocusable(true); } private void criaComponentes() { this.tabuleiro.executaParaCadaPosicao((linha, coluna) -> { JButton botaoPeca = this.criaBotaoPeca(); - botoes[linha][coluna] = botaoPeca; + this.botoes.get(linha).add(botaoPeca); this.adicionaComponentesJframe(botaoPeca); botaoPeca.addActionListener(this::moverPecaPeloMouse); }); @@ -96,9 +105,9 @@ private void verificaJogoConcluido() { private void atualizaTabuleiro() { this.tabuleiro.executaParaCadaPosicao((linha, coluna) -> { - JButton botao = this.botoes[linha][coluna]; - int pecaNumero = this.tabuleiro.pegaPecaPelaPosicao(linha, coluna); - botao.setText(pecaNumero == 0 ? STR_VAZIA : String.valueOf(pecaNumero)); + JButton botao = this.botoes.get(linha).get(coluna); + int pecaValor = this.tabuleiro.pegaPecaPelaPosicao(linha, coluna).getValor(); + botao.setText(pecaValor == 0 ? STR_VAZIA : String.valueOf(pecaValor)); }); } From 9bdc5213c24e4b9352035fcef9f2882f733d937e Mon Sep 17 00:00:00 2001 From: Leoo Resende Date: Sun, 2 Jul 2023 18:56:40 -0300 Subject: [PATCH 07/10] Corrigido nomeclatura dos movimentos. --- .../gpt/infra/values/DirecaoMovimento.java | 36 ++++++++++--------- .../main/java/chat/gpt/model/Tabuleiro.java | 4 +-- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java index f25a498..2b83364 100644 --- a/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java +++ b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java @@ -9,32 +9,36 @@ public enum DirecaoMovimento { BAIXO(-1, 0), ESQUERDA(0, 1), DIREITA(0, -1), - SEM_MOVIMENTO(-1, -1); + SEM_MOVIMENTO(0, 0); - private final int linha; - private final int coluna; - DirecaoMovimento(int linha, int coluna) { - this.linha = linha; - this.coluna = coluna; + private final int deslocamentoHorizontal; + private final int deslocamentoVertical; + + DirecaoMovimento(int deslocamentoHorizontal, int deslocamentoVertical) { + this.deslocamentoHorizontal = deslocamentoHorizontal; + this.deslocamentoVertical = deslocamentoVertical; } - public int getLinha() { - return linha; + public int getDeslocamentoHorizontal() { + return deslocamentoHorizontal; } - public int getColuna() { - return coluna; + public int getDeslocamentoVertical() { + return deslocamentoVertical; } - public static DirecaoMovimento pegaPelaPosicaoBotaoTocado(PosicaoPeca pVazia, PosicaoPeca pPecaClicada) { - int linha = pPecaClicada.pegarDiferencaLinhaPara(pVazia); - int coluna = pPecaClicada.pegarDiferencaColunaPara(pVazia); - return Arrays.stream(values()).filter(movimentoMouseValue -> movimentoMouseValue.linha == linha && - movimentoMouseValue.coluna == coluna).findFirst().orElse(DirecaoMovimento.SEM_MOVIMENTO); + public static DirecaoMovimento pegaPelaPosicaoPecaTocada(PosicaoPeca pVazia, PosicaoPeca pPecaClicada) { + int linha = pPecaClicada.pegaDistanciaLinhasPara(pVazia); + int coluna = pPecaClicada.pegaDistanciaColunasPara(pVazia); + return Arrays.stream(values()) + .filter(movimentoMouseValue -> movimentoMouseValue.deslocamentoHorizontal == linha && + movimentoMouseValue.deslocamentoVertical == coluna) + .findFirst().orElse(DirecaoMovimento.SEM_MOVIMENTO); } public static DirecaoMovimento pegaPeloTeclado(int teclaCode) { - return Arrays.stream(DirecaoMovimentoTeclado.values()).filter(movimentoTeclado -> movimentoTeclado.getTeclaCode() == teclaCode) + return Arrays.stream(DirecaoMovimentoTeclado.values()) + .filter(movimentoTeclado -> movimentoTeclado.getTeclaCode() == teclaCode) .map(DirecaoMovimentoTeclado::getMovimento) .findFirst().orElse(DirecaoMovimento.SEM_MOVIMENTO); } diff --git a/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java b/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java index 5fb678f..f1b4923 100644 --- a/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java +++ b/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java @@ -80,8 +80,8 @@ public boolean movePeca(DirecaoMovimento direcao) { } private PosicaoPeca pegaNovaPosicao(PosicaoPeca pVazia, DirecaoMovimento direcao) { - int novaLinha = pVazia.getLinha() + direcao.getLinha(); - int novaColuna = pVazia.getColuna() + direcao.getColuna(); + int novaLinha = pVazia.getLinha() + direcao.getDeslocamentoHorizontal(); + int novaColuna = pVazia.getColuna() + direcao.getDeslocamentoVertical(); return new PosicaoPeca(novaLinha, novaColuna); } From 59053722fe49e0e1939ca90a77b62369f35a0681 Mon Sep 17 00:00:00 2001 From: Leoo Resende Date: Sun, 2 Jul 2023 18:57:37 -0300 Subject: [PATCH 08/10] Corrigindo nomenclatura e testes. --- .../src/main/java/chat/gpt/infra/util/Util.java | 4 +++- .../src/main/java/chat/gpt/model/PosicaoPeca.java | 4 ++-- .../src/main/java/chat/gpt/model/Tabuleiro.java | 6 +++--- .../src/main/java/chat/gpt/ui/JogoDosOitoUI.java | 13 +++++++------ jogo-oito/src/test/java/TabuleiroTest.java | 7 +++++-- 5 files changed, 20 insertions(+), 14 deletions(-) diff --git a/jogo-oito/src/main/java/chat/gpt/infra/util/Util.java b/jogo-oito/src/main/java/chat/gpt/infra/util/Util.java index 99280cd..b96a79b 100644 --- a/jogo-oito/src/main/java/chat/gpt/infra/util/Util.java +++ b/jogo-oito/src/main/java/chat/gpt/infra/util/Util.java @@ -6,7 +6,9 @@ public class Util { public static boolean movimentoEhInvalido(DirecaoMovimento pMovimento) { - return pMovimento.getColuna() == -1 && pMovimento.getLinha() == -1; + DirecaoMovimento semMovimento = DirecaoMovimento.SEM_MOVIMENTO; + return pMovimento.getDeslocamentoVertical() == semMovimento.getDeslocamentoVertical() + && pMovimento.getDeslocamentoHorizontal() == semMovimento.getDeslocamentoHorizontal(); } public static boolean posicaoEhInvalida(PosicaoPeca pMovimento) { diff --git a/jogo-oito/src/main/java/chat/gpt/model/PosicaoPeca.java b/jogo-oito/src/main/java/chat/gpt/model/PosicaoPeca.java index a3d811f..1bdb3ed 100644 --- a/jogo-oito/src/main/java/chat/gpt/model/PosicaoPeca.java +++ b/jogo-oito/src/main/java/chat/gpt/model/PosicaoPeca.java @@ -17,11 +17,11 @@ public int getColuna() { return this.coluna; } - public int pegarDiferencaLinhaPara(PosicaoPeca posicao) { + public int pegaDistanciaLinhasPara(PosicaoPeca posicao) { return this.linha - posicao.linha; } - public int pegarDiferencaColunaPara(PosicaoPeca posicao) { + public int pegaDistanciaColunasPara(PosicaoPeca posicao) { return this.coluna - posicao.coluna; } } diff --git a/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java b/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java index f1b4923..52c8fd2 100644 --- a/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java +++ b/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java @@ -37,7 +37,7 @@ private void mudaPosicaoPeca(PosicaoPeca posicaoAlvo, Peca peca) { .set(posicaoAlvo.getColuna(), peca); } - public void executaParaCadaPosicao(TabuleiroLaco tabuleiroLaco) { + public void executaParaCadaPosicaoTabuleiro(TabuleiroLaco tabuleiroLaco) { for (int linha = 0; linha < 3; linha++) { for (int coluna = 0; coluna < 3; coluna++) { tabuleiroLaco.executar(linha, coluna); @@ -45,10 +45,10 @@ public void executaParaCadaPosicao(TabuleiroLaco tabuleiroLaco) { } } - public PosicaoPeca encontraPosicaoPecaPeloNumero(int numeroPeca) { + public PosicaoPeca encontraPosicaoPeca(Peca peca) { for (int linha = 0; linha < 3; linha++) { for (int coluna = 0; coluna < 3; coluna++) { - if (this.pegaPecaPelaPosicao(linha, coluna).getValor() == numeroPeca) { + if (this.pegaPecaPelaPosicao(linha, coluna).getValor() == peca.getValor()) { return new PosicaoPeca(linha, coluna); } } diff --git a/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java b/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java index a651f5f..91cab88 100644 --- a/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java +++ b/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java @@ -2,6 +2,7 @@ import chat.gpt.infra.util.Util; import chat.gpt.infra.values.DirecaoMovimento; +import chat.gpt.model.Peca; import chat.gpt.model.PosicaoPeca; import chat.gpt.model.Tabuleiro; @@ -46,7 +47,7 @@ private void criaJanela() { } private void criaComponentes() { - this.tabuleiro.executaParaCadaPosicao((linha, coluna) -> { + this.tabuleiro.executaParaCadaPosicaoTabuleiro((linha, coluna) -> { JButton botaoPeca = this.criaBotaoPeca(); this.botoes.get(linha).add(botaoPeca); this.adicionaComponentesJframe(botaoPeca); @@ -60,7 +61,7 @@ private void criaComponentes() { private void moverPecaPeloMouse(ActionEvent e) { String numeroPeca = ((JButton) e.getSource()).getText(); if (numeroPeca.isEmpty()) return; - DirecaoMovimento direcaoMovimento = this.pegaDirecaoMovimentoMouse(numeroPeca); + DirecaoMovimento direcaoMovimento = this.pegaDirecaoMovimentoMouse(Integer.parseInt(numeroPeca)); this.movimentaPecaEAtualiza(direcaoMovimento); } @@ -70,10 +71,10 @@ private void movimentaPecaPeloTeclado(KeyEvent e) { } - private DirecaoMovimento pegaDirecaoMovimentoMouse(String numeroPeca) { - PosicaoPeca pPecaTocada = this.tabuleiro.encontraPosicaoPecaPeloNumero(Integer.parseInt(numeroPeca)); + private DirecaoMovimento pegaDirecaoMovimentoMouse(int numeroPeca) { + PosicaoPeca pPecaTocada = this.tabuleiro.encontraPosicaoPeca(new Peca(numeroPeca)); PosicaoPeca pVazia = this.tabuleiro.pegaPosicaoVazia(); - return DirecaoMovimento.pegaPelaPosicaoBotaoTocado(pVazia, pPecaTocada); + return DirecaoMovimento.pegaPelaPosicaoPecaTocada(pVazia, pPecaTocada); } private void permiteJogarPeloTeclado() { @@ -104,7 +105,7 @@ private void verificaJogoConcluido() { } private void atualizaTabuleiro() { - this.tabuleiro.executaParaCadaPosicao((linha, coluna) -> { + this.tabuleiro.executaParaCadaPosicaoTabuleiro((linha, coluna) -> { JButton botao = this.botoes.get(linha).get(coluna); int pecaValor = this.tabuleiro.pegaPecaPelaPosicao(linha, coluna).getValor(); botao.setText(pecaValor == 0 ? STR_VAZIA : String.valueOf(pecaValor)); diff --git a/jogo-oito/src/test/java/TabuleiroTest.java b/jogo-oito/src/test/java/TabuleiroTest.java index 201a3ed..58d555b 100644 --- a/jogo-oito/src/test/java/TabuleiroTest.java +++ b/jogo-oito/src/test/java/TabuleiroTest.java @@ -1,5 +1,6 @@ import chat.gpt.infra.util.Util; import chat.gpt.infra.values.DirecaoMovimento; +import chat.gpt.model.Peca; import chat.gpt.model.PosicaoPeca; import chat.gpt.model.Tabuleiro; import org.junit.jupiter.api.Assertions; @@ -26,7 +27,8 @@ void deveriaPegarPosicaoVazia() { void deveriaPegarPosicaoPecasExistentes() { for (int i = 1; i < 9; i++) { int numeroPeca = i; - Assertions.assertDoesNotThrow(() -> this.tabuleiro.encontraPosicaoPecaPeloNumero(numeroPeca)); + Assertions.assertDoesNotThrow(() -> this.tabuleiro + .encontraPosicaoPeca(new Peca(numeroPeca))); } } @@ -34,7 +36,8 @@ void deveriaPegarPosicaoPecasExistentes() { void naoDeveriaPegarPosicaoDePecasInexistentes() { for (int i = 9; i < 99; i++) { int numeroPeca = i; - Assertions.assertThrows(RuntimeException.class, () -> this.tabuleiro.encontraPosicaoPecaPeloNumero(numeroPeca)); + Assertions.assertThrows(RuntimeException.class, () -> this.tabuleiro + .encontraPosicaoPeca(new Peca(numeroPeca))); } } From 5542736355411e72be7577e819a74c47159e24f4 Mon Sep 17 00:00:00 2001 From: Leoo Resende Date: Sun, 2 Jul 2023 19:22:16 -0300 Subject: [PATCH 09/10] Mais correcoes de nomenclatura. --- .../chat/gpt/infra/values/DirecaoMovimento.java | 2 +- .../src/main/java/chat/gpt/ui/JogoDosOitoUI.java | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java index 2b83364..e91c900 100644 --- a/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java +++ b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java @@ -27,7 +27,7 @@ public int getDeslocamentoVertical() { return deslocamentoVertical; } - public static DirecaoMovimento pegaPelaPosicaoPecaTocada(PosicaoPeca pVazia, PosicaoPeca pPecaClicada) { + public static DirecaoMovimento pegaPelaPosicaoPecaClicada(PosicaoPeca pVazia, PosicaoPeca pPecaClicada) { int linha = pPecaClicada.pegaDistanciaLinhasPara(pVazia); int coluna = pPecaClicada.pegaDistanciaColunasPara(pVazia); return Arrays.stream(values()) diff --git a/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java b/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java index 91cab88..7e21117 100644 --- a/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java +++ b/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java @@ -50,18 +50,18 @@ private void criaComponentes() { this.tabuleiro.executaParaCadaPosicaoTabuleiro((linha, coluna) -> { JButton botaoPeca = this.criaBotaoPeca(); this.botoes.get(linha).add(botaoPeca); - this.adicionaComponentesJframe(botaoPeca); + this.adicionaNoJframe(botaoPeca); botaoPeca.addActionListener(this::moverPecaPeloMouse); }); JButton botaoReiniciar = new JButton("Reiniciar"); botaoReiniciar.addActionListener(e -> this.reiniciaJogo()); - this.adicionaComponentesJframe(new JLabel(STR_VAZIA), botaoReiniciar, new JLabel(STR_VAZIA)); + this.adicionaNoJframe(new JLabel(STR_VAZIA), botaoReiniciar, new JLabel(STR_VAZIA)); } private void moverPecaPeloMouse(ActionEvent e) { - String numeroPeca = ((JButton) e.getSource()).getText(); - if (numeroPeca.isEmpty()) return; - DirecaoMovimento direcaoMovimento = this.pegaDirecaoMovimentoMouse(Integer.parseInt(numeroPeca)); + String valorPeca = ((JButton) e.getSource()).getText(); + if (valorPeca.isEmpty()) return; + DirecaoMovimento direcaoMovimento = this.pegaDirecaoMovimentoMouse(Integer.parseInt(valorPeca)); this.movimentaPecaEAtualiza(direcaoMovimento); } @@ -74,7 +74,7 @@ private void movimentaPecaPeloTeclado(KeyEvent e) { private DirecaoMovimento pegaDirecaoMovimentoMouse(int numeroPeca) { PosicaoPeca pPecaTocada = this.tabuleiro.encontraPosicaoPeca(new Peca(numeroPeca)); PosicaoPeca pVazia = this.tabuleiro.pegaPosicaoVazia(); - return DirecaoMovimento.pegaPelaPosicaoPecaTocada(pVazia, pPecaTocada); + return DirecaoMovimento.pegaPelaPosicaoPecaClicada(pVazia, pPecaTocada); } private void permiteJogarPeloTeclado() { @@ -118,7 +118,7 @@ private JButton criaBotaoPeca() { return botao; } - private void adicionaComponentesJframe(Component... components) { + private void adicionaNoJframe(Component... components) { Arrays.stream(components).forEach(this.jFrame::add); } } From 7436697c4b6dbf753238674baa5a47fe750cea61 Mon Sep 17 00:00:00 2001 From: Leoo Resende Date: Sun, 2 Jul 2023 20:06:05 -0300 Subject: [PATCH 10/10] =?UTF-8?q?Algumas=20corre=C3=A7=C3=B5es.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gpt/infra/contratos/TabuleiroLaco.java | 2 +- .../main/java/chat/gpt/infra/util/Util.java | 4 +-- .../gpt/infra/values/DirecaoMovimento.java | 22 ++++++------- .../infra/values/DirecaoMovimentoTeclado.java | 6 ++-- .../chat/gpt/infra/values/TabuleiroPecas.java | 2 +- .../src/main/java/chat/gpt/model/Peca.java | 6 ++-- .../main/java/chat/gpt/model/PosicaoPeca.java | 14 ++++---- .../main/java/chat/gpt/model/Tabuleiro.java | 32 +++++++++---------- .../main/java/chat/gpt/ui/JogoDosOitoUI.java | 6 ++-- jogo-oito/src/test/java/TabuleiroTest.java | 10 +++--- 10 files changed, 52 insertions(+), 52 deletions(-) diff --git a/jogo-oito/src/main/java/chat/gpt/infra/contratos/TabuleiroLaco.java b/jogo-oito/src/main/java/chat/gpt/infra/contratos/TabuleiroLaco.java index f47b00f..9189bfc 100644 --- a/jogo-oito/src/main/java/chat/gpt/infra/contratos/TabuleiroLaco.java +++ b/jogo-oito/src/main/java/chat/gpt/infra/contratos/TabuleiroLaco.java @@ -2,5 +2,5 @@ public interface TabuleiroLaco { - void executar(int linha, int coluna); + void executar(Integer linha, Integer coluna); } diff --git a/jogo-oito/src/main/java/chat/gpt/infra/util/Util.java b/jogo-oito/src/main/java/chat/gpt/infra/util/Util.java index b96a79b..2ccccd8 100644 --- a/jogo-oito/src/main/java/chat/gpt/infra/util/Util.java +++ b/jogo-oito/src/main/java/chat/gpt/infra/util/Util.java @@ -5,13 +5,13 @@ public class Util { - public static boolean movimentoEhInvalido(DirecaoMovimento pMovimento) { + public static Boolean movimentoEhInvalido(DirecaoMovimento pMovimento) { DirecaoMovimento semMovimento = DirecaoMovimento.SEM_MOVIMENTO; return pMovimento.getDeslocamentoVertical() == semMovimento.getDeslocamentoVertical() && pMovimento.getDeslocamentoHorizontal() == semMovimento.getDeslocamentoHorizontal(); } - public static boolean posicaoEhInvalida(PosicaoPeca pMovimento) { + public static Boolean posicaoEhInvalida(PosicaoPeca pMovimento) { return pMovimento.getLinha() < 0 || pMovimento.getLinha() > 2 || pMovimento.getColuna() < 0 || pMovimento.getColuna() > 2; } diff --git a/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java index e91c900..a5eaa7a 100644 --- a/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java +++ b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimento.java @@ -11,34 +11,34 @@ public enum DirecaoMovimento { DIREITA(0, -1), SEM_MOVIMENTO(0, 0); - private final int deslocamentoHorizontal; - private final int deslocamentoVertical; + private final Integer deslocamentoHorizontal; + private final Integer deslocamentoVertical; - DirecaoMovimento(int deslocamentoHorizontal, int deslocamentoVertical) { + DirecaoMovimento(Integer deslocamentoHorizontal, Integer deslocamentoVertical) { this.deslocamentoHorizontal = deslocamentoHorizontal; this.deslocamentoVertical = deslocamentoVertical; } - public int getDeslocamentoHorizontal() { + public Integer getDeslocamentoHorizontal() { return deslocamentoHorizontal; } - public int getDeslocamentoVertical() { + public Integer getDeslocamentoVertical() { return deslocamentoVertical; } public static DirecaoMovimento pegaPelaPosicaoPecaClicada(PosicaoPeca pVazia, PosicaoPeca pPecaClicada) { - int linha = pPecaClicada.pegaDistanciaLinhasPara(pVazia); - int coluna = pPecaClicada.pegaDistanciaColunasPara(pVazia); + Integer linha = pPecaClicada.pegaDistanciaLinhasPara(pVazia); + Integer coluna = pPecaClicada.pegaDistanciaColunasPara(pVazia); return Arrays.stream(values()) - .filter(movimentoMouseValue -> movimentoMouseValue.deslocamentoHorizontal == linha && - movimentoMouseValue.deslocamentoVertical == coluna) + .filter(movimentoMouseValue -> movimentoMouseValue.deslocamentoHorizontal.equals(linha) && + movimentoMouseValue.deslocamentoVertical.equals(coluna)) .findFirst().orElse(DirecaoMovimento.SEM_MOVIMENTO); } - public static DirecaoMovimento pegaPeloTeclado(int teclaCode) { + public static DirecaoMovimento pegaPeloTeclado(Integer teclaCode) { return Arrays.stream(DirecaoMovimentoTeclado.values()) - .filter(movimentoTeclado -> movimentoTeclado.getTeclaCode() == teclaCode) + .filter(movimentoTeclado -> movimentoTeclado.getTeclaCode().equals(teclaCode)) .map(DirecaoMovimentoTeclado::getMovimento) .findFirst().orElse(DirecaoMovimento.SEM_MOVIMENTO); } diff --git a/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimentoTeclado.java b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimentoTeclado.java index f71ceab..c272cc0 100644 --- a/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimentoTeclado.java +++ b/jogo-oito/src/main/java/chat/gpt/infra/values/DirecaoMovimentoTeclado.java @@ -10,9 +10,9 @@ public enum DirecaoMovimentoTeclado { private final DirecaoMovimento movimento; - private final int teclaCode; + private final Integer teclaCode; - DirecaoMovimentoTeclado(int teclaCode, DirecaoMovimento movimento) { + DirecaoMovimentoTeclado(Integer teclaCode, DirecaoMovimento movimento) { this.teclaCode = teclaCode; this.movimento = movimento; } @@ -21,7 +21,7 @@ public DirecaoMovimento getMovimento() { return movimento; } - public int getTeclaCode() { + public Integer getTeclaCode() { return teclaCode; } } diff --git a/jogo-oito/src/main/java/chat/gpt/infra/values/TabuleiroPecas.java b/jogo-oito/src/main/java/chat/gpt/infra/values/TabuleiroPecas.java index 47088d0..98cc92c 100644 --- a/jogo-oito/src/main/java/chat/gpt/infra/values/TabuleiroPecas.java +++ b/jogo-oito/src/main/java/chat/gpt/infra/values/TabuleiroPecas.java @@ -16,7 +16,7 @@ public enum TabuleiroPecas { private final Peca pecaColuna2; private final Peca pecaColuna3; - TabuleiroPecas(int coluna1, int coluna2, int coluna3) { + TabuleiroPecas(Integer coluna1, Integer coluna2, Integer coluna3) { this.pecaColuna1 = new Peca(coluna1); this.pecaColuna2 = new Peca(coluna2); this.pecaColuna3 = new Peca(coluna3); diff --git a/jogo-oito/src/main/java/chat/gpt/model/Peca.java b/jogo-oito/src/main/java/chat/gpt/model/Peca.java index 9993d28..bf7c0aa 100644 --- a/jogo-oito/src/main/java/chat/gpt/model/Peca.java +++ b/jogo-oito/src/main/java/chat/gpt/model/Peca.java @@ -2,13 +2,13 @@ public class Peca { - private final int valor; + private final Integer valor; - public Peca(int valor) { + public Peca(Integer valor) { this.valor = valor; } - public int getValor() { + public Integer getValor() { return this.valor; } } diff --git a/jogo-oito/src/main/java/chat/gpt/model/PosicaoPeca.java b/jogo-oito/src/main/java/chat/gpt/model/PosicaoPeca.java index 1bdb3ed..0e3a9b2 100644 --- a/jogo-oito/src/main/java/chat/gpt/model/PosicaoPeca.java +++ b/jogo-oito/src/main/java/chat/gpt/model/PosicaoPeca.java @@ -1,27 +1,27 @@ package chat.gpt.model; public class PosicaoPeca { - private final int linha; - private final int coluna; + private final Integer linha; + private final Integer coluna; - public PosicaoPeca(int linha, int coluna) { + public PosicaoPeca(Integer linha, Integer coluna) { this.linha = linha; this.coluna = coluna; } - public int getLinha() { + public Integer getLinha() { return this.linha; } - public int getColuna() { + public Integer getColuna() { return this.coluna; } - public int pegaDistanciaLinhasPara(PosicaoPeca posicao) { + public Integer pegaDistanciaLinhasPara(PosicaoPeca posicao) { return this.linha - posicao.linha; } - public int pegaDistanciaColunasPara(PosicaoPeca posicao) { + public Integer pegaDistanciaColunasPara(PosicaoPeca posicao) { return this.coluna - posicao.coluna; } } diff --git a/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java b/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java index 52c8fd2..0ce576b 100644 --- a/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java +++ b/jogo-oito/src/main/java/chat/gpt/model/Tabuleiro.java @@ -28,7 +28,7 @@ public Peca pegaPecaPelaPosicao(PosicaoPeca posicaoPeca) { return this.tabuleiro.get(posicaoPeca.getLinha()).get(posicaoPeca.getColuna()); } - public Peca pegaPecaPelaPosicao(int linha, int coluna) { + public Peca pegaPecaPelaPosicao(Integer linha, Integer coluna) { return this.pegaPecaPelaPosicao(new PosicaoPeca(linha, coluna)); } @@ -38,17 +38,17 @@ private void mudaPosicaoPeca(PosicaoPeca posicaoAlvo, Peca peca) { } public void executaParaCadaPosicaoTabuleiro(TabuleiroLaco tabuleiroLaco) { - for (int linha = 0; linha < 3; linha++) { - for (int coluna = 0; coluna < 3; coluna++) { + for (Integer linha = 0; linha < 3; linha++) { + for (Integer coluna = 0; coluna < 3; coluna++) { tabuleiroLaco.executar(linha, coluna); } } } public PosicaoPeca encontraPosicaoPeca(Peca peca) { - for (int linha = 0; linha < 3; linha++) { - for (int coluna = 0; coluna < 3; coluna++) { - if (this.pegaPecaPelaPosicao(linha, coluna).getValor() == peca.getValor()) { + for (Integer linha = 0; linha < 3; linha++) { + for (Integer coluna = 0; coluna < 3; coluna++) { + if (this.pegaPecaPelaPosicao(linha, coluna).getValor().equals(peca.getValor())) { return new PosicaoPeca(linha, coluna); } } @@ -57,8 +57,8 @@ public PosicaoPeca encontraPosicaoPeca(Peca peca) { } public PosicaoPeca pegaPosicaoVazia() { - for (int linha = 0; linha < 3; linha++) { - for (int coluna = 0; coluna < 3; coluna++) { + for (Integer linha = 0; linha < 3; linha++) { + for (Integer coluna = 0; coluna < 3; coluna++) { if (this.pegaPecaPelaPosicao(linha, coluna).getValor() == 0) { return new PosicaoPeca(linha, coluna); } @@ -67,7 +67,7 @@ public PosicaoPeca pegaPosicaoVazia() { throw new RuntimeException("Ocorreu um erro no jogo"); } - public boolean movePeca(DirecaoMovimento direcao) { + public Boolean movePeca(DirecaoMovimento direcao) { PosicaoPeca posicaoVazia = this.pegaPosicaoVazia(); PosicaoPeca posicaoNova = this.pegaNovaPosicao(posicaoVazia, direcao); @@ -80,16 +80,16 @@ public boolean movePeca(DirecaoMovimento direcao) { } private PosicaoPeca pegaNovaPosicao(PosicaoPeca pVazia, DirecaoMovimento direcao) { - int novaLinha = pVazia.getLinha() + direcao.getDeslocamentoHorizontal(); - int novaColuna = pVazia.getColuna() + direcao.getDeslocamentoVertical(); + Integer novaLinha = pVazia.getLinha() + direcao.getDeslocamentoHorizontal(); + Integer novaColuna = pVazia.getColuna() + direcao.getDeslocamentoVertical(); return new PosicaoPeca(novaLinha, novaColuna); } - public boolean jogoConcluido() { - int count = 1; - for (int linha = 0; linha < 3; linha++) { - for (int coluna = 0; coluna < 3; coluna++) { - if (this.pegaPecaPelaPosicao(linha, coluna).getValor() != count % 9) { + public Boolean jogoConcluido() { + Integer count = 1; + for (Integer linha = 0; linha < 3; linha++) { + for (Integer coluna = 0; coluna < 3; coluna++) { + if (!this.pegaPecaPelaPosicao(linha, coluna).getValor().equals(count % 9)) { return false; } count++; diff --git a/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java b/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java index 7e21117..dcf952e 100644 --- a/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java +++ b/jogo-oito/src/main/java/chat/gpt/ui/JogoDosOitoUI.java @@ -71,7 +71,7 @@ private void movimentaPecaPeloTeclado(KeyEvent e) { } - private DirecaoMovimento pegaDirecaoMovimentoMouse(int numeroPeca) { + private DirecaoMovimento pegaDirecaoMovimentoMouse(Integer numeroPeca) { PosicaoPeca pPecaTocada = this.tabuleiro.encontraPosicaoPeca(new Peca(numeroPeca)); PosicaoPeca pVazia = this.tabuleiro.pegaPosicaoVazia(); return DirecaoMovimento.pegaPelaPosicaoPecaClicada(pVazia, pPecaTocada); @@ -91,7 +91,7 @@ private void reiniciaJogo() { private void movimentaPecaEAtualiza(DirecaoMovimento movimento) { if (Util.movimentoEhInvalido(movimento)) return; - boolean moveu = this.tabuleiro.movePeca(movimento); + Boolean moveu = this.tabuleiro.movePeca(movimento); if (moveu) { this.atualizaTabuleiro(); this.verificaJogoConcluido(); @@ -107,7 +107,7 @@ private void verificaJogoConcluido() { private void atualizaTabuleiro() { this.tabuleiro.executaParaCadaPosicaoTabuleiro((linha, coluna) -> { JButton botao = this.botoes.get(linha).get(coluna); - int pecaValor = this.tabuleiro.pegaPecaPelaPosicao(linha, coluna).getValor(); + Integer pecaValor = this.tabuleiro.pegaPecaPelaPosicao(linha, coluna).getValor(); botao.setText(pecaValor == 0 ? STR_VAZIA : String.valueOf(pecaValor)); }); } diff --git a/jogo-oito/src/test/java/TabuleiroTest.java b/jogo-oito/src/test/java/TabuleiroTest.java index 58d555b..0c55620 100644 --- a/jogo-oito/src/test/java/TabuleiroTest.java +++ b/jogo-oito/src/test/java/TabuleiroTest.java @@ -25,8 +25,8 @@ void deveriaPegarPosicaoVazia() { @Test void deveriaPegarPosicaoPecasExistentes() { - for (int i = 1; i < 9; i++) { - int numeroPeca = i; + for (Integer i = 1; i < 9; i++) { + Integer numeroPeca = i; Assertions.assertDoesNotThrow(() -> this.tabuleiro .encontraPosicaoPeca(new Peca(numeroPeca))); } @@ -34,8 +34,8 @@ void deveriaPegarPosicaoPecasExistentes() { @Test void naoDeveriaPegarPosicaoDePecasInexistentes() { - for (int i = 9; i < 99; i++) { - int numeroPeca = i; + for (Integer i = 9; i < 99; i++) { + Integer numeroPeca = i; Assertions.assertThrows(RuntimeException.class, () -> this.tabuleiro .encontraPosicaoPeca(new Peca(numeroPeca))); } @@ -43,7 +43,7 @@ void naoDeveriaPegarPosicaoDePecasInexistentes() { @Test void naoDeveriaAceitarMovimentosInvalidos() { - boolean movimentoMouseInvalido = Util.movimentoEhInvalido(DirecaoMovimento.SEM_MOVIMENTO); + Boolean movimentoMouseInvalido = Util.movimentoEhInvalido(DirecaoMovimento.SEM_MOVIMENTO); Assertions.assertTrue(movimentoMouseInvalido); }