From c996eeb40a0f2a31b577f8e4a83a46d38d1c711c Mon Sep 17 00:00:00 2001 From: Chad Estioco Date: Thu, 23 Oct 2014 01:49:14 +0800 Subject: [PATCH] Passing test of whether legalMovesFilter can take castling into account. --- .../kode/chesstemplar/GameArbiter.java | 53 ++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/skytreader/kode/chesstemplar/GameArbiter.java b/src/main/java/net/skytreader/kode/chesstemplar/GameArbiter.java index ef62a63..22b603d 100644 --- a/src/main/java/net/skytreader/kode/chesstemplar/GameArbiter.java +++ b/src/main/java/net/skytreader/kode/chesstemplar/GameArbiter.java @@ -158,14 +158,63 @@ public boolean isEndgame(){ a check and, in the case of the King, add the possibility of castles. TODO I think this should be made protected? + TODO Refactor with can*Castle methods */ public Set legalMovesFilter(ChessPiece cp, int r, int c) throws NotMeException{ Set pieceMoves = cp.getMoves(r, c, board); if(WHITE_KING.equals(cp) && canWhiteKingCastle()){ - // add possible castle moves + // Check if the king side is clear + boolean kingSideClear = true; + for(int i = 5; i < 7; i++){ + if(board.getPieceAt(7, i) != null){ + kingSideClear = false; + break; + } + } + + if(kingSideClear){ + pieceMoves.add(new Point(7, 6)); + } + + boolean queenSideClear = true; + // Check if the queen side is clear + for(int i = 1; i < 5; i++){ + if(board.getPieceAt(7, i) != null){ + queenSideClear = false; + break; + } + } + + if(queenSideClear){ + pieceMoves.add(new Point(7, 2)); + } } else if(BLACK_KING.equals(cp) && canBlackKingCastle()){ - // add possible castle moves + // Check if the king side is clear + boolean kingSideClear = true; + for(int i = 5; i < 7; i++){ + if(board.getPieceAt(0, i) != null){ + kingSideClear = false; + break; + } + } + + if(kingSideClear){ + pieceMoves.add(new Point(0, 6)); + } + + boolean queenSideClear = true; + // Check if the queen side is clear + for(int i = 1; i < 5; i++){ + if(board.getPieceAt(0, i) != null){ + queenSideClear = false; + break; + } + } + + if(queenSideClear){ + pieceMoves.add(new Point(0, 2)); + } } return pieceMoves;