From 0c497764f9c80a8bdefc3606ca248a8b36675bab Mon Sep 17 00:00:00 2001 From: J0sueTM Date: Sat, 17 Jun 2023 20:10:17 -0300 Subject: [PATCH 1/5] reset: removed swing application in favor of new implementation --- jogo-oito/.classpath | 27 --- jogo-oito/.gitignore | 1 - jogo-oito/.project | 23 --- .../org.eclipse.core.resources.prefs | 2 - .../.settings/org.eclipse.jdt.core.prefs | 8 - .../.settings/org.eclipse.m2e.core.prefs | 4 - jogo-oito/pom.xml | 23 --- .../src/main/java/chat/gpt/JogoDosOito.java | 158 ------------------ 8 files changed, 246 deletions(-) delete mode 100644 jogo-oito/.classpath delete mode 100644 jogo-oito/.gitignore delete mode 100644 jogo-oito/.project delete mode 100644 jogo-oito/.settings/org.eclipse.core.resources.prefs delete mode 100644 jogo-oito/.settings/org.eclipse.jdt.core.prefs delete mode 100644 jogo-oito/.settings/org.eclipse.m2e.core.prefs delete mode 100644 jogo-oito/pom.xml delete mode 100644 jogo-oito/src/main/java/chat/gpt/JogoDosOito.java diff --git a/jogo-oito/.classpath b/jogo-oito/.classpath deleted file mode 100644 index 1d97b2f..0000000 --- a/jogo-oito/.classpath +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jogo-oito/.gitignore b/jogo-oito/.gitignore deleted file mode 100644 index b83d222..0000000 --- a/jogo-oito/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target/ diff --git a/jogo-oito/.project b/jogo-oito/.project deleted file mode 100644 index 71ae64e..0000000 --- a/jogo-oito/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - jogo-do-oito-do-estagiario-gpt - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - - diff --git a/jogo-oito/.settings/org.eclipse.core.resources.prefs b/jogo-oito/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/jogo-oito/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/jogo-oito/.settings/org.eclipse.jdt.core.prefs b/jogo-oito/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index bc0c2ff..0000000 --- a/jogo-oito/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,8 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=18 -org.eclipse.jdt.core.compiler.compliance=18 -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=18 diff --git a/jogo-oito/.settings/org.eclipse.m2e.core.prefs b/jogo-oito/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/jogo-oito/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/jogo-oito/pom.xml b/jogo-oito/pom.xml deleted file mode 100644 index ebc4845..0000000 --- a/jogo-oito/pom.xml +++ /dev/null @@ -1,23 +0,0 @@ - - 4.0.0 - com.bempaggo.jogo - jogo-do-oito-do-estagiario-gpt - 0.0.1-SNAPSHOT - - UTF-8 - - - rest-unity-test - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.0 - - 18 - 18 - - - - - \ No newline at end of file diff --git a/jogo-oito/src/main/java/chat/gpt/JogoDosOito.java b/jogo-oito/src/main/java/chat/gpt/JogoDosOito.java deleted file mode 100644 index e51dd08..0000000 --- a/jogo-oito/src/main/java/chat/gpt/JogoDosOito.java +++ /dev/null @@ -1,158 +0,0 @@ -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 javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JOptionPane; - -public class JogoDosOito extends JFrame implements KeyListener { - - 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(); - } -} From 9620977da91596ff37a1b08db7774df91f7dcefd Mon Sep 17 00:00:00 2001 From: J0sueTM Date: Sat, 17 Jun 2023 20:14:43 -0300 Subject: [PATCH 2/5] feat: modularized classes --- .gitignore | 1 + eight_game/.classpath | 40 ++++++ eight_game/.project | 23 ++++ .../org.eclipse.core.resources.prefs | 3 + .../.settings/org.eclipse.jdt.core.prefs | 8 ++ .../.settings/org.eclipse.m2e.core.prefs | 4 + eight_game/nbactions.xml | 30 +++++ eight_game/pom.xml | 53 ++++++++ .../main/java/com/j0suetm/eight_game/App.java | 22 +++ .../com/j0suetm/eight_game/SystemInfo.java | 13 ++ .../java/com/j0suetm/eight_game/Window.java | 45 +++++++ .../j0suetm/eight_game/components/Board.java | 127 ++++++++++++++++++ .../eight_game/components/RestartButton.java | 28 ++++ .../j0suetm/eight_game/components/Tile.java | 41 ++++++ eight_game/src/main/java/module-info.java | 4 + eight_game/target/classes/.gitignore | 1 + .../classes/com/j0suetm/eight_game/App.class | Bin 0 -> 773 bytes .../com/j0suetm/eight_game/SystemInfo.class | Bin 0 -> 583 bytes .../com/j0suetm/eight_game/Window.class | Bin 0 -> 1899 bytes .../eight_game/components/Board$1.class | Bin 0 -> 1248 bytes .../j0suetm/eight_game/components/Board.class | Bin 0 -> 4913 bytes .../components/RestartButton$1.class | Bin 0 -> 1270 bytes .../eight_game/components/RestartButton.class | Bin 0 -> 1173 bytes .../j0suetm/eight_game/components/Tile.class | Bin 0 -> 1374 bytes 24 files changed, 443 insertions(+) create mode 100644 .gitignore create mode 100644 eight_game/.classpath create mode 100644 eight_game/.project create mode 100644 eight_game/.settings/org.eclipse.core.resources.prefs create mode 100644 eight_game/.settings/org.eclipse.jdt.core.prefs create mode 100644 eight_game/.settings/org.eclipse.m2e.core.prefs create mode 100644 eight_game/nbactions.xml create mode 100644 eight_game/pom.xml create mode 100644 eight_game/src/main/java/com/j0suetm/eight_game/App.java create mode 100644 eight_game/src/main/java/com/j0suetm/eight_game/SystemInfo.java create mode 100644 eight_game/src/main/java/com/j0suetm/eight_game/Window.java create mode 100644 eight_game/src/main/java/com/j0suetm/eight_game/components/Board.java create mode 100644 eight_game/src/main/java/com/j0suetm/eight_game/components/RestartButton.java create mode 100644 eight_game/src/main/java/com/j0suetm/eight_game/components/Tile.java create mode 100644 eight_game/src/main/java/module-info.java create mode 100644 eight_game/target/classes/.gitignore create mode 100644 eight_game/target/classes/com/j0suetm/eight_game/App.class create mode 100644 eight_game/target/classes/com/j0suetm/eight_game/SystemInfo.class create mode 100644 eight_game/target/classes/com/j0suetm/eight_game/Window.class create mode 100644 eight_game/target/classes/com/j0suetm/eight_game/components/Board$1.class create mode 100644 eight_game/target/classes/com/j0suetm/eight_game/components/Board.class create mode 100644 eight_game/target/classes/com/j0suetm/eight_game/components/RestartButton$1.class create mode 100644 eight_game/target/classes/com/j0suetm/eight_game/components/RestartButton.class create mode 100644 eight_game/target/classes/com/j0suetm/eight_game/components/Tile.class diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3faff0c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +src/target/* diff --git a/eight_game/.classpath b/eight_game/.classpath new file mode 100644 index 0000000..f0e9804 --- /dev/null +++ b/eight_game/.classpath @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eight_game/.project b/eight_game/.project new file mode 100644 index 0000000..b086d3a --- /dev/null +++ b/eight_game/.project @@ -0,0 +1,23 @@ + + + eight_game + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/eight_game/.settings/org.eclipse.core.resources.prefs b/eight_game/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..e9441bb --- /dev/null +++ b/eight_game/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/eight_game/.settings/org.eclipse.jdt.core.prefs b/eight_game/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..b5490a0 --- /dev/null +++ b/eight_game/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/eight_game/.settings/org.eclipse.m2e.core.prefs b/eight_game/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/eight_game/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/eight_game/nbactions.xml b/eight_game/nbactions.xml new file mode 100644 index 0000000..00d47f1 --- /dev/null +++ b/eight_game/nbactions.xml @@ -0,0 +1,30 @@ + + + + run + + jar + + + clean + javafx:run + + + + jlink + + clean + javafx:jlink + + + + debug + + clean + javafx:run@debug + + + true + + + diff --git a/eight_game/pom.xml b/eight_game/pom.xml new file mode 100644 index 0000000..f1807ae --- /dev/null +++ b/eight_game/pom.xml @@ -0,0 +1,53 @@ + + 4.0.0 + com.j0suetm + eight_game + 0.0.1-SNAPSHOT + + UTF-8 + 11 + 11 + + + + org.openjfx + javafx-controls + 13 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 11 + + + + org.openjfx + javafx-maven-plugin + 0.0.4 + + + default-cli + + com.j0suetm.eight_game.App + + + + debug + + + + + com.j0suetm.eight_game.App + + + + + + + diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/App.java b/eight_game/src/main/java/com/j0suetm/eight_game/App.java new file mode 100644 index 0000000..207d57a --- /dev/null +++ b/eight_game/src/main/java/com/j0suetm/eight_game/App.java @@ -0,0 +1,22 @@ +/** + * file: App.java + * author: Josué Teodoro Moreira + * date: Jun 16, 2023 + */ + +package com.j0suetm.eight_game; + +import javafx.application.Application; +import javafx.stage.Stage; + +public class App extends Application { + @Override + public void start(Stage stage) { + Window window = new Window("Jogo do 8 - Josué Teodoro", 600, 640); + window.show(stage); + } + + public static void main(String[] args) { + launch(args); + } +} \ No newline at end of file diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/SystemInfo.java b/eight_game/src/main/java/com/j0suetm/eight_game/SystemInfo.java new file mode 100644 index 0000000..19eb615 --- /dev/null +++ b/eight_game/src/main/java/com/j0suetm/eight_game/SystemInfo.java @@ -0,0 +1,13 @@ +package com.j0suetm.eight_game; + +public class SystemInfo { + + public static String javaVersion() { + return System.getProperty("java.version"); + } + + public static String javafxVersion() { + return System.getProperty("javafx.version"); + } + +} \ No newline at end of file diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/Window.java b/eight_game/src/main/java/com/j0suetm/eight_game/Window.java new file mode 100644 index 0000000..7120a4f --- /dev/null +++ b/eight_game/src/main/java/com/j0suetm/eight_game/Window.java @@ -0,0 +1,45 @@ +/** + * file: Window.java + * author: Josué Teodoro Moreira + * date: Jun 16, 2023 + */ + +package com.j0suetm.eight_game; + +import com.j0suetm.eight_game.components.Board; +import com.j0suetm.eight_game.components.RestartButton; + +import javafx.geometry.Point2D; +import javafx.geometry.Pos; +import javafx.scene.Scene; +import javafx.scene.layout.StackPane; +import javafx.stage.Stage; + +public class Window { + private Scene scene; + private StackPane stackPane; + private Board board; + private String title; + private Point2D size; + private RestartButton restartButton; + + public Window(String title, int width, int height) { + this.title = title; + this.size = new Point2D(width, height); + + this.board = new Board(width, height - 40, true); + this.restartButton = new RestartButton((int)this.size.getX(), 40); + this.restartButton.addEventHandler(this.board); + + this.stackPane = new StackPane(this.restartButton.getButton(), this.board.getGridPane()); + this.stackPane.setAlignment(Pos.BOTTOM_CENTER); + + this.scene = new Scene(this.stackPane, this.size.getX(),this.size.getY()); + } + + public void show(Stage stage) { + stage.setTitle(this.title); + stage.setScene(this.scene); + stage.show(); + } +} diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/components/Board.java b/eight_game/src/main/java/com/j0suetm/eight_game/components/Board.java new file mode 100644 index 0000000..c33e166 --- /dev/null +++ b/eight_game/src/main/java/com/j0suetm/eight_game/components/Board.java @@ -0,0 +1,127 @@ +/** + * file: components/Board.java + * author: Josué Teodoro Moreira + * date: Jun 16, 2023 + */ + +package com.j0suetm.eight_game.components; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import javafx.event.EventHandler; +import javafx.geometry.Point2D; +import javafx.geometry.Pos; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.GridPane; + +public class Board { + private GridPane gridPane; + private final Point2D gridSize = new Point2D(3, 3); + private List tiles; + private Point2D size; + private Point2D blankTile; + + public Board(int width, int height, boolean shouldShuffle) { + this.size = new Point2D(width, height); + this.gridPane = new GridPane(); + this.gridPane.setMinSize(this.size.getX(), this.size.getY()); + this.gridPane.setAlignment(Pos.TOP_CENTER); + this.blankTile = new Point2D(2, 2); + + this.buildTiles(); + if (shouldShuffle) + this.shuffleTiles(); + } + + private void buildTiles() { + Point2D defaultTileSize = + new Point2D(this.size.getX() / this.gridSize.getX(), + this.size.getY() / this.gridSize.getY()); + + this.tiles = new ArrayList(8); + for (int i = 0; i < 8; ++i) { + Tile tile = new Tile(Integer.toString(i + 1), defaultTileSize); + this.gridPane.add(tile.getButton(), 0, 0); + tile.moveToRelativePosition(i); + this.addEventHandlerToTile(tile); + + this.tiles.add(tile); + } + } + + private void addEventHandlerToTile(Tile tile) { + tile.getButton().addEventFilter(MouseEvent.MOUSE_CLICKED, + new EventHandler() { + @Override + public void handle(MouseEvent event) { + moveTileToBlankSpot(tile); + checkSuccess(); + } + } + ); + } + + private void moveTileToBlankSpot(Tile tile) { + Point2D tilePos = tile.getPosition(); + + // vertical ou horizontal + boolean isAlignedV = tilePos.getX() == this.blankTile.getX(); + boolean isAlignedH = tilePos.getY() == this.blankTile.getY(); + + Point2D newPosition = tilePos; + Point2D distance = new Point2D(0, 0); + if (!isAlignedH && !isAlignedV) { + return; + } else if (isAlignedH) { + distance = new Point2D((int)(blankTile.getX() - tilePos.getX()), 0); + } else if (isAlignedV) { + distance = new Point2D(0, (int)(blankTile.getY() - tilePos.getY())); + } + + if (distance.getX() > 1 || distance.getY() > 1) + return; + + blankTile = tilePos; + newPosition = newPosition.add(distance); + tile.moveToPosition(newPosition); + } + + // retorna caso pelo menos uma `tile` estiver fora de seu lugar + private void checkSuccess() { + for (Tile tile : this.tiles) { + String tileText = tile.getButton().getText(); + String tileRelativePosition = Integer.toString(tiles.indexOf(tile) + 1); + if (!tileText.equals(tileRelativePosition)) { + return; + } + } + + Alert alert = new Alert(AlertType.INFORMATION); + alert.setTitle("Parabéns!!"); + alert.setHeaderText(null); + alert.setContentText("Parabéns!! Você ganhou!"); + + alert.showAndWait(); + } + + public void shuffleTiles() { + Collections.shuffle(this.tiles); + for (Tile tile : this.tiles) + tile.moveToRelativePosition(this.tiles.indexOf(tile)); + } + + public GridPane getGridPane() { + return this.gridPane; + } + + public List getTiles() { + return this.tiles; + } + + public Tile getTileAt(int position) { + return this.tiles.get(position); + } +} diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/components/RestartButton.java b/eight_game/src/main/java/com/j0suetm/eight_game/components/RestartButton.java new file mode 100644 index 0000000..07fc688 --- /dev/null +++ b/eight_game/src/main/java/com/j0suetm/eight_game/components/RestartButton.java @@ -0,0 +1,28 @@ +package com.j0suetm.eight_game.components; + +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.scene.control.Button; + +public class RestartButton { + private Button button; + + public RestartButton(int width, int height) { + this.button = new Button("Reiniciar"); + this.button.setMinSize(width, height); + } + + public void addEventHandler(Board board) { + this.button.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent evt) { + board.shuffleTiles(); + } + } + ); + } + + public Button getButton() { + return this.button; + } +} diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/components/Tile.java b/eight_game/src/main/java/com/j0suetm/eight_game/components/Tile.java new file mode 100644 index 0000000..7705040 --- /dev/null +++ b/eight_game/src/main/java/com/j0suetm/eight_game/components/Tile.java @@ -0,0 +1,41 @@ +/** + * file: components/Tile.java + * author: Josué Teodoro Moreira + * date: Jun 16, 2023 + */ + +package com.j0suetm.eight_game.components; + +import javafx.geometry.Point2D; +import javafx.scene.control.Button; +import javafx.scene.layout.GridPane; + +public class Tile { + private Button button; + Point2D position; + + public Tile(String text, Point2D size) { + this.button = new Button(text); + this.button.setMinSize(size.getX(), size.getY()); + } + + public void moveToPosition(Point2D newPosition) { + this.position = newPosition; + GridPane.setConstraints(this.button, (int)newPosition.getX(), (int)newPosition.getY()); + } + + // A posicao é relativa à posição na Array de Tiles + // na Board, que é convertida aqui em em coluna e linha. + public void moveToRelativePosition(int relativePosition) { + this.position = new Point2D((relativePosition + 3) % 3, relativePosition / 3); + GridPane.setConstraints(this.button, (int)this.position.getX(), (int)this.position.getY()); + } + + public Button getButton() { + return this.button; + } + + public Point2D getPosition() { + return this.position; + } +} diff --git a/eight_game/src/main/java/module-info.java b/eight_game/src/main/java/module-info.java new file mode 100644 index 0000000..600edae --- /dev/null +++ b/eight_game/src/main/java/module-info.java @@ -0,0 +1,4 @@ +module com.j0suetm.eight_game { + requires javafx.controls; + exports com.j0suetm.eight_game; +} \ No newline at end of file diff --git a/eight_game/target/classes/.gitignore b/eight_game/target/classes/.gitignore new file mode 100644 index 0000000..36582c6 --- /dev/null +++ b/eight_game/target/classes/.gitignore @@ -0,0 +1 @@ +/module-info.class diff --git a/eight_game/target/classes/com/j0suetm/eight_game/App.class b/eight_game/target/classes/com/j0suetm/eight_game/App.class new file mode 100644 index 0000000000000000000000000000000000000000..5215d66358c0bac02b01ea7cc19210b0b8ba7190 GIT binary patch literal 773 zcmZ`%%Wl&^6g}fOkDAat8d6%?#(e+@FC(!4DHT$Mgw!gqX_bOnshT>2GnMU${2(m( z9hPh;0*MVfJ_>Qi2`xy?=G?h6_nvd^wSWEo_5;9E+%3XjSawz5oIQ?HkpzyA-Y_}w zcp#je(WnTMVeO2+=kGo^d^GZ<%M+B&&MPJ>es9q?0MFw}d><$j+>Qs>i4Ga1U5VWl_QPnRJdCp=0R7Tdk4FS_uAv#+t+ z=@(IBSe-#}D8qpom#{!n?o zm$88sk@`Fh-66H`$fM;gT+zW`?W;6$#Y?GoU!rgKNUsj-M3kc+0fb~91;Qd_4n;;W zfA1Wn&vYdd+xKGd`Z9@#?|-FIc=} zo6o8$v_@JsY8k6N>723>2bOV*c&ntnf>rV{hc&dON>3n;hBuPLvicc9y7bMNHFih9|RgQ zgzCti+UD5yUGu6xVvZo>PPos-DIwi#^$3}>;Ew4?qhKJ59HC-ypIuJ8J_~Q`{+JPJ zR^Zsgxq&Kd8`l&1-GXOQO7FQ zG}M1>k?dz+9UHQ&%fxjU+_O;32#x07s!JLXN~+7?VLneD+k|ogeYGa&-Cz`e=}G$R;WP42@{xirtx79uQCcG*NMDjs0cBJqqQs3j hBiXg;3u=!N`Kivu>Qt=RT%y@pqS3!Kgq^tF?k5+deFFdh literal 0 HcmV?d00001 diff --git a/eight_game/target/classes/com/j0suetm/eight_game/Window.class b/eight_game/target/classes/com/j0suetm/eight_game/Window.class new file mode 100644 index 0000000000000000000000000000000000000000..53321e0db1d604ee1cb07e457f999155c3a3e048 GIT binary patch literal 1899 zcma)6>vj`W6#h;w4NV6rrJ=O+23VR)WdIe_V3jrjqNOb)1_NrHBttSKnZe0PE4~2# z{G%_T%Oq>*k_X_ST<(2N(>6tx{gIqG`|RttzrA1o^XDr7Hz6Yk2+UNxrn!B!)wX5R zw4GXAZq=-&Z9a0`s<#_KNMLl^+Of=r<<`uN^0r-(0^wH0c5Q+2HGX^gqp9v@o~3Dl z;g+;2&o(VqnHyATSTDS`H1mB0(hiqB%dZL~*4~l}iJyC}?aG$9!m4Z|9oZo7W6HZu zE-!t@tIq)b-5svSiTF$1S@Rv;Kp6o(;j&cFza2&Tw-55l8aMlp$LHk+Yx zNNwWFv@T58~6Yp3Y@a4)$9)S^Pc5a8@4a76h8+3y7!4< z1UHGd1H?PZst7(7I6a`Ut~#-Zw1HdrlsHOx_q#tAPxQH>iCpnq>3a=RE2J60&kTHy z+X5qGch`5Sn%(n9E%!3%Ymn&;tTHAU=E;-6Fq~6bqjbkW1Sf`Z4_`!(6FBoGD_RD= z#2RsTWus8oxWBcUT`y!G3dH(O4>72v0-9E41Cq^cPWYoc*Ipv=co3)Y3w#FpQ5Dugneuvj3H|Jn&aB*?Pl5b3szar zu2-=dMay^iz9$UHy3^vV@fJ$zy~G<}*Qv_7fFQ7j>S}ZGRLCG21Uzu+>yQTnPTe2ees zM%D3dkp!jeP_sR zGM`JqMHJdQ(g}K%%{;OU)~PdcY~K-m`{?A9yHOrFhB;;Z^x5Vk3b6Ooe&C3n&jW^B zH1NX824!lcOx0u(nbIo+?sIcfj4VPVBloq<+WrpfD``r+$XnKP}#wE$SGiZg2~<}q%7~>8LhxYMcfybpOXF=GMh7yCuuQFF zXpO1962ht8QN74 zP{J%8(n+5&<`bAB@;1meRlgvV3s_fpq^?(Zatk%7Gi_1!cPL|9L(W`>C6EMw3Z8*k z?+N^Q0$xkN3-!hitX`pZ3wd1~(@-k^7#g%2Si=i_uEVA?OGCYZmvmDas~*(v6)gh` FzX2<5JLmua literal 0 HcmV?d00001 diff --git a/eight_game/target/classes/com/j0suetm/eight_game/components/Board.class b/eight_game/target/classes/com/j0suetm/eight_game/components/Board.class new file mode 100644 index 0000000000000000000000000000000000000000..a9f48380382f598e28caa3c817775eebfb695809 GIT binary patch literal 4913 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 literal 0 HcmV?d00001 diff --git a/eight_game/target/classes/com/j0suetm/eight_game/components/RestartButton.class b/eight_game/target/classes/com/j0suetm/eight_game/components/RestartButton.class new file mode 100644 index 0000000000000000000000000000000000000000..c933c9e31e5821e8d376310e3c95d7b3c4672685 GIT binary patch literal 1173 zcmb7D?QRl56g|U7Da+OZ)>ivnsS31qi<}el=03kQTs<*5@zn5d*_^c&)og-^V@d-kMSsl7=z<_1E;qg422#zLUy|P zO@|MJIezCUp>*IJi9mB-?+mr}R0;`(Y>%ICr_WW#Ic)WWs~IL*VVGg5Zh~(=IDspa z!BN`x`c8DaN{LUTlKLq_vRJE?nhc3uuPrRZk+G42%@8k^nkigkSojChB(en;PUks#ercB19&_VW{x z{3TcIzVI0~i1a4QVmz}9E5*`(#?oqdL*ErIWcb_{ zdfYN&$Y9r$68>(V2Z5kx&m7Qau`kS!1X!ctiqluc5Hk}-R-Eh}N`dVV>4J60};hW{`u8MN)2oPF5oj@|VaXI4om@ zD2%mAR*dX5+#ZwGh%`pAoZ&b};kdjp!kse|{}5SWLKa!fg#@$Fh2I1@Y~nt_F>JvZ s!-J)25cJq5k|Ag^>0X8=qk^lez literal 0 HcmV?d00001 diff --git a/eight_game/target/classes/com/j0suetm/eight_game/components/Tile.class b/eight_game/target/classes/com/j0suetm/eight_game/components/Tile.class new file mode 100644 index 0000000000000000000000000000000000000000..58eea7a280181fca6e3a23aa4250209524b45874 GIT binary patch literal 1374 zcma)5>rN9<5dKc-g_gCH0xj5b@dmxJh!@l%ULYEhio}vee(AOx%Qo9xvOPuc1^CCa zXd+-V@d11&1zKu6Heyo1&?1>IM(M%Mht+dzxx!W=(xvsq?B}@K;(wSSG_nQ5rw&tIaAmWwHEwfK?eYp{9_wYQ2K*)5M||c_mxZsUh63_V}i?(HT|J zrG&*jo^_gJVQo#aF<|nK-Ev}XeQ&s-34M=u4c-)aORgWtSrWAo`+^T!V+hh@+?8aQ zN~O;h>XMxuAnz_lqU(Qw44P%hYS~r(g8mhPk-yBGq=E)bi$MRIhaTD?Izci<(nppc zLL>)BtCKGMrZcBdGCwf5l|9AKF-9_9F_Jq$jNar4roNDm2RBGY;UzglGKvU>F@+J_ zlo{MSxP=+gq&|xjp~zF3kUezHAWKr>mMGps-*_f_jGP3^64()mYHJ+BlUt zh8V^jsF)ktfr{fU0Wf;*;eH!Hr*Kz8WD<~y)?Jj5dhwt%HJtm^2*vTW%y1-Yd8=^8|zOrtnwUpo!MV=VUw&YcgQ L?HT;Ufq41{`0XiO literal 0 HcmV?d00001 From a1985b325d618c41f07fab3cc8550065ca45d36a Mon Sep 17 00:00:00 2001 From: J0sueTM Date: Sat, 17 Jun 2023 20:15:44 -0300 Subject: [PATCH 3/5] chore: removed binaries --- .gitignore | 2 +- eight_game/target/classes/.gitignore | 1 - .../classes/com/j0suetm/eight_game/App.class | Bin 773 -> 0 bytes .../com/j0suetm/eight_game/SystemInfo.class | Bin 583 -> 0 bytes .../classes/com/j0suetm/eight_game/Window.class | Bin 1899 -> 0 bytes .../j0suetm/eight_game/components/Board$1.class | Bin 1248 -> 0 bytes .../j0suetm/eight_game/components/Board.class | Bin 4913 -> 0 bytes .../eight_game/components/RestartButton$1.class | Bin 1270 -> 0 bytes .../eight_game/components/RestartButton.class | Bin 1173 -> 0 bytes .../com/j0suetm/eight_game/components/Tile.class | Bin 1374 -> 0 bytes 10 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 eight_game/target/classes/.gitignore delete mode 100644 eight_game/target/classes/com/j0suetm/eight_game/App.class delete mode 100644 eight_game/target/classes/com/j0suetm/eight_game/SystemInfo.class delete mode 100644 eight_game/target/classes/com/j0suetm/eight_game/Window.class delete mode 100644 eight_game/target/classes/com/j0suetm/eight_game/components/Board$1.class delete mode 100644 eight_game/target/classes/com/j0suetm/eight_game/components/Board.class delete mode 100644 eight_game/target/classes/com/j0suetm/eight_game/components/RestartButton$1.class delete mode 100644 eight_game/target/classes/com/j0suetm/eight_game/components/RestartButton.class delete mode 100644 eight_game/target/classes/com/j0suetm/eight_game/components/Tile.class diff --git a/.gitignore b/.gitignore index 3faff0c..19b3f53 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -src/target/* +eight_game/target/* diff --git a/eight_game/target/classes/.gitignore b/eight_game/target/classes/.gitignore deleted file mode 100644 index 36582c6..0000000 --- a/eight_game/target/classes/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/module-info.class diff --git a/eight_game/target/classes/com/j0suetm/eight_game/App.class b/eight_game/target/classes/com/j0suetm/eight_game/App.class deleted file mode 100644 index 5215d66358c0bac02b01ea7cc19210b0b8ba7190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 773 zcmZ`%%Wl&^6g}fOkDAat8d6%?#(e+@FC(!4DHT$Mgw!gqX_bOnshT>2GnMU${2(m( z9hPh;0*MVfJ_>Qi2`xy?=G?h6_nvd^wSWEo_5;9E+%3XjSawz5oIQ?HkpzyA-Y_}w zcp#je(WnTMVeO2+=kGo^d^GZ<%M+B&&MPJ>es9q?0MFw}d><$j+>Qs>i4Ga1U5VWl_QPnRJdCp=0R7Tdk4FS_uAv#+t+ z=@(IBSe-#}D8qpom#{!n?o zm$88sk@`Fh-66H`$fM;gT+zW`?W;6$#Y?GoU!rgKNUsj-M3kc+0fb~91;Qd_4n;;W zfA1Wn&vYdd+xKGd`Z9@#?|-FIc=} zo6o8$v_@JsY8k6N>723>2bOV*c&ntnf>rV{hc&dON>3n;hBuPLvicc9y7bMNHFih9|RgQ zgzCti+UD5yUGu6xVvZo>PPos-DIwi#^$3}>;Ew4?qhKJ59HC-ypIuJ8J_~Q`{+JPJ zR^Zsgxq&Kd8`l&1-GXOQO7FQ zG}M1>k?dz+9UHQ&%fxjU+_O;32#x07s!JLXN~+7?VLneD+k|ogeYGa&-Cz`e=}G$R;WP42@{xirtx79uQCcG*NMDjs0cBJqqQs3j hBiXg;3u=!N`Kivu>Qt=RT%y@pqS3!Kgq^tF?k5+deFFdh diff --git a/eight_game/target/classes/com/j0suetm/eight_game/Window.class b/eight_game/target/classes/com/j0suetm/eight_game/Window.class deleted file mode 100644 index 53321e0db1d604ee1cb07e457f999155c3a3e048..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1899 zcma)6>vj`W6#h;w4NV6rrJ=O+23VR)WdIe_V3jrjqNOb)1_NrHBttSKnZe0PE4~2# z{G%_T%Oq>*k_X_ST<(2N(>6tx{gIqG`|RttzrA1o^XDr7Hz6Yk2+UNxrn!B!)wX5R zw4GXAZq=-&Z9a0`s<#_KNMLl^+Of=r<<`uN^0r-(0^wH0c5Q+2HGX^gqp9v@o~3Dl z;g+;2&o(VqnHyATSTDS`H1mB0(hiqB%dZL~*4~l}iJyC}?aG$9!m4Z|9oZo7W6HZu zE-!t@tIq)b-5svSiTF$1S@Rv;Kp6o(;j&cFza2&Tw-55l8aMlp$LHk+Yx zNNwWFv@T58~6Yp3Y@a4)$9)S^Pc5a8@4a76h8+3y7!4< z1UHGd1H?PZst7(7I6a`Ut~#-Zw1HdrlsHOx_q#tAPxQH>iCpnq>3a=RE2J60&kTHy z+X5qGch`5Sn%(n9E%!3%Ymn&;tTHAU=E;-6Fq~6bqjbkW1Sf`Z4_`!(6FBoGD_RD= z#2RsTWus8oxWBcUT`y!G3dH(O4>72v0-9E41Cq^cPWYoc*Ipv=co3)Y3w#FpQ5Dugneuvj3H|Jn&aB*?Pl5b3szar zu2-=dMay^iz9$UHy3^vV@fJ$zy~G<}*Qv_7fFQ7j>S}ZGRLCG21Uzu+>yQTnPTe2ees zM%D3dkp!jeP_sR zGM`JqMHJdQ(g}K%%{;OU)~PdcY~K-m`{?A9yHOrFhB;;Z^x5Vk3b6Ooe&C3n&jW^B zH1NX824!lcOx0u(nbIo+?sIcfj4VPVBloq<+WrpfD``r+$XnKP}#wE$SGiZg2~<}q%7~>8LhxYMcfybpOXF=GMh7yCuuQFF zXpO1962ht8QN74 zP{J%8(n+5&<`bAB@;1meRlgvV3s_fpq^?(Zatk%7Gi_1!cPL|9L(W`>C6EMw3Z8*k z?+N^Q0$xkN3-!hitX`pZ3wd1~(@-k^7#g%2Si=i_uEVA?OGCYZmvmDas~*(v6)gh` FzX2<5JLmua diff --git a/eight_game/target/classes/com/j0suetm/eight_game/components/Board.class b/eight_game/target/classes/com/j0suetm/eight_game/components/Board.class deleted file mode 100644 index a9f48380382f598e28caa3c817775eebfb695809..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4913 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 diff --git a/eight_game/target/classes/com/j0suetm/eight_game/components/RestartButton.class b/eight_game/target/classes/com/j0suetm/eight_game/components/RestartButton.class deleted file mode 100644 index c933c9e31e5821e8d376310e3c95d7b3c4672685..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1173 zcmb7D?QRl56g|U7Da+OZ)>ivnsS31qi<}el=03kQTs<*5@zn5d*_^c&)og-^V@d-kMSsl7=z<_1E;qg422#zLUy|P zO@|MJIezCUp>*IJi9mB-?+mr}R0;`(Y>%ICr_WW#Ic)WWs~IL*VVGg5Zh~(=IDspa z!BN`x`c8DaN{LUTlKLq_vRJE?nhc3uuPrRZk+G42%@8k^nkigkSojChB(en;PUks#ercB19&_VW{x z{3TcIzVI0~i1a4QVmz}9E5*`(#?oqdL*ErIWcb_{ zdfYN&$Y9r$68>(V2Z5kx&m7Qau`kS!1X!ctiqluc5Hk}-R-Eh}N`dVV>4J60};hW{`u8MN)2oPF5oj@|VaXI4om@ zD2%mAR*dX5+#ZwGh%`pAoZ&b};kdjp!kse|{}5SWLKa!fg#@$Fh2I1@Y~nt_F>JvZ s!-J)25cJq5k|Ag^>0X8=qk^lez diff --git a/eight_game/target/classes/com/j0suetm/eight_game/components/Tile.class b/eight_game/target/classes/com/j0suetm/eight_game/components/Tile.class deleted file mode 100644 index 58eea7a280181fca6e3a23aa4250209524b45874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1374 zcma)5>rN9<5dKc-g_gCH0xj5b@dmxJh!@l%ULYEhio}vee(AOx%Qo9xvOPuc1^CCa zXd+-V@d11&1zKu6Heyo1&?1>IM(M%Mht+dzxx!W=(xvsq?B}@K;(wSSG_nQ5rw&tIaAmWwHEwfK?eYp{9_wYQ2K*)5M||c_mxZsUh63_V}i?(HT|J zrG&*jo^_gJVQo#aF<|nK-Ev}XeQ&s-34M=u4c-)aORgWtSrWAo`+^T!V+hh@+?8aQ zN~O;h>XMxuAnz_lqU(Qw44P%hYS~r(g8mhPk-yBGq=E)bi$MRIhaTD?Izci<(nppc zLL>)BtCKGMrZcBdGCwf5l|9AKF-9_9F_Jq$jNar4roNDm2RBGY;UzglGKvU>F@+J_ zlo{MSxP=+gq&|xjp~zF3kUezHAWKr>mMGps-*_f_jGP3^64()mYHJ+BlUt zh8V^jsF)ktfr{fU0Wf;*;eH!Hr*Kz8WD<~y)?Jj5dhwt%HJtm^2*vTW%y1-Yd8=^8|zOrtnwUpo!MV=VUw&YcgQ L?HT;Ufq41{`0XiO From f9cc2f42d9deb74e052c4d39e1a1130d343a9086 Mon Sep 17 00:00:00 2001 From: J0sueTM Date: Sun, 18 Jun 2023 17:11:56 -0300 Subject: [PATCH 4/5] feat: added event handling with both mouse and keys --- eight_game/.classpath | 1 + .../main/java/com/j0suetm/eight_game/App.java | 4 +- .../eight_game/{Window.java => Game.java} | 8 ++-- .../com/j0suetm/eight_game/SystemInfo.java | 13 ------ .../j0suetm/eight_game/components/Board.java | 42 ++++++++++++++++--- .../eight_game/components/Movable.java | 15 +++++++ .../j0suetm/eight_game/components/Tile.java | 32 ++++++++++++-- .../eight_game/components/TileMovement.java | 26 ++++++++++++ 8 files changed, 114 insertions(+), 27 deletions(-) rename eight_game/src/main/java/com/j0suetm/eight_game/{Window.java => Game.java} (85%) delete mode 100644 eight_game/src/main/java/com/j0suetm/eight_game/SystemInfo.java create mode 100644 eight_game/src/main/java/com/j0suetm/eight_game/components/Movable.java create mode 100644 eight_game/src/main/java/com/j0suetm/eight_game/components/TileMovement.java diff --git a/eight_game/.classpath b/eight_game/.classpath index f0e9804..ea29b3a 100644 --- a/eight_game/.classpath +++ b/eight_game/.classpath @@ -36,5 +36,6 @@ + diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/App.java b/eight_game/src/main/java/com/j0suetm/eight_game/App.java index 207d57a..1cbca63 100644 --- a/eight_game/src/main/java/com/j0suetm/eight_game/App.java +++ b/eight_game/src/main/java/com/j0suetm/eight_game/App.java @@ -12,8 +12,8 @@ public class App extends Application { @Override public void start(Stage stage) { - Window window = new Window("Jogo do 8 - Josué Teodoro", 600, 640); - window.show(stage); + Game game = new Game("Jogo do 8 - Josué Teodoro", 600, 640, true); + game.show(stage); } public static void main(String[] args) { diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/Window.java b/eight_game/src/main/java/com/j0suetm/eight_game/Game.java similarity index 85% rename from eight_game/src/main/java/com/j0suetm/eight_game/Window.java rename to eight_game/src/main/java/com/j0suetm/eight_game/Game.java index 7120a4f..eae3020 100644 --- a/eight_game/src/main/java/com/j0suetm/eight_game/Window.java +++ b/eight_game/src/main/java/com/j0suetm/eight_game/Game.java @@ -1,5 +1,5 @@ /** - * file: Window.java + * file: Game.java * author: Josué Teodoro Moreira * date: Jun 16, 2023 */ @@ -15,7 +15,7 @@ import javafx.scene.layout.StackPane; import javafx.stage.Stage; -public class Window { +public class Game { private Scene scene; private StackPane stackPane; private Board board; @@ -23,11 +23,11 @@ public class Window { private Point2D size; private RestartButton restartButton; - public Window(String title, int width, int height) { + public Game(String title, int width, int height, boolean shouldShuffle) { this.title = title; this.size = new Point2D(width, height); - this.board = new Board(width, height - 40, true); + this.board = new Board(width, height - 40, shouldShuffle); this.restartButton = new RestartButton((int)this.size.getX(), 40); this.restartButton.addEventHandler(this.board); diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/SystemInfo.java b/eight_game/src/main/java/com/j0suetm/eight_game/SystemInfo.java deleted file mode 100644 index 19eb615..0000000 --- a/eight_game/src/main/java/com/j0suetm/eight_game/SystemInfo.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.j0suetm.eight_game; - -public class SystemInfo { - - public static String javaVersion() { - return System.getProperty("java.version"); - } - - public static String javafxVersion() { - return System.getProperty("javafx.version"); - } - -} \ No newline at end of file diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/components/Board.java b/eight_game/src/main/java/com/j0suetm/eight_game/components/Board.java index c33e166..0c60817 100644 --- a/eight_game/src/main/java/com/j0suetm/eight_game/components/Board.java +++ b/eight_game/src/main/java/com/j0suetm/eight_game/components/Board.java @@ -14,6 +14,8 @@ import javafx.geometry.Pos; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; import javafx.scene.input.MouseEvent; import javafx.scene.layout.GridPane; @@ -62,9 +64,39 @@ public void handle(MouseEvent event) { } } ); + + tile.getButton().addEventFilter(KeyEvent.KEY_PRESSED, + new EventHandler() { + @Override + public void handle(KeyEvent event) { + KeyCode code = event.getCode(); + if (!tile.getMovementMap().containsKey(code)) + return; + + TileMovement movement = tile.getMovementMap().get(code); + Point2D newPosition = tile.getPosition().add(movement.getDirection()); + if (!newPosition.equals(blankTile)) + return; + + blankTile = tile.getPosition(); + tile.moveTo(movement); + checkSuccess(); + tile.getButton().requestFocus(); + } + } + ); } private void moveTileToBlankSpot(Tile tile) { + Point2D whereCanMove = whereCanTileMove(tile); + if (whereCanMove.equals(Point2D.ZERO)) + return; + + blankTile = tile.getPosition(); + tile.moveToPosition(whereCanMove); + } + + private Point2D whereCanTileMove(Tile tile) { Point2D tilePos = tile.getPosition(); // vertical ou horizontal @@ -74,7 +106,7 @@ private void moveTileToBlankSpot(Tile tile) { Point2D newPosition = tilePos; Point2D distance = new Point2D(0, 0); if (!isAlignedH && !isAlignedV) { - return; + return tilePos; } else if (isAlignedH) { distance = new Point2D((int)(blankTile.getX() - tilePos.getX()), 0); } else if (isAlignedV) { @@ -82,14 +114,14 @@ private void moveTileToBlankSpot(Tile tile) { } if (distance.getX() > 1 || distance.getY() > 1) - return; + return tilePos; - blankTile = tilePos; newPosition = newPosition.add(distance); - tile.moveToPosition(newPosition); + + return newPosition; } - // retorna caso pelo menos uma `tile` estiver fora de seu lugar + // não executa caso pelo menos uma `tile` estiver fora de seu lugar private void checkSuccess() { for (Tile tile : this.tiles) { String tileText = tile.getButton().getText(); diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/components/Movable.java b/eight_game/src/main/java/com/j0suetm/eight_game/components/Movable.java new file mode 100644 index 0000000..33d1b84 --- /dev/null +++ b/eight_game/src/main/java/com/j0suetm/eight_game/components/Movable.java @@ -0,0 +1,15 @@ +/** + * file: components/Movable.java + * author: Josué Teodoro Moreira + * date: Jun 17, 2023 + */ + +package com.j0suetm.eight_game.components; + +import javafx.geometry.Point2D; + +public interface Movable { + public void moveTo(TileMovement direction); + public void moveToPosition(Point2D newPosition); + public void moveToRelativePosition(int relativePosition); +} diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/components/Tile.java b/eight_game/src/main/java/com/j0suetm/eight_game/components/Tile.java index 7705040..088fc8c 100644 --- a/eight_game/src/main/java/com/j0suetm/eight_game/components/Tile.java +++ b/eight_game/src/main/java/com/j0suetm/eight_game/components/Tile.java @@ -6,29 +6,51 @@ package com.j0suetm.eight_game.components; +import java.util.HashMap; + import javafx.geometry.Point2D; import javafx.scene.control.Button; +import javafx.scene.input.KeyCode; import javafx.scene.layout.GridPane; -public class Tile { +public class Tile implements Movable { private Button button; Point2D position; + private HashMap movementMap; public Tile(String text, Point2D size) { this.button = new Button(text); this.button.setMinSize(size.getX(), size.getY()); + + this.movementMap = new HashMap(4); + this.movementMap.put(KeyCode.LEFT, TileMovement.LEFT); + this.movementMap.put(KeyCode.RIGHT, TileMovement.RIGHT); + this.movementMap.put(KeyCode.UP, TileMovement.UP); + this.movementMap.put(KeyCode.DOWN, TileMovement.DOWN); + } + + @Override + public void moveTo(TileMovement direction) { + this.position = this.position.add(direction.getDirection()); + this.updateGridConstraints(); } + @Override public void moveToPosition(Point2D newPosition) { this.position = newPosition; - GridPane.setConstraints(this.button, (int)newPosition.getX(), (int)newPosition.getY()); + this.updateGridConstraints(); } // A posicao é relativa à posição na Array de Tiles // na Board, que é convertida aqui em em coluna e linha. + @Override public void moveToRelativePosition(int relativePosition) { this.position = new Point2D((relativePosition + 3) % 3, relativePosition / 3); - GridPane.setConstraints(this.button, (int)this.position.getX(), (int)this.position.getY()); + this.updateGridConstraints(); + } + + private void updateGridConstraints() { + GridPane.setConstraints(this.button, (int)this.position.getX(), (int)this.position.getY()); } public Button getButton() { @@ -38,4 +60,8 @@ public Button getButton() { public Point2D getPosition() { return this.position; } + + public HashMap getMovementMap() { + return this.movementMap; + } } diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/components/TileMovement.java b/eight_game/src/main/java/com/j0suetm/eight_game/components/TileMovement.java new file mode 100644 index 0000000..4a2898a --- /dev/null +++ b/eight_game/src/main/java/com/j0suetm/eight_game/components/TileMovement.java @@ -0,0 +1,26 @@ +/** + * file: components/TileMovement.java + * author: Josué Teodoro Moreira + * date: Jun 17, 2023 + */ + +package com.j0suetm.eight_game.components; + +import javafx.geometry.Point2D; + +public enum TileMovement { + LEFT(new Point2D(-1, 0)), + RIGHT(new Point2D(1, 0)), + UP(new Point2D(0, -1)), + DOWN(new Point2D(0, 1)); + + private Point2D direction; + + TileMovement(Point2D direction) { + this.direction = direction; + } + + public Point2D getDirection () { + return this.direction; + } +} From c73741ea40bb5864c66a2488ffe4d8c8d043c674 Mon Sep 17 00:00:00 2001 From: J0sueTM Date: Thu, 22 Jun 2023 19:49:57 -0300 Subject: [PATCH 5/5] feat: minor refactor --- eight_game/.classpath | 8 +-- eight_game/.idea/.gitignore | 3 + .../.idea/codeStyles/codeStyleConfig.xml | 5 ++ eight_game/.idea/compiler.xml | 13 ++++ eight_game/.idea/discord.xml | 7 +++ eight_game/.idea/encodings.xml | 7 +++ eight_game/.idea/jarRepositories.xml | 20 +++++++ eight_game/.idea/misc.xml | 12 ++++ eight_game/.idea/vcs.xml | 6 ++ .../org.eclipse.core.resources.prefs | 1 + eight_game/pom.xml | 56 +++++++++++------ .../main/java/com/j0suetm/eight_game/App.java | 6 +- .../java/com/j0suetm/eight_game/Game.java | 60 +++++++++++++++++-- .../j0suetm/eight_game/components/Board.java | 28 +++++---- .../eight_game/components/Movable.java | 2 +- .../j0suetm/eight_game/components/Tile.java | 2 +- 16 files changed, 194 insertions(+), 42 deletions(-) create mode 100644 eight_game/.idea/.gitignore create mode 100644 eight_game/.idea/codeStyles/codeStyleConfig.xml create mode 100644 eight_game/.idea/compiler.xml create mode 100644 eight_game/.idea/discord.xml create mode 100644 eight_game/.idea/encodings.xml create mode 100644 eight_game/.idea/jarRepositories.xml create mode 100644 eight_game/.idea/misc.xml create mode 100644 eight_game/.idea/vcs.xml diff --git a/eight_game/.classpath b/eight_game/.classpath index ea29b3a..851d83e 100644 --- a/eight_game/.classpath +++ b/eight_game/.classpath @@ -14,15 +14,15 @@ + - - + @@ -31,11 +31,11 @@ - + - + diff --git a/eight_game/.idea/.gitignore b/eight_game/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/eight_game/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/eight_game/.idea/codeStyles/codeStyleConfig.xml b/eight_game/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/eight_game/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/eight_game/.idea/compiler.xml b/eight_game/.idea/compiler.xml new file mode 100644 index 0000000..4eecdf8 --- /dev/null +++ b/eight_game/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/eight_game/.idea/discord.xml b/eight_game/.idea/discord.xml new file mode 100644 index 0000000..8cf359d --- /dev/null +++ b/eight_game/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/eight_game/.idea/encodings.xml b/eight_game/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/eight_game/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/eight_game/.idea/jarRepositories.xml b/eight_game/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/eight_game/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/eight_game/.idea/misc.xml b/eight_game/.idea/misc.xml new file mode 100644 index 0000000..7499f4f --- /dev/null +++ b/eight_game/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/eight_game/.idea/vcs.xml b/eight_game/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/eight_game/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/eight_game/.settings/org.eclipse.core.resources.prefs b/eight_game/.settings/org.eclipse.core.resources.prefs index e9441bb..abdea9a 100644 --- a/eight_game/.settings/org.eclipse.core.resources.prefs +++ b/eight_game/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,4 @@ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 encoding/=UTF-8 diff --git a/eight_game/pom.xml b/eight_game/pom.xml index f1807ae..8d1173c 100644 --- a/eight_game/pom.xml +++ b/eight_game/pom.xml @@ -1,5 +1,5 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 com.j0suetm eight_game @@ -13,7 +13,29 @@ org.openjfx javafx-controls - 13 + 21-ea+17 + + + org.openjfx + javafx-base + 21-ea+21 + + + org.openjfx + javafx-media + 21-ea+21 + + + org.junit.jupiter + junit-jupiter-api + 5.10.0-M1 + test + + + org.testfx + testfx-junit5 + 4.0.16-alpha + test @@ -26,27 +48,23 @@ 11 + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.1 + + + --add-exports javafx.graphics/com.sun.javafx.application=ALL-UNNAMED + + + org.openjfx javafx-maven-plugin 0.0.4 - - - default-cli - - com.j0suetm.eight_game.App - - - - debug - - - - - com.j0suetm.eight_game.App - - - + + com.j0suetm.eight_game.App + diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/App.java b/eight_game/src/main/java/com/j0suetm/eight_game/App.java index 1cbca63..00e6171 100644 --- a/eight_game/src/main/java/com/j0suetm/eight_game/App.java +++ b/eight_game/src/main/java/com/j0suetm/eight_game/App.java @@ -10,9 +10,11 @@ import javafx.stage.Stage; public class App extends Application { + private Game game; + @Override - public void start(Stage stage) { - Game game = new Game("Jogo do 8 - Josué Teodoro", 600, 640, true); + public void start(Stage stage) { + this.game = new Game("Jogo do 8 - Josué Teodoro", 600, 640, true); game.show(stage); } diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/Game.java b/eight_game/src/main/java/com/j0suetm/eight_game/Game.java index eae3020..7a9a532 100644 --- a/eight_game/src/main/java/com/j0suetm/eight_game/Game.java +++ b/eight_game/src/main/java/com/j0suetm/eight_game/Game.java @@ -16,12 +16,13 @@ import javafx.stage.Stage; public class Game { - private Scene scene; - private StackPane stackPane; private Board board; private String title; private Point2D size; private RestartButton restartButton; + private Stage stage; + private Scene scene; + private StackPane stackPane; public Game(String title, int width, int height, boolean shouldShuffle) { this.title = title; @@ -38,8 +39,57 @@ public Game(String title, int width, int height, boolean shouldShuffle) { } public void show(Stage stage) { - stage.setTitle(this.title); - stage.setScene(this.scene); - stage.show(); + this.stage = stage; + this.stage.setTitle(this.title); + this.stage.setScene(this.scene); + this.stage.show(); + } + + public Scene getScene() { + return scene; + } + + public void setScene(Scene scene) { + this.scene = scene; + } + + public StackPane getStackPane() { + return stackPane; + } + + public void setStackPane(StackPane stackPane) { + this.stackPane = stackPane; + } + + public Board getBoard() { + return board; + } + + public void setBoard(Board board) { + this.board = board; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Point2D getSize() { + return size; + } + + public void setSize(Point2D size) { + this.size = size; + } + + public RestartButton getRestartButton() { + return restartButton; + } + + public void setRestartButton(RestartButton restartButton) { + this.restartButton = restartButton; } } diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/components/Board.java b/eight_game/src/main/java/com/j0suetm/eight_game/components/Board.java index 0c60817..aa36478 100644 --- a/eight_game/src/main/java/com/j0suetm/eight_game/components/Board.java +++ b/eight_game/src/main/java/com/j0suetm/eight_game/components/Board.java @@ -44,6 +44,8 @@ private void buildTiles() { this.size.getY() / this.gridSize.getY()); this.tiles = new ArrayList(8); + // utilizo for somente para ter um número crescente, para dar nome + // aos `tiles` sem precisar de fazer um por um. for (int i = 0; i < 8; ++i) { Tile tile = new Tile(Integer.toString(i + 1), defaultTileSize); this.gridPane.add(tile.getButton(), 0, 0); @@ -79,9 +81,8 @@ public void handle(KeyEvent event) { return; blankTile = tile.getPosition(); - tile.moveTo(movement); + tile.move(movement); checkSuccess(); - tile.getButton().requestFocus(); } } ); @@ -89,7 +90,7 @@ public void handle(KeyEvent event) { private void moveTileToBlankSpot(Tile tile) { Point2D whereCanMove = whereCanTileMove(tile); - if (whereCanMove.equals(Point2D.ZERO)) + if (whereCanMove.equals(tile.getPosition())) return; blankTile = tile.getPosition(); @@ -123,13 +124,8 @@ private Point2D whereCanTileMove(Tile tile) { // não executa caso pelo menos uma `tile` estiver fora de seu lugar private void checkSuccess() { - for (Tile tile : this.tiles) { - String tileText = tile.getButton().getText(); - String tileRelativePosition = Integer.toString(tiles.indexOf(tile) + 1); - if (!tileText.equals(tileRelativePosition)) { - return; - } - } + if (!this.isComplete()) + return; Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("Parabéns!!"); @@ -139,6 +135,18 @@ private void checkSuccess() { alert.showAndWait(); } + public boolean isComplete() { + for (Tile tile : this.tiles) { + String tileText = tile.getButton().getText(); + String tileRelativePosition = Integer.toString(tiles.indexOf(tile) + 1); + if (!tileText.equals(tileRelativePosition)) { + return false; + } + } + + return true; + } + public void shuffleTiles() { Collections.shuffle(this.tiles); for (Tile tile : this.tiles) diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/components/Movable.java b/eight_game/src/main/java/com/j0suetm/eight_game/components/Movable.java index 33d1b84..de73ef3 100644 --- a/eight_game/src/main/java/com/j0suetm/eight_game/components/Movable.java +++ b/eight_game/src/main/java/com/j0suetm/eight_game/components/Movable.java @@ -9,7 +9,7 @@ import javafx.geometry.Point2D; public interface Movable { - public void moveTo(TileMovement direction); + public void move(TileMovement direction); public void moveToPosition(Point2D newPosition); public void moveToRelativePosition(int relativePosition); } diff --git a/eight_game/src/main/java/com/j0suetm/eight_game/components/Tile.java b/eight_game/src/main/java/com/j0suetm/eight_game/components/Tile.java index 088fc8c..2f7aa4f 100644 --- a/eight_game/src/main/java/com/j0suetm/eight_game/components/Tile.java +++ b/eight_game/src/main/java/com/j0suetm/eight_game/components/Tile.java @@ -30,7 +30,7 @@ public Tile(String text, Point2D size) { } @Override - public void moveTo(TileMovement direction) { + public void move(TileMovement direction) { this.position = this.position.add(direction.getDirection()); this.updateGridConstraints(); }