# HG changeset patch # User Jaroslav Tulach # Date 1637593111 -3600 # Node ID cea2063fd0f9ad66ed239a22c00375acfbb84320 # Parent 64b15a1fb456449ba7b702e43a836e0a68337567 Rochade shall move the rock as well diff -r 64b15a1fb456 -r cea2063fd0f9 chess/src/main/java/org/apidesign/html/demo/chess/BoardModel.java --- a/chess/src/main/java/org/apidesign/html/demo/chess/BoardModel.java Mon Nov 22 15:40:28 2021 +0100 +++ b/chess/src/main/java/org/apidesign/html/demo/chess/BoardModel.java Mon Nov 22 15:58:31 2021 +0100 @@ -104,15 +104,32 @@ b.getMoves().add(newMove); b.setPendingMove(newMove); - data.setPieceColor(previoslySelected.getPieceColor()); - data.setPiece(previoslySelected.getPiece()); - previoslySelected.setPiece(null); - previoslySelected.setPieceColor(null); + if (PieceType.KING == previoslySelected.getPiece() && previoslySelected.getX() == 'E' && previoslySelected.getY() == 1 || previoslySelected.getY() == 8) { + if (data.getX() == 'G') { + movePieceFromTo( + findSquare(b, 'F', data.getY()), + findSquare(b, 'H', data.getY()) + ); + } else if (data.getX() == 'C') { + movePieceFromTo( + findSquare(b, 'D', data.getY()), + findSquare(b, 'A', data.getY()) + ); + } + } + movePieceFromTo(data, previoslySelected); b.setTurn(b.getTurn() == Color.W ? Color.B : Color.W); Rules.computeAccessible(b, null); } } } + + private static void movePieceFromTo(Square newSquare, Square oldSquare) { + newSquare.setPieceColor(oldSquare.getPieceColor()); + newSquare.setPiece(oldSquare.getPiece()); + oldSquare.setPiece(null); + oldSquare.setPieceColor(null); + } static class NextMove extends TimerTask { private static final Timer T = new Timer("Animate moves"); diff -r 64b15a1fb456 -r cea2063fd0f9 chess/src/test/java/org/apidesign/html/demo/chess/BoardModelTest.java --- a/chess/src/test/java/org/apidesign/html/demo/chess/BoardModelTest.java Mon Nov 22 15:40:28 2021 +0100 +++ b/chess/src/test/java/org/apidesign/html/demo/chess/BoardModelTest.java Mon Nov 22 15:58:31 2021 +0100 @@ -355,6 +355,12 @@ BoardModel.selected(b, e1); assertTrue(g1.isAccessible(), "Can do 0-0"); + + BoardModel.selected(b, g1); + + assertNull(e1.getPiece()); + assertEquals(g1.getPiece(), PieceType.KING); + assertEquals(f1.getPiece(), PieceType.ROCK); } @Test public void allowSmallRochadeForBlack() {