diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 58f9c6e..4910537 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,12 +4,13 @@
-
-
-
-
+
+
+
-
+
+
+
@@ -23,6 +24,13 @@
+
+
+
@@ -44,19 +52,19 @@
- {
+ "keyToString": {
+ "RunOnceActivity.OpenProjectViewOnStart": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "SHARE_PROJECT_CONFIGURATION_FILES": "true",
+ "last_opened_file_path": "/home/william/Dev/Projects",
+ "node.js.detected.package.eslint": "true",
+ "node.js.detected.package.tslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)",
+ "vue.rearranger.settings.migration": "true"
}
-}]]>
+}
@@ -86,11 +94,25 @@
1679255648701
-
+
+
+
+
+ 1679263366439
+
+
+
+ 1679263366439
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/laboratoire4/GameTree.java b/src/main/java/laboratoire4/GameTree.java
index 68e88b2..e48283c 100644
--- a/src/main/java/laboratoire4/GameTree.java
+++ b/src/main/java/laboratoire4/GameTree.java
@@ -5,8 +5,7 @@ import java.util.Collection;
public class GameTree {
private Node root;
-
- public Node buildTree(){
+ public Node buildTree(PusherBoard board){
return null;
}
diff --git a/src/main/java/laboratoire4/Pawn.java b/src/main/java/laboratoire4/Pawn.java
index 10bb29e..ddb9768 100644
--- a/src/main/java/laboratoire4/Pawn.java
+++ b/src/main/java/laboratoire4/Pawn.java
@@ -1,8 +1,56 @@
package laboratoire4;
-public enum Pawn {
- R_PUSHER,
- R_PUSHED,
- B_PUSHER,
- B_PUSHED
+public abstract class Pawn {
+ protected final PawnColor color;
+ protected int col;
+ protected int row;
+
+ public Pawn(PawnColor color, int col, int row) {
+ this.color = color;
+ this.col = col;
+ this.row = row;
+ }
+
+ public PawnColor getColor() {
+ return color;
+ }
+
+ public int getCol() {
+ return col;
+ }
+
+ public int getRow() {
+ return row;
+ }
+
+ public void setCol(int col) {
+ this.col = col;
+ }
+
+ public void setRow(int row) {
+ this.row = row;
+ }
+
+ public abstract boolean isMoveValid(PusherBoard board, PawnMovement movement);
+
+ enum PawnColor {
+ RED,
+ BLACK
+ }
+
+ enum PawnMovement {
+ STRAIGHT(0),
+ LEFT_DIAGONAL(-1),
+ RIGHT_DIAGONAL(1);
+
+ private final int move;
+
+ PawnMovement(int move) {
+ this.move = move;
+ }
+
+ public int getMove() {
+ return move;
+ }
+ }
}
diff --git a/src/main/java/laboratoire4/Pushed.java b/src/main/java/laboratoire4/Pushed.java
new file mode 100644
index 0000000..3438101
--- /dev/null
+++ b/src/main/java/laboratoire4/Pushed.java
@@ -0,0 +1,26 @@
+package laboratoire4;
+
+public class Pushed extends Pawn {
+ public Pushed(PawnColor color, int col, int row) {
+ super(color, col, row);
+ }
+
+ @Override
+ public boolean isMoveValid(PusherBoard game, PawnMovement movement) {
+ Pawn[][] board = game.getBoard();
+ Pawn pusher = null;
+ Pawn to = board[row + 1][col + movement.getMove()];
+
+ if (col > 0 && movement == PawnMovement.RIGHT_DIAGONAL) {
+ pusher = board[row - 1][col - 1];
+ } else if (col < board.length - 1 && movement == PawnMovement.LEFT_DIAGONAL) {
+ pusher = board[row - 1][col + 1];
+ } else if (movement == PawnMovement.STRAIGHT) {
+ pusher = board[row - 1][col];
+ }
+
+ boolean pusherValid = pusher != null;
+ boolean destinationValid = to == null || to.color != this.color;
+ return pusherValid && destinationValid;
+ }
+}
diff --git a/src/main/java/laboratoire4/Pusher.java b/src/main/java/laboratoire4/Pusher.java
new file mode 100644
index 0000000..2fb430c
--- /dev/null
+++ b/src/main/java/laboratoire4/Pusher.java
@@ -0,0 +1,14 @@
+package laboratoire4;
+
+public class Pusher extends Pawn {
+ public Pusher(PawnColor color, int col, int row) {
+ super(color, col, row);
+ }
+
+ @Override
+ public boolean isMoveValid(PusherBoard game, PawnMovement movement) {
+ Pawn to = game.getBoard()[row + 1][col + movement.getMove()];
+
+ return to == null || to.color != this.color;
+ }
+}
diff --git a/src/main/java/laboratoire4/PusherBoard.java b/src/main/java/laboratoire4/PusherBoard.java
index d6d4319..338ab22 100644
--- a/src/main/java/laboratoire4/PusherBoard.java
+++ b/src/main/java/laboratoire4/PusherBoard.java
@@ -1,57 +1,58 @@
package laboratoire4;
public class PusherBoard {
-
private Pawn[][] board;
public PusherBoard() {
this.newGame();
}
- public void newGame(){
+ public void newGame() {
this.board = new Pawn[8][8];
- for(int i = 0 ;i7 || from_col<0)||((from_row >7 || from_row<0))||((to_col >7 || to_col<0))||((to_row >7 || to_row<0))) return false;
+ if ((from_col > 7 || from_col < 0) || ((from_row > 7 || from_row < 0)) || ((to_col > 7 || to_col < 0)) || ((to_row > 7 || to_row < 0)))
+ return false;
//no pawn to move?
Pawn pawnToMove = board[from_row][from_col];
- if(pawnToMove == null) return false;
+ if (pawnToMove == null) return false;
//Pawn at destination is our own pawn?
Pawn destination = board[to_row][to_col];
char source_color = pawnToMove.name().charAt(0);
- if(destination != null){
+ if (destination != null) {
char destination_color = destination.name().charAt(0);
- if(source_color == destination_color) return false;
+ if (source_color == destination_color) return false;
}
//Pawn goes back? or move is in valid range?
- if(source_color == 'R'){
- if(from_row>to_row) return false;
- if(from_row+1 != to_row) return false;
- }else if(source_color == 'B'){
- if(from_row to_row) return false;
+ if (from_row + 1 != to_row) return false;
+ } else if (source_color == 'B') {
+ if (from_row < to_row) return false;
+ if (from_row - 1 != to_row) return false;
}
//PUSHED is in front a PUSHER?
- if(pawnToMove.equals(Pawn.B_PUSHED)){
- if(from_col+1==to_col){
- if(board[from_row+1][from_col+1] != Pawn.B_PUSHER) return false;
- }else if(from_col-1==to_col){
- if(board[from_row-1][from_col+1] != Pawn.B_PUSHER) return false;
- }else if(from_col==to_col){
- if(board[from_row+1][from_col] != Pawn.B_PUSHER) return false;
+ if (pawnToMove.equals(Pawn.B_PUSHED)) {
+ if (from_col + 1 == to_col) {
+ return board[from_row + 1][from_col + 1] == Pawn.B_PUSHER;
+ } else if (from_col - 1 == to_col) {
+ return board[from_row - 1][from_col + 1] == Pawn.B_PUSHER;
+ } else if (from_col == to_col) {
+ return board[from_row + 1][from_col] == Pawn.B_PUSHER;
}
- }else if(pawnToMove.equals(Pawn.R_PUSHED)){
- if(from_col+1 == to_col){
- if(board[from_row+1][from_col-1] != Pawn.R_PUSHER) return false;
- }else if(from_col-1 == to_col){
- if(board[from_row-1][from_col-1] != Pawn.R_PUSHER) return false;
- }else if(from_col == to_col){
- if(board[from_row-1][from_col] != Pawn.R_PUSHER) return false;
+ } else if (pawnToMove.equals(Pawn.R_PUSHED)) {
+ if (from_col + 1 == to_col) {
+ return board[from_row + 1][from_col - 1] == Pawn.R_PUSHER;
+ } else if (from_col - 1 == to_col) {
+ return board[from_row - 1][from_col - 1] == Pawn.R_PUSHER;
+ } else if (from_col == to_col) {
+ return board[from_row - 1][from_col] == Pawn.R_PUSHER;
}
}
-
+
return true;
}
@@ -117,13 +118,12 @@ public class PusherBoard {
return board;
}
- public void printBoard(){
-
- for(int i=7; i>=0; i--){
- for (int j = 0 ; j < this.board.length; j++){
- if(this.board[i][j] != null){
+ public void printBoard() {
+ for (int i = 7; i >= 0; i--) {
+ for (int j = 0; j < this.board.length; j++) {
+ if (this.board[i][j] != null) {
System.out.print(this.board[i][j] + " | ");
- }else{
+ } else {
System.out.print(" | ");
}
}