@Override public MoveResult makeMove(HantoPieceType pieceType, HantoCoordinate from, HantoCoordinate to) throws HantoException { final HexCoordinate src = HexCoordinate.extractHexCoordinate(from); final HexCoordinate dest = HexCoordinate.extractHexCoordinate(to); // Verify the source piece is valid, if provided. rules.doPreMoveChecks(pieceType, src, dest); // Now that we know we can make the move, do it for realsies. rules.actuallyMakeMove(pieceType, src, dest); // Make sure that move we just did was valid // (We're assuming that just throwing an exception is okay here, // the incorrect move is applied and NOT changed for now.) rules.doPostMoveChecks(dest); // Finish move completeMove(); // Return the result of the move return rules.evaluateMoveResult(); }
/** * Add a coordinate to the board * * <p>TODO: Move this to the test harness * * @param color color of new piece * @param type type of new piece * @param c location of new piece */ public void addToBoard(HantoPlayerColor color, HantoPieceType type, HantoCoordinate c) { final HexCoordinate hc = HexCoordinate.extractHexCoordinate(c); final HantoPiece p = new HantoPiece(color, type, hc); state.board.addPieceAt(p, hc); }
/** * @return true if a piece exists on the board * @param c coordinate to check for a piece * <p>TODO: Move this to the test harness? * <p>NOTE: this name makes sense to me. I don't understand how the suggestions in CodePro's * audit rule could make more sense here. */ public boolean doesPieceExistAt(HantoCoordinate c) { final HexCoordinate h = HexCoordinate.extractHexCoordinate(c); return state.getBoard().getPieceAt(h) != null; }