/* * Pawn.java * * Created on February 10, 2007, 6:42 PM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package chess; /** * * @author Stanislav Hromek */ public class Pawn extends Piece { private static final String name = "pawn"; /** Creates a new instance of Pawn */ public Pawn(String pieceColor) { this.pieceColor = pieceColor; } boolean isRoadOk(Board board, String movePieceFrom, String movePieceTo) { // get squares between (vertical) if(board.isVertical(movePieceFrom, movePieceTo)){ Square[] squares = board.getSquaresVertical(movePieceFrom, movePieceTo); for (int i = 0; i < squares.length; i++) { if(squares[i].getPiece() != null) return false; } } else assert false; return true; } /** * this is little bit complicated * pawn can move: * forwards one square * forwards two squares if in starting position * can take opposite piece to the sides * can take opposite pawn if it moved two squares on the middle square */ boolean possibleToMoveToEndSquare(Board board, String movePieceFrom, String movePieceTo) { // test starting square gave, that on movePieceFrom is pawn (we can get his color) String color = board.getSquare(movePieceFrom).getPiece().getPieceColor(); if(board.isOneForward(color, movePieceFrom, movePieceTo)){ // if ending square is empty if(board.getSquare(movePieceTo).isEmpty()){ return true; } } else if(board.isTwoForward(color, movePieceFrom, movePieceTo)){ // road to ending square is tested in isRoadOk if(board.getSquare(movePieceTo).isEmpty()){ return true; } } else if(board.isExchange(color, movePieceFrom, movePieceTo)){ if( board.getSquare(movePieceTo).isEmpty() ){ return false; } else{ if(board.getSquare(movePieceTo).getPiece().isOppositeColor(color)){ return true; } } } else if(board.isExchange2(color, movePieceFrom, movePieceTo)){ return true; } return false; } public String getName() { return name; } }