Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

public enum MovementType {

MOVE, CAPTURE;
MOVE;
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ public class Pawn {

public Pawn(PieceColor pieceColor) {
this.pieceColor = pieceColor;
this.xCoordinate = -1;
this.yCoordinate = -1;
}

public ChessBoard getChesssBoard() {
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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);
Expand All @@ -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());
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}

}