// move soldier to the target position and change the last position to empty public void basicMove(Coords start, Coords end) { SoldierBase temp = board[start.getY(), start.getX()]; board[start.getY(), start.getX()] = new EmptySoldier(" ", " ", false, start.getY(), start.getX()); temp.setY(end.getY()); temp.setX(end.getX()); board[end.getY(), end.getX()] = temp; board[end.getY(), end.getX()].isMoved(true); }
public void doEnPassant(Coords start, Coords end) { basicMove(start, end); if (WhiteTurn()) { removeObj(new Coords(end.getY() + 1, end.getX())); } else { removeObj(new Coords(end.getY() - 1, end.getX())); } }
public bool StraightLines(ChessBoard board, Coords start, Coords end) { if (start.getX() == end.getX()) { if (start.getY() < end.getY()) { for (int i = start.getY() + 1; i < end.getY(); i++) { if (board.GetSoldierByPosition(new Coords(i, start.getX())).getColor() != " ") { return(false); // If there is one (not empty) movement isn't allowed } } } else { for (int i = start.getY() - 1; i > end.getY(); i--) { if (board.GetSoldierByPosition(new Coords(i, start.getX())).getColor() != " ") { return(false); } } } return(canIeat(board, start, end) || board.GetSoldierByPosition(end).getColor() == " "); } else if (start.getY() == end.getY()) { if (start.getX() < end.getX()) { for (int i = start.getX() + 1; i < end.getX(); i++) { if (board.GetSoldierByPosition(new Coords(start.getY(), i)).getColor() != " ") { return(false); } } } else { for (int i = start.getX() - 1; i > end.getX(); i--) { if (board.GetSoldierByPosition(new Coords(start.getY(), i)).getColor() != " ") { return(false); } } } return(canIeat(board, start, end) || board.GetSoldierByPosition(end).getColor() == " "); } return(false); }
public bool DiagonalMoves(ChessBoard board, Coords start, Coords end) { if (Math.Abs(start.getX() - end.getX()) == Math.Abs(start.getY() - end.getY())) { if (start.getY() > end.getY() && start.getX() > end.getX()) {//y--x-- for (int tempStartY = start.getY() - 1, tempStartX = start.getX() - 1; tempStartY > end.getY() && tempStartX > end.getX(); tempStartY--, tempStartX--) { if (board.GetSoldierByPosition(new Coords(tempStartY, tempStartX)).getColor() != " ") { return(false); // If there is one (not empty) movement isn't allowed } } } else if (start.getY() > end.getY() && start.getX() < end.getX()) {//y--x++ for (int tempStartY = start.getY() - 1, tempStartX = start.getX() + 1; tempStartY > end.getY() && tempStartX < end.getX(); tempStartY--, tempStartX++) { if (board.GetSoldierByPosition(new Coords(tempStartY, tempStartX)).getColor() != " ") { return(false); // If there is one (not empty) movement isn't allowed } } } else if (start.getY() < end.getY() && start.getX() < end.getX()) {//y++x++ for (int tempStartY = start.getY() + 1, tempStartX = start.getX() + 1; tempStartY > end.getY() && tempStartX < end.getX(); tempStartY++, tempStartX++) { if (board.GetSoldierByPosition(new Coords(tempStartY, tempStartX)).getColor() != " ") { return(false); // If there is one (not empty) movement isn't allowed } } } else if (start.getY() < end.getY() && start.getX() > end.getX()) {//y++x-- for (int tempStartY = start.getY() + 1, tempStartX = start.getX() - 1; tempStartY > end.getY() && tempStartX < end.getX(); tempStartY++, tempStartX--) { if (board.GetSoldierByPosition(new Coords(tempStartY, tempStartX)).getColor() != " ") { return(false); // If there is one (not empty) movement isn't allowed } } } return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } return(false); }
//if input between 0 to 7 public bool ValidInput(Coords start, Coords end) { if (start.getY() >= 0 && start.getY() <= 7 && start.getX() >= 0 && start.getX() <= 7 && end.getY() >= 0 && end.getY() <= 7 && end.getX() >= 0 && end.getX() <= 7) { row = start.getY(); column = start.getX(); targetRow = end.getY(); targetColumn = end.getX(); return(true); } return(false); }
public void doCastlingMove(Coords start, Coords end) { //temp soldier for the king to clear the move for the rook if (start.getX() < end.getX() && GetSoldierByPosition(start).getColor() == "W") { SoldierBase tempKing = board[start.getY(), start.getX()]; board[start.getY(), start.getX()] = new EmptySoldier(" ", " ", false, start.getY(), start.getX()); basicMove(new Coords(7, 7), new Coords(7, 5)); tempKing.setY(start.getY()); tempKing.setX(start.getX() + 2); board[start.getY(), start.getX() + 2] = tempKing; } else if (start.getX() < end.getX() && GetSoldierByPosition(start).getColor() == "B") { SoldierBase tempKing = board[start.getY(), start.getX()]; board[start.getY(), start.getX()] = new EmptySoldier(" ", " ", false, start.getY(), start.getX()); basicMove(new Coords(0, 7), new Coords(0, 5)); tempKing.setY(start.getY()); tempKing.setX(start.getX() + 2); board[start.getY(), start.getX() + 2] = tempKing; } else if (start.getX() > end.getX() && GetSoldierByPosition(start).getColor() == "W") { SoldierBase tempKing = board[start.getY(), start.getX()]; board[start.getY(), start.getX()] = new EmptySoldier(" ", " ", false, start.getY(), start.getX()); basicMove(new Coords(7, 0), new Coords(7, 3)); tempKing.setY(start.getY()); tempKing.setX(start.getX() - 2); board[start.getY(), start.getX() - 2] = tempKing; } else if (start.getX() > end.getX() && GetSoldierByPosition(start).getColor() == "B") { SoldierBase tempKing = board[start.getY(), start.getX()]; board[start.getY(), start.getX()] = new EmptySoldier(" ", " ", false, start.getY(), start.getX()); basicMove(new Coords(0, 0), new Coords(0, 3)); tempKing.setY(start.getY()); tempKing.setX(start.getX() - 2); board[end.getY(), start.getX() - 2] = tempKing; } }
//Castling public bool validCastling(Coords start, Coords end) { if (GetSoldierByPosition(start).getType() == "K" && GetSoldierByPosition(start).getMoved() == false) { //2 spaces castling if (start.getX() < end.getX()) { //clear pass? then move the rook if (GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() + 1, false))).getType() == " " && GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() + 2, false))).getType() == " " && GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() + 3, false))).getType() == "R" && GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() + 3, false))).getMoved() == false && GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() + 2, false))) == GetSoldierByPosition(new Coords(end.getY(), end.getX())) && !(inCheck(FindKing()))) { return(true); } } else { //clear pass? then move the rook if (GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() - 1, true))).getType() == " " && GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() - 2, true))).getType() == " " && GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() - 3, true))).getType() == " " && GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() - 4, true))).getType() == "R" && GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() - 4, true))).getMoved() == false && GetSoldierByPosition(new Coords(start.getY(), GetValidIndex(start.getX() - 2, true))) == GetSoldierByPosition(new Coords(end.getY(), end.getX())) && !(inCheck(FindKing()))) { return(true); } } } return(false); }
public bool PawnMove(ChessBoard board, Coords start, Coords end) { int direction; if (board.WhiteTurn()) { direction = -1; } else { direction = 1; } if (!this.getMoved() &&//first move 2 steps start.getX() == end.getX() && start.getY() + (2 * direction) == end.getY() && board.GetSoldierByPosition(new Coords(start.getY() + (2 * direction), end.getX())).getType() == " ") { firstMoveTwoSteps = true; return(true); } if (start.getX() == end.getX() &&//move 1 step start.getY() + direction == end.getY() && board.GetSoldierByPosition(new Coords(start.getY() + direction, end.getX())).getType() == " ") { return(true); } if ((start.getX() + 1 == end.getX() || start.getX() - 1 == end.getX()) &&//eating start.getY() + direction == end.getY() && board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor() && board.GetSoldierByPosition(end).getColor() != " ") { return(canIeat(board, start, end)); } if (board.validEnPassant(start, end))//en passant { return(true); } return(false); }
public bool validEnPassant(Coords start, Coords end) { int direction; if (WhiteTurn()) { direction = -1; } else { direction = 1; } if (((GetValidIndex(start.getX() + 1, false) == end.getX() || GetValidIndex(start.getX() - 1, true) == end.getX()) && start.getY() + direction == end.getY() && GetSoldierByPosition(end).getColor() == " ")) { if (WhiteTurn() && start.getY() == 3 && GetSoldierByPosition(start).getType() == "P" && GetSoldierByPosition(start).getColor() == "W" && board[3, end.getX()].getType() == "P" && board[3, end.getX()].getColor() == "B") { if (board[end.getY() - direction, end.getX()] is PawnPiece && ((PawnPiece)board[end.getY() - direction, end.getX()]).getMovedTwoSteps() == true) { return(true); } } if (!WhiteTurn() && start.getY() == 4 && GetSoldierByPosition(start).getType() == "P" && GetSoldierByPosition(start).getColor() == "W" && board[4, end.getX()].getType() == "P" && board[4, end.getX()].getColor() == "B") { if (board[end.getY() - direction, end.getX()] is PawnPiece && ((PawnPiece)board[end.getY() - direction, end.getX()]).getMovedTwoSteps() == true) { return(true); } } } return(false); }
//possible move to cancel check? public bool PossibleToCancelCheck(Coords start, Coords end) { bool movePosition = false; if (GetSoldierByPosition(start).getMoved()) { movePosition = true; } else { movePosition = false; } SoldierBase tempStart; SoldierBase tempEnd; if (GetSoldierByPosition(start).validMove(this, start, end)) { tempStart = (GetSoldierByPosition(start)); tempEnd = (GetSoldierByPosition(end)); basicMove(start, end); tempStart.setY(start.getY()); tempStart.setX(start.getX()); if (!(inCheck(FindKing()))) { board[start.getY(), start.getX()] = tempStart; board[end.getY(), end.getX()] = tempEnd; board[start.getY(), start.getX()].isMoved(movePosition); return(true); } else { board[start.getY(), start.getX()] = tempStart; board[end.getY(), end.getX()] = tempEnd; board[start.getY(), start.getX()].isMoved(movePosition); } } return(false); }
public bool KingMoves(ChessBoard board, Coords start, Coords end) { if (start.getX() + 1 == end.getX() && start.getY() + 1 == end.getY() &&//x+1//y+1 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (start.getX() + 1 == end.getX() && start.getY() - 1 == end.getY() &&//x+1//y-1 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (start.getX() - 1 == end.getX() && start.getY() + 1 == end.getY() &&//x-1//y+1 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (start.getX() - 1 == end.getX() && start.getY() - 1 == end.getY() &&//x-1//y-1 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); }// if (start.getX() == end.getX() && start.getY() - 1 == end.getY() &&//x//y-1 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (start.getX() == end.getX() && start.getY() + 1 == end.getY() &&//x//y+1 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (start.getX() - 1 == end.getX() && start.getY() == end.getY() &&//x-1//y board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (start.getX() + 1 == end.getX() && start.getY() == end.getY() &&//x+1//y board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (board.validCastling(start, end)) { return(true); } return(false); }
public bool rMoves(ChessBoard board, Coords start, Coords end) { if (start.getX() + 2 == end.getX() && start.getY() + 1 == end.getY() &&//x+2//y+1 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (start.getX() + 2 == end.getX() && start.getY() - 1 == end.getY() &&//x+2//y-1 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (start.getX() - 2 == end.getX() && start.getY() + 1 == end.getY() &&//x-2//y+1 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (start.getX() - 2 == end.getX() && start.getY() - 1 == end.getY() &&//x-2//y-1 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (start.getX() - 1 == end.getX() && start.getY() - 2 == end.getY() &&//x-1//y-2 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (start.getX() + 1 == end.getX() && start.getY() - 2 == end.getY() &&//x+1//y-2 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (start.getX() - 1 == end.getX() && start.getY() + 2 == end.getY() &&//x-1//y+2 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } if (start.getX() + 1 == end.getX() && start.getY() + 2 == end.getY() &&//x+1//y+2 board.GetSoldierByPosition(start).getColor() != board.GetSoldierByPosition(end).getColor()) { return(board.GetSoldierByPosition(end).getColor() == " " || canIeat(board, start, end)); } return(false); }
// get the soldier type public SoldierBase GetSoldierByPosition(Coords start) { return(board[start.getY(), start.getX()]); }
public void doPromotion(Coords start, Coords end) { removeObj(start); board[end.getY(), end.getX()] = new QueenPiece("Q", "W", false, start.getY(), start.getX()); }
public void removeObj(Coords start) { board[start.getY(), start.getX()] = new EmptySoldier(" ", " ", false, start.getY(), start.getX()); }