Skip to content

Commit

Permalink
Merge pull request #2 from khanhdew/dev
Browse files Browse the repository at this point in the history
Merge dev branch to get new features
  • Loading branch information
khanhdew committed May 21, 2024
2 parents 7b0ef4b + cc0c9df commit 357174d
Show file tree
Hide file tree
Showing 12 changed files with 413 additions and 28 deletions.
8 changes: 6 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,12 @@
<artifactId>google-collections</artifactId>
<version>1.0-rc2</version>
</dependency>


<!--postgresql driver-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.23</version>
</dependency>
</dependencies>

<build>
Expand Down
1 change: 0 additions & 1 deletion src/main/java/com/khanhdew/testjfx/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ public void start(Stage stage) throws Exception {
WelcomePaneController controller = loader.getController();
controller.setStage(stage);


Scene scene = new Scene(welcomePane, 800, 500);
scene.getStylesheets().add("file:src/main/resources/assets/css/style.css");
stage.setScene(scene);
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/com/khanhdew/testjfx/utils/BoardHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.khanhdew.testjfx.model.PieceState;

import java.util.ArrayList;
import java.util.List;


public class BoardHelper {
Expand Down Expand Up @@ -36,6 +37,21 @@ public static void printMatrix(int[][] matrix) {
}
}

public static ArrayList<Piece> matrixToPieces(int[][] matrix) {
ArrayList<Piece> pieces = new ArrayList<>();
for (int i = 0; i < matrix.length; i++)
for (int j = 0; j < matrix[0].length; j++) {
if (matrix[i][j] == 1)
pieces.add(new Piece(i, j, PieceState.BLACK));
else if (matrix[i][j] == 2)
pieces.add(new Piece(i, j, PieceState.WHITE));
else{
pieces.add(new Piece(i, j, PieceState.EMPTY));
}
}
return pieces;
}

public static void printAllPieces(ArrayList<Piece> pieces) {
for (Piece piece : pieces) {
if (piece.getCurrentState() != PieceState.EMPTY)
Expand Down
121 changes: 121 additions & 0 deletions src/main/java/com/khanhdew/testjfx/utils/DAO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
package com.khanhdew.testjfx.utils;

import com.khanhdew.testjfx.model.Board;
import com.khanhdew.testjfx.model.Piece;
import com.khanhdew.testjfx.view.MainPane;
import javafx.scene.canvas.Canvas;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.List;

public class DAO {
static Connection connection = DbConnector.getInstance().getConnection();

public static void saveGame(MainPane mainPane) {
int[][] matrix = mainPane.getMatrix();
String matrixString = matrixToString(matrix);
String query = "INSERT INTO game (width, height, board, player1, player2, turn) VALUES (?,?, ?, ?, ?, ?)";
try {
PreparedStatement preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(3, matrixString);
preparedStatement.setInt(2, matrix.length);
preparedStatement.setInt(1, matrix[0].length);
preparedStatement.setInt(4, mainPane.getP1().getPlayerId());
preparedStatement.setInt(5, mainPane.getP2().getPlayerId());
preparedStatement.setInt(6, mainPane.getTurn());
preparedStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}

private static String matrixToString(int[][] matrix) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
sb.append(matrix[i][j]);
}
}
return sb.toString();
}

public static List<MainPane> loadGame(MainPane mainPane) {
List<MainPane> games = new ArrayList<>();
String query = "SELECT * FROM game inner join player on game.id = player.id WHERE player1 = ? AND player2 = ?";
try {
PreparedStatement preparedStatement = connection.prepareStatement(query);
preparedStatement.setInt(1, mainPane.getP1().getPlayerId());
preparedStatement.setInt(2, mainPane.getP2().getPlayerId());
preparedStatement.executeQuery();
while (preparedStatement.getResultSet().next()) {
MainPane temp = new MainPane();
int rows = preparedStatement.getResultSet().getInt("height");
int cols = preparedStatement.getResultSet().getInt("width");
String matrixString = preparedStatement.getResultSet().getString("board");
int[][] matrix = stringToMatrix(matrixString, rows, cols);
temp.setBoard(rows, cols);
temp.getP1().setPlayerId(preparedStatement.getResultSet().getInt("player1"));
temp.getP2().setPlayerId(preparedStatement.getResultSet().getInt("player2"));
temp.setMatrix(matrix);
temp.setTurn(preparedStatement.getResultSet().getInt("turn"));
games.add(temp);
}
} catch (Exception e) {
e.printStackTrace();
}
return games;
}

public static void loadLastSave(MainPane mainPane) {
String query = "SELECT * FROM game WHERE player1 = ? AND player2 = ? order by id desc limit 1";
try {
PreparedStatement preparedStatement = connection.prepareStatement(query);
preparedStatement.setInt(1, mainPane.getP1().getPlayerId());
preparedStatement.setInt(2, mainPane.getP2().getPlayerId());
preparedStatement.executeQuery();

while (preparedStatement.getResultSet().next()) {
int rows = preparedStatement.getResultSet().getInt("height");
int cols = preparedStatement.getResultSet().getInt("width");
String matrixString = preparedStatement.getResultSet().getString("board");
int[][] matrix = stringToMatrix(matrixString, rows, cols);
BoardHelper.printMatrix(matrix);
ArrayList<Piece> pieces = BoardHelper.matrixToPieces(matrix);
mainPane.setBoard(rows, cols);
mainPane.getP1().setPlayerId(preparedStatement.getResultSet().getInt("player1"));
mainPane.getP2().setPlayerId(preparedStatement.getResultSet().getInt("player2"));
mainPane.setMatrix(matrix);
mainPane.setTurn(preparedStatement.getResultSet().getInt("turn"));
mainPane.setPieces(pieces);
mainPane.getGamePane().getChildren().clear();
mainPane.setC1(new Canvas(800,800));
mainPane.getGamePane().getChildren().add(mainPane.getC1());
for(Piece piece: pieces){
piece.setPieceSize(Board.getSquareSize());
mainPane.getGamePane().getChildren().add(piece);
}
Board.draw(mainPane.getC1().getGraphicsContext2D());
mainPane.setScore();
mainPane.showScore();
}

} catch (Exception e) {
e.printStackTrace();
}
}

private static int[][] stringToMatrix(String matrixString,int rows, int cols){
int[][] matrix = new int[rows][cols];
int index = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
matrix[i][j] = matrixString.charAt(index) - '0';
index++;
}
}
return matrix;
}

}
46 changes: 46 additions & 0 deletions src/main/java/com/khanhdew/testjfx/utils/DbConnector.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.khanhdew.testjfx.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbConnector {
private static DbConnector instance;
private Connection connection;

private DbConnector() {
try {
String DB_URL = "jdbc:postgresql://localhost:5432/flipping";
String user_name = "postgres";
String password = "khanhdew123aA@#$";
Class.forName("org.postgresql.Driver");
connection = DriverManager.getConnection(DB_URL, user_name, password);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}

public static synchronized DbConnector getInstance() {
if (instance == null) {
instance = new DbConnector();
}
return instance;
}

public Connection getConnection() {
return connection;
}

public void closeDB() {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}

}
8 changes: 6 additions & 2 deletions src/main/java/com/khanhdew/testjfx/utils/Language.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@

public enum Language {
ENGLISH, VIETNAMESE;
public static BiMap<String, String> english = HashBiMap.create();
public static BiMap<String, String> vietnamese = HashBiMap.create();
public static final BiMap<String, String> english = HashBiMap.create();
public static final BiMap<String, String> vietnamese = HashBiMap.create();

public BiMap<String, String> getLanguage() {
initEnglish();
Expand Down Expand Up @@ -49,6 +49,8 @@ public void initEnglish() {
english.put("reset", "Reset");
english.put("setting", "Settings");
english.put("undo", "Undo");
english.put("save", "Save");
english.put("load", "Load");
}

public void initVietnamese() {
Expand Down Expand Up @@ -78,5 +80,7 @@ public void initVietnamese() {
vietnamese.put("reset", "Làm mới");
vietnamese.put("setting", "Cài đặt");
vietnamese.put("undo", "Hoàn tác");
vietnamese.put("save", "Lưu");
vietnamese.put("load", "Tải");
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
package com.khanhdew.testjfx.view;

import com.google.common.collect.BiMap;
import com.khanhdew.testjfx.Main;
import com.khanhdew.testjfx.utils.BoardHelper;
import com.khanhdew.testjfx.utils.DAO;
import com.khanhdew.testjfx.utils.Language;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.layout.HBox;

import java.util.List;

import static com.khanhdew.testjfx.utils.DAO.loadGame;

public class ButtonPaneController {
@FXML
Expand All @@ -20,6 +27,9 @@ public class ButtonPaneController {
public Label player2Label;
public Button undo;
public Button setting;
public HBox savePane;
public Button saveGame;
public Button loadSavedGame;
Language language = Language.ENGLISH;
BiMap<String, String> languageMap = language.getLanguage();
@FXML
Expand Down Expand Up @@ -52,6 +62,8 @@ public void setGamePane(MainPane mainPane) {
player2.setValue(languageMap.get("human"));
undo.setText(languageMap.get("undo"));
setting.setText(languageMap.get("setting"));
saveGame.setText(languageMap.get("save"));
loadSavedGame.setText(languageMap.get("load"));
newGame.setOnAction(e -> {
try {
int rows = Integer.parseInt(row.getText());
Expand All @@ -73,7 +85,22 @@ public void setGamePane(MainPane mainPane) {
mainPane.unDo();
});
setting.setOnAction(e -> {
BoardHelper.printMatrix(mainPane.matrix);
BoardHelper.printMatrix(mainPane.getMatrix());
});
saveGame.setOnAction(e -> {
DAO.saveGame(mainPane);
});
loadSavedGame.setOnAction(e -> {
// List<MainPane> games = DAO.loadGame(mainPane);
// savePane.getChildren().clear();
// for (MainPane game : games) {
// Button button = new Button("Game " + (games.indexOf(game) + 1));
// button.setOnAction(event -> {
// mainPane.newGame(game.getMatrix().length, game.getMatrix()[0].length, "human", "human");
// });
// savePane.getChildren().add(button);
// }
DAO.loadLastSave(mainPane);
});
}

Expand Down
Loading

0 comments on commit 357174d

Please sign in to comment.