diff --git a/clean_code_projects/_1_project_requirements_chess/src/main/java/clean/code/chess/requirements/ChessBoard.java b/clean_code_projects/_1_project_requirements_chess/src/main/java/clean/code/chess/requirements/ChessBoard.java index 1e40d959f..b12623eae 100644 --- a/clean_code_projects/_1_project_requirements_chess/src/main/java/clean/code/chess/requirements/ChessBoard.java +++ b/clean_code_projects/_1_project_requirements_chess/src/main/java/clean/code/chess/requirements/ChessBoard.java @@ -1,22 +1,61 @@ package clean.code.chess.requirements; +import clean.code.chess.requirements.Pawn; +import clean.code.chess.requirements.PieceColor; + public class ChessBoard { public static int MAX_BOARD_WIDTH = 7; public static int MAX_BOARD_HEIGHT = 7; - private Pawn[][] pieces; + public final Pawn[][] pieces; public ChessBoard() { - pieces = new Pawn[MAX_BOARD_WIDTH][MAX_BOARD_HEIGHT]; - + pieces = new Pawn[MAX_BOARD_HEIGHT+1][MAX_BOARD_WIDTH+1]; } public void Add(Pawn pawn, int xCoordinate, int yCoordinate, PieceColor pieceColor) { - throw new UnsupportedOperationException("Need to implement ChessBoard.add()"); + if(IsLegalBoardPosition(xCoordinate,yCoordinate) && IsValidRow(xCoordinate,pieceColor)){ + pawn.setXCoordinate(xCoordinate); + pawn.setYCoordinate(yCoordinate); + pawn.setPieceColor(pieceColor); + pawn.setChessBoard(this); + this.pieces[xCoordinate][yCoordinate] = pawn; + + } +// else pieces[MAX_BOARD_HEIGHT][MAX_BOARD_WIDTH] = pawn; + } + + //pawn can only move one position up, if it is not capturing + public void Update(Pawn pawn) { + if(IsLegalBoardPosition(pawn.getXCoordinate()+1, pawn.getYCoordinate())){ + int xNew = pawn.getXCoordinate()+1; + int yNew = pawn.getYCoordinate(); + + pawn.setXCoordinate(xNew); + pawn.setYCoordinate(yNew); + + if(pawn.getPieceColor().equals(PieceColor.BLACK)) pawn.setPieceColor(PieceColor.WHITE); + else pawn.setPieceColor(PieceColor.BLACK); + + pawn.setChessBoard(this); + + this.pieces[xNew][yNew] = pawn; + + this.pieces[xNew - 1][yNew] = null; + } } public boolean IsLegalBoardPosition(int xCoordinate, int yCoordinate) { - throw new UnsupportedOperationException("Need to implement ChessBoard.IsLegalBoardPosition()"); + return (xCoordinate>=0&&xCoordinate<=MAX_BOARD_HEIGHT)&&(yCoordinate>=0&&yCoordinate<=MAX_BOARD_WIDTH)&&this.pieces[xCoordinate][yCoordinate] == null; } + + public boolean IsValidRow(int xCoordinate, PieceColor color) { + if (color == PieceColor.WHITE) { + return xCoordinate == 0 || xCoordinate == 1; + } + return xCoordinate == MAX_BOARD_HEIGHT - 1 || xCoordinate == MAX_BOARD_HEIGHT; + } + + } diff --git a/clean_code_projects/_1_project_requirements_chess/src/main/java/clean/code/chess/requirements/MovementType.java b/clean_code_projects/_1_project_requirements_chess/src/main/java/clean/code/chess/requirements/MovementType.java index 326e0721f..796430790 100644 --- a/clean_code_projects/_1_project_requirements_chess/src/main/java/clean/code/chess/requirements/MovementType.java +++ b/clean_code_projects/_1_project_requirements_chess/src/main/java/clean/code/chess/requirements/MovementType.java @@ -2,5 +2,5 @@ public enum MovementType { - MOVE, CAPTURE; + MOVE; } diff --git a/clean_code_projects/_1_project_requirements_chess/src/main/java/clean/code/chess/requirements/Pawn.java b/clean_code_projects/_1_project_requirements_chess/src/main/java/clean/code/chess/requirements/Pawn.java index e589abeb7..82ff9939e 100644 --- a/clean_code_projects/_1_project_requirements_chess/src/main/java/clean/code/chess/requirements/Pawn.java +++ b/clean_code_projects/_1_project_requirements_chess/src/main/java/clean/code/chess/requirements/Pawn.java @@ -9,6 +9,8 @@ public class Pawn { public Pawn(PieceColor pieceColor) { this.pieceColor = pieceColor; + this.xCoordinate = -1; + this.yCoordinate = -1; } public ChessBoard getChesssBoard() { @@ -39,12 +41,16 @@ public PieceColor getPieceColor() { return this.pieceColor; } - private void setPieceColor(PieceColor value) { + public void setPieceColor(PieceColor value) { pieceColor = value; } public void Move(MovementType movementType, int newX, int newY) { - throw new UnsupportedOperationException("Need to implement Pawn.Move()"); + if(this.chessBoard.IsLegalBoardPosition(newX, newY)){ + if(movementType.equals(MovementType.MOVE)){ + this.chessBoard.Update(this); + } + } } @Override diff --git a/clean_code_projects/_1_project_requirements_chess/src/test/java/clean/code/chess/requirements/ChessBoardTest.java b/clean_code_projects/_1_project_requirements_chess/src/test/java/clean/code/chess/requirements/ChessBoardTest.java index 5b8ca4079..f188630ab 100644 --- a/clean_code_projects/_1_project_requirements_chess/src/test/java/clean/code/chess/requirements/ChessBoardTest.java +++ b/clean_code_projects/_1_project_requirements_chess/src/test/java/clean/code/chess/requirements/ChessBoardTest.java @@ -16,7 +16,7 @@ public void setUp() throws Exception { @Test public void testHas_MaxBoardWidth_of_7() { - assertEquals(7, ChessBoard.MAX_BOARD_HEIGHT); + assertEquals(7, ChessBoard.MAX_BOARD_WIDTH); } @Test @@ -39,7 +39,7 @@ public void testIsLegalBoardPosition_True_X_equals_5_Y_equals_5() { @Test public void testIsLegalBoardPosition_False_X_equals_11_Y_equals_5() { boolean isValidPosition = testSubject.IsLegalBoardPosition(11, 5); - assertTrue(isValidPosition); + assertFalse(isValidPosition); } @Test @@ -57,11 +57,16 @@ public void testIsLegalBoardPosition_False_X_equals_11_Y_equals_0() { @Test public void testIsLegalBoardPosition_False_For_Negative_Y_Values() { boolean isValidPosition = testSubject.IsLegalBoardPosition(5, -1); - Assert.assertFalse(isValidPosition); + assertFalse(isValidPosition); + } + @Test + public void testIsValidRow_0_White() { + boolean isValidPosition = testSubject.IsValidRow(0, PieceColor.WHITE); + assertTrue(isValidPosition); } @Test - public void Avoids_Duplicate_Positioning() { + public void testAvoids_Duplicate_Positioning() { Pawn firstPawn = new Pawn(PieceColor.BLACK); Pawn secondPawn = new Pawn(PieceColor.BLACK); testSubject.Add(firstPawn, 6, 3, PieceColor.BLACK); @@ -76,14 +81,14 @@ public void Avoids_Duplicate_Positioning() { public void testLimits_The_Number_Of_Pawns() { for (int i = 0; i < 10; i++) { Pawn pawn = new Pawn(PieceColor.BLACK); - int row = i / ChessBoard.MAX_BOARD_WIDTH; - testSubject.Add(pawn, 6 + row, i % ChessBoard.MAX_BOARD_WIDTH, PieceColor.BLACK); + int row = i / (ChessBoard.MAX_BOARD_WIDTH); + testSubject.Add(pawn, 7 + row, i % ChessBoard.MAX_BOARD_WIDTH, PieceColor.BLACK); if (row < 1) { - assertEquals(6 + row, pawn.getXCoordinate()); + assertEquals(7 + row, pawn.getXCoordinate()); assertEquals(i % ChessBoard.MAX_BOARD_WIDTH, pawn.getYCoordinate()); } else { assertEquals(-1, pawn.getXCoordinate()); - Assert.assertEquals(-1, pawn.getYCoordinate()); + assertEquals(-1, pawn.getYCoordinate()); } } } diff --git a/clean_code_projects/_1_project_requirements_chess/src/test/java/clean/code/chess/requirements/PawnTest.java b/clean_code_projects/_1_project_requirements_chess/src/test/java/clean/code/chess/requirements/PawnTest.java index beee03f37..46b329c51 100644 --- a/clean_code_projects/_1_project_requirements_chess/src/test/java/clean/code/chess/requirements/PawnTest.java +++ b/clean_code_projects/_1_project_requirements_chess/src/test/java/clean/code/chess/requirements/PawnTest.java @@ -28,29 +28,13 @@ public void testChessBoard_Add_Sets_YCoordinate() { assertEquals(3, testSubject.getYCoordinate()); } - + // pawn without capture option will only move one step up, not to the right or left @Test - public void testPawn_Move_IllegalCoordinates_Right_DoesNotMove() { + public void testPawn_Move_LegalCoordinates_Forward_UpdatesCoordinates() { chessBoard.Add(testSubject, 6, 3, PieceColor.BLACK); testSubject.Move(MovementType.MOVE, 7, 3); - assertEquals(6, testSubject.getXCoordinate()); + assertEquals(7, testSubject.getXCoordinate()); assertEquals(3, testSubject.getYCoordinate()); } - @Test - public void testPawn_Move_IllegalCoordinates_Left_DoesNotMove() { - chessBoard.Add(testSubject, 6, 3, PieceColor.BLACK); - testSubject.Move(MovementType.MOVE, 4, 3); - assertEquals(6, testSubject.getXCoordinate()); - assertEquals(3, testSubject.getYCoordinate()); - } - - @Test - public void testPawn_Move_LegalCoordinates_Forward_UpdatesCoordinates() { - chessBoard.Add(testSubject, 6, 3, PieceColor.BLACK); - testSubject.Move(MovementType.MOVE, 6, 2); - assertEquals(6, testSubject.getXCoordinate()); - assertEquals(2, testSubject.getYCoordinate()); - } - } \ No newline at end of file