From 2e10fcdaa0a1daeab90799719e62e0bfe9c6d471 Mon Sep 17 00:00:00 2001 From: Michael Kowalczyk Date: Fri, 22 Nov 2024 12:26:07 -0500 Subject: [PATCH] Day 51 --- .../Chess.class | Bin 7949 -> 0 bytes .../GameState.class | Bin 4621 -> 0 bytes .../Square.class | Bin 842 -> 0 bytes Day 43-51 (chess application)/Chess.class | Bin 0 -> 8884 bytes .../Chess.java | 66 ++++++++++++++++-- Day 43-51 (chess application)/GameState.class | Bin 0 -> 5140 bytes .../GameState.java | 45 ++++++++---- .../Move.class | Bin .../Move.java | 0 Day 43-51 (chess application)/Square.class | Bin 0 -> 1259 bytes .../Square.java | 27 +++++++ .../chess program design.txt | 0 .../control structure notes.txt | 0 .../defensive programming.txt | 0 .../img/Image license copyright notice.txt | 0 .../img/JohnPablok Cburnett Chess Zip.zip | Bin .../img/b_bishop_png_shadow_128px.png | Bin .../img/b_king_png_shadow_128px.png | Bin .../img/b_knight_png_shadow_128px.png | Bin .../img/b_pawn_png_shadow_128px.png | Bin .../img/b_queen_png_shadow_128px.png | Bin .../img/b_rook_png_shadow_128px.png | Bin .../square brown dark_png_shadow_128px.png | Bin .../square brown light_png_shadow_128px.png | Bin .../square gray dark _png_shadow_128px.png | Bin .../square gray light _png_shadow_128px.png | Bin .../img/w_bishop_png_shadow_128px.png | Bin .../img/w_king_png_shadow_128px.png | Bin .../img/w_knight_png_shadow_128px.png | Bin .../img/w_pawn_png_shadow_128px.png | Bin .../img/w_queen_png_shadow_128px.png | Bin .../img/w_rook_png_shadow_128px.png | Bin .../refactoring Move.txt | 0 .../requirements and spec.txt | 0 .../writing good methods.txt | 0 35 files changed, 119 insertions(+), 19 deletions(-) delete mode 100644 Day 43, 45, 46 (chess application design)/Chess.class delete mode 100644 Day 43, 45, 46 (chess application design)/GameState.class delete mode 100644 Day 43, 45, 46 (chess application design)/Square.class create mode 100644 Day 43-51 (chess application)/Chess.class rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/Chess.java (82%) create mode 100644 Day 43-51 (chess application)/GameState.class rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/GameState.java (81%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/Move.class (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/Move.java (100%) create mode 100644 Day 43-51 (chess application)/Square.class rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/Square.java (64%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/chess program design.txt (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/control structure notes.txt (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/defensive programming.txt (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/Image license copyright notice.txt (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/JohnPablok Cburnett Chess Zip.zip (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/b_bishop_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/b_king_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/b_knight_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/b_pawn_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/b_queen_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/b_rook_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/square brown dark_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/square brown light_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/square gray dark _png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/square gray light _png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/w_bishop_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/w_king_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/w_knight_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/w_pawn_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/w_queen_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/img/w_rook_png_shadow_128px.png (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/refactoring Move.txt (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/requirements and spec.txt (100%) rename {Day 43, 45, 46 (chess application design) => Day 43-51 (chess application)}/writing good methods.txt (100%) diff --git a/Day 43, 45, 46 (chess application design)/Chess.class b/Day 43, 45, 46 (chess application design)/Chess.class deleted file mode 100644 index 3fffbeef59a9c59dbcb3b84c38140e1bcf68fb87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7949 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 diff --git a/Day 43, 45, 46 (chess application design)/Square.class b/Day 43, 45, 46 (chess application design)/Square.class deleted file mode 100644 index 6f730945163856e990bf5abc9364a57025b397c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 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 Oi7n>ZB?dMaxcuMU`fq#y literal 0 HcmV?d00001 diff --git a/Day 43, 45, 46 (chess application design)/Chess.java b/Day 43-51 (chess application)/Chess.java similarity index 82% rename from Day 43, 45, 46 (chess application design)/Chess.java rename to Day 43-51 (chess application)/Chess.java index 77784a8..7db784c 100644 --- a/Day 43, 45, 46 (chess application design)/Chess.java +++ b/Day 43-51 (chess application)/Chess.java @@ -14,6 +14,12 @@ import javafx.scene.input.*; import javafx.scene.image.*; import javafx.geometry.*; +//TODO: +// Prevent moving into check +// Add castling +// Add en passant +// Give feedback for check, checkmate, and stalemate. + //Main class and GUI public class Chess extends Application { @@ -27,6 +33,7 @@ public class Chess extends Application { private GraphicsContext graphics; private TextArea moveHistoryTextArea; + private Label feedback; //Load images private static final Image W_ROOK = new Image("img/w_rook_png_shadow_128px.png"); @@ -71,14 +78,20 @@ public class Chess extends Application { hb.setAlignment(Pos.CENTER); root.getChildren().add(hb); + //Add a label for feedback + feedback = new Label(""); + HBox hb2 = new HBox(20, feedback); + hb2.setAlignment(Pos.CENTER); + root.getChildren().add(hb2); + //Set up buttons Button undo = new Button("Undo"); Button reset = new Button("Reset"); Button aiMove = new Button("AI move"); - HBox h = new HBox(20, undo, reset, aiMove); - h.setAlignment(Pos.CENTER); - h.setPadding(new Insets(10,10,10,10)); - root.getChildren().add(h); + HBox hb3 = new HBox(20, undo, reset, aiMove); + hb3.setAlignment(Pos.CENTER); + hb3.setPadding(new Insets(10,10,10,10)); + root.getChildren().add(hb3); //Set up empty move history, game history, notation history. gameStateHistory = new ArrayList(); @@ -107,10 +120,25 @@ public class Chess extends Application { } private void updateScreen() { + //Draw the board for(int x = 0; x < 8; x++) { for(int y = 0; y < 8; y++) { graphics.setFill((x + y) % 2 == 0 ? Color.BURLYWOOD : Color.FORESTGREEN); graphics.fillRect(50*x, 50*y, 50, 50); + } + } + + //Show the last move made in red + if (!moveHistory.isEmpty()) { + graphics.setFill(new Color(1, 0, 0, .6)); + Move m = moveHistory.get(moveHistory.size() - 1); + graphics.fillRect(50*m.getSourceCol(), 50*m.getSourceRow(), 50, 50); + graphics.fillRect(50*m.getDestCol(), 50*m.getDestRow(), 50, 50); + } + + //Draw the pieces + for(int x = 0; x < 8; x++) { + for(int y = 0; y < 8; y++) { Square s = board().getSquare(x, y); if ( s.getType() == Square.PAWN && s.isWhite()) graphics.drawImage(W_PAWN, 50*x, 50*y, 50, 50); if ( s.getType() == Square.PAWN && !s.isWhite()) graphics.drawImage(B_PAWN, 50*x, 50*y, 50, 50); @@ -124,8 +152,18 @@ public class Chess extends Application { if ( s.getType() == Square.QUEEN && !s.isWhite()) graphics.drawImage(B_QUEEN, 50*x, 50*y, 50, 50); if ( s.getType() == Square.KING && s.isWhite()) graphics.drawImage(W_KING, 50*x, 50*y, 50, 50); if ( s.getType() == Square.KING && !s.isWhite()) graphics.drawImage(B_KING, 50*x, 50*y, 50, 50); + } } + + //Highlight the selected square (if any) in yellow + if (clickRow != null) { + graphics.setFill(new Color(1, 1, 0, .5)); + graphics.fillRect(50*clickCol, 50*clickRow, 50, 50); + } + + //Update feedback + feedback.setText(board().getFeedback()); } private GameState board() { @@ -134,8 +172,6 @@ public class Chess extends Application { //Reset to the intial game position. public void reset(ActionEvent e) { - System.out.println(board().getAllPossibleMoves()); - //Clear out all the histories gameStateHistory = new ArrayList(); gameStateHistory.add(new GameState()); //Set up the initial board @@ -173,6 +209,8 @@ public class Chess extends Application { //Refresh the board updateScreen(); + + writeMoveHistoryForIndex(moveNotationHistory.size()-1); } //For the human moving @@ -195,7 +233,6 @@ public class Chess extends Application { //Undo button for the most recent move public void undo(ActionEvent e) { - //Pop those 3 history object things and update the GUI. if (gameStateHistory.size() <= 1) return; //can't pop the initial state. //Pop those 3 history object things and update the GUI. @@ -203,7 +240,22 @@ public class Chess extends Application { moveHistory.remove(moveHistory.size() - 1); moveNotationHistory.remove(moveNotationHistory.size() - 1); clickRow = clickCol = null; + refreshMoveHistoryDisplay(); updateScreen(); } + private void refreshMoveHistoryDisplay() { + moveHistoryTextArea.setText(""); + for(int i = 0; i < moveHistory.size(); i++) { + writeMoveHistoryForIndex(i); + } + } + + private void writeMoveHistoryForIndex(int ply) { + GameState g = gameStateHistory.get(ply); + Move m = moveHistory.get(ply); + if (g.isWhitesTurn()) moveHistoryTextArea.appendText("\n" + (ply/2+1) +". "+m); + else moveHistoryTextArea.appendText(" " +m); + } + } \ No newline at end of file diff --git a/Day 43-51 (chess application)/GameState.class b/Day 43-51 (chess application)/GameState.class new file mode 100644 index 0000000000000000000000000000000000000000..31915711db05c8097f0611c8d5e354c5f69b20eb GIT binary patch literal 5140 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 literal 0 HcmV?d00001 diff --git a/Day 43, 45, 46 (chess application design)/GameState.java b/Day 43-51 (chess application)/GameState.java similarity index 81% rename from Day 43, 45, 46 (chess application design)/GameState.java rename to Day 43-51 (chess application)/GameState.java index 41b255b..c14b0d7 100644 --- a/Day 43, 45, 46 (chess application design)/GameState.java +++ b/Day 43-51 (chess application)/GameState.java @@ -47,6 +47,14 @@ public class GameState { boardSquares[move.getDestIndex()] = new Square(boardSquares[move.getSourceIndex()]); boardSquares[move.getSourceIndex()] = new Square(Square.EMPTY); + //Queening (no underpromotion for now) + if ((move.getDestRow() == 0 || move.getDestRow() == 7) && boardSquares[move.getDestIndex()].getType() == Square.PAWN) { + boolean w = boardSquares[move.getDestIndex()].isWhite(); + boardSquares[move.getDestIndex()] = new Square(Square.QUEEN, w); //Make that pawn a queen + } + + boardSquares[move.getDestIndex()].setHasMoved(); //For knowledge about moving pawns two squares and castling. + } @@ -71,37 +79,50 @@ public class GameState { for(int index = 0; index < boardSquares.length; index++) { int type = boardSquares[index].getType(); boolean w = boardSquares[index].isWhite(); + boolean pieceMoved = boardSquares[index].isMoved(); if (type == Square.OUT_OF_BOUNDS) continue; if (type == Square.EMPTY) continue; //For each square, find all possible places that piece can move to. - if (type == Square.KING) moves.addAll(findAllMovesFor(index, new int[] {1,-1,12,-12,13,-13,11,-11}, false)); - if (type == Square.QUEEN) moves.addAll(findAllMovesFor(index, new int[] {1,-1,12,-12,13,-13,11,-11}, true)); - if (type == Square.BISHOP) moves.addAll(findAllMovesFor(index, new int[] {13,-13,11,-11}, true)); - if (type == Square.ROOK) moves.addAll(findAllMovesFor(index, new int[] {1,-1,12,-12}, true)); - if (type == Square.KNIGHT) moves.addAll(findAllMovesFor(index, new int[] {10,14,23,25,-10,-14,-23,-25}, false)); - if (type == Square.PAWN && w) moves.addAll(findAllMovesFor(index, new int[] {12}, false)); - if (type == Square.PAWN && !w) moves.addAll(findAllMovesFor(index, new int[] {-12}, false)); + if (type == Square.KING) moves.addAll(findAllMovesFor(index, new int[] {1,-1,12,-12,13,-13,11,-11}, 1, true, true)); + if (type == Square.QUEEN) moves.addAll(findAllMovesFor(index, new int[] {1,-1,12,-12,13,-13,11,-11}, 99, true, true)); + if (type == Square.BISHOP) moves.addAll(findAllMovesFor(index, new int[] {13,-13,11,-11}, 99, true, true)); + if (type == Square.ROOK) moves.addAll(findAllMovesFor(index, new int[] {1,-1,12,-12}, 99, true, true)); + if (type == Square.KNIGHT) moves.addAll(findAllMovesFor(index, new int[] {10,14,23,25,-10,-14,-23,-25}, 1, true, true)); + + //white + if (type == Square.PAWN && w && pieceMoved) moves.addAll(findAllMovesFor(index, new int[] {12}, 1, true, false)); + if (type == Square.PAWN && w && !pieceMoved) moves.addAll(findAllMovesFor(index, new int[] {12}, 2, true, false)); + if (type == Square.PAWN && w) moves.addAll(findAllMovesFor(index, new int[] {11, 13}, 1, false, true)); + + //black + if (type == Square.PAWN && !w && pieceMoved) moves.addAll(findAllMovesFor(index, new int[] {-12}, 1, true, false)); + if (type == Square.PAWN && !w && !pieceMoved) moves.addAll(findAllMovesFor(index, new int[] {-12}, 2, true, false)); + if (type == Square.PAWN && !w) moves.addAll(findAllMovesFor(index, new int[] {-11, -13}, 1, false, true)); } return moves; } - private ArrayList findAllMovesFor(int index, int[] directions, boolean canMoveMultipleSquares) { + ///movementDistance is the number of times that piece can move in the given directions. + private ArrayList findAllMovesFor(int index, int[] directions, int movementDistance, boolean canMove, boolean canCapture) { ArrayList moves = new ArrayList(); if (boardSquares[index].isWhite() != isWhitesTurn) return moves; //don't move other person's pieces! //loop through the directions, see if they work - return the resulting arraylist. for(int dir : directions) { int destIndex = index; + int numMoves = movementDistance; do { destIndex += dir; int type = boardSquares[destIndex].getType(); if (type == Square.OUT_OF_BOUNDS) break; - if (type == Square.EMPTY || boardSquares[destIndex].isWhite() != isWhitesTurn) { + if (type == Square.EMPTY && canMove || + type != Square.EMPTY && type != Square.OUT_OF_BOUNDS && boardSquares[destIndex].isWhite() != isWhitesTurn && canCapture) { moves.add(new Move(index, destIndex)); } - } while(boardSquares[destIndex].getType() == Square.EMPTY && canMoveMultipleSquares); + numMoves--; + } while(boardSquares[destIndex].getType() == Square.EMPTY && numMoves > 0); } return moves; @@ -111,8 +132,8 @@ public class GameState { return isWhitesTurn; } - // returns something like "checkmate", "stalemate", etc. + // TODO: should also include information regarding check, checkmate, and stalemate. public String getFeedback() { - return null; + return isWhitesTurn ? "White's turn" : "Black's turn"; } } diff --git a/Day 43, 45, 46 (chess application design)/Move.class b/Day 43-51 (chess application)/Move.class similarity index 100% rename from Day 43, 45, 46 (chess application design)/Move.class rename to Day 43-51 (chess application)/Move.class diff --git a/Day 43, 45, 46 (chess application design)/Move.java b/Day 43-51 (chess application)/Move.java similarity index 100% rename from Day 43, 45, 46 (chess application design)/Move.java rename to Day 43-51 (chess application)/Move.java diff --git a/Day 43-51 (chess application)/Square.class b/Day 43-51 (chess application)/Square.class new file mode 100644 index 0000000000000000000000000000000000000000..8af182930736c89d3e5b94556a7de19fa8d55213 GIT binary patch literal 1259 zcmZuvTTc^V5S?#tEo~_`MK0w|p)3Ld3W`P}SfByA#TJOXkOeldq_*1KlK7u|F|i@> z!5`p{QqO!XWmD+G%y;H;=FDvW{QdQth*oJWLSb5JqYy2#dCukqo0SO6YKUHj=#`*$ z>!5IAZJw-K2iXsKK_Y|LM!DqqcF8}qi&aPcho2xly_YL|Qo&7vwA}lnEWd>yV<(&0 z+Ac6sfYvklZ7at}Mcqfs+Tphbg8hSZS~lrO>}0ZAoG|eAzkP88g_2?^5tsf%-M8VN3_m2e`R0WF&d@m7!6V+MhO~<(J-44Hlvipj<>Trxq6{! zmo65p(<|r9r!joOFs>J)erlr#zDN{Ek+?m8NlJ|r_G*n(_F9cJ_Ii!< zA1D+w0XskjY%ggL6Qe$2nF&NEF`Vfq8}t*TO8SsFsNRrqM-Y+WVbF}ohGe55jX3`c z`=y>i7L#BlkfX7=r(p~l#&PlqieqXIC81^tWK%TVpd1IK0Hx8=UzadLI+@6iP^wWs z1kd%liLJlmQD51R!8zC&*}&JE1vOtUYT`_~3AyUsigCHfBKVi^L6*@t`+z3C?_Ez_ z(+YZ4QUCNoO