public override bool move(ref Tile startingTile, ref Tile destinationTile, ChessBoard chess) { if (destinationTile.PieceInside != null) { if (destinationTile.PieceInside.IsWhite == IsWhite) { return(false); } } King blackKing = (King)chess.Pieces[20]; King whiteKing = (King)chess.Pieces[21]; if (((Math.Abs(Position.RowInBoard - destinationTile.RowInBoard) == 2 && Math.Abs(Position.ColumnInBoard - destinationTile.ColumnInBoard) == 1) || (Math.Abs(Position.RowInBoard - destinationTile.RowInBoard) == 1 && Math.Abs(Position.ColumnInBoard - destinationTile.ColumnInBoard) == 2)) && allowMove(ref chess, ref destinationTile)) { if (IsWhite) { if (!whiteKing.canMoveBeforeKing(ref chess, ref destinationTile, this)) { return(false); } } else { if (!blackKing.canMoveBeforeKing(ref chess, ref destinationTile, this)) { return(false); } } changeTileForPiece(ref startingTile, ref destinationTile, ref chess); return(true); } return(false); }
public override bool move(ref Tile startingTile, ref Tile destinationTile, ChessBoard chess) { if (destinationTile.PieceInside != null) { if (destinationTile.PieceInside.IsWhite == IsWhite) { return(false); } } King whiteKing = (King)chess.Pieces[21]; King blackKing = (King)chess.Pieces[20]; bool isClear = true; if (destinationTile.RowInBoard > Position.RowInBoard && destinationTile.ColumnInBoard > Position.ColumnInBoard && Math.Abs(Position.RowInBoard - destinationTile.RowInBoard) == Math.Abs(Position.ColumnInBoard - destinationTile.ColumnInBoard)) { for (int i = 1; i < Math.Abs(Position.ColumnInBoard - destinationTile.ColumnInBoard); i++) { if (chess.Tiles[Position.RowInBoard + i, Position.ColumnInBoard + i].PieceInside != null) { isClear = false; break; } } if (IsWhite) { if (isClear && allowMove(ref chess, ref destinationTile) && whiteKing.canMoveBeforeKing(ref chess, ref destinationTile, this) && IsWhite) { changeTileForPiece(ref startingTile, ref destinationTile, ref chess); return(true); } } else { if (isClear && allowMove(ref chess, ref destinationTile) && blackKing.canMoveBeforeKing(ref chess, ref destinationTile, this) && !IsWhite) { changeTileForPiece(ref startingTile, ref destinationTile, ref chess); return(true); } } isClear = true; } if (destinationTile.RowInBoard > Position.RowInBoard && destinationTile.ColumnInBoard < Position.ColumnInBoard && Math.Abs(Position.RowInBoard - destinationTile.RowInBoard) == Math.Abs(Position.ColumnInBoard - destinationTile.ColumnInBoard)) { for (int i = 1; i < Math.Abs(Position.ColumnInBoard - destinationTile.ColumnInBoard); i++) { if (chess.Tiles[Position.RowInBoard + i, Position.ColumnInBoard - i].PieceInside != null) { isClear = false; break; } } if (IsWhite) { if (isClear && allowMove(ref chess, ref destinationTile) && whiteKing.canMoveBeforeKing(ref chess, ref destinationTile, this) && IsWhite) { changeTileForPiece(ref startingTile, ref destinationTile, ref chess); return(true); } } else { if (isClear && allowMove(ref chess, ref destinationTile) && blackKing.canMoveBeforeKing(ref chess, ref destinationTile, this) && !IsWhite) { changeTileForPiece(ref startingTile, ref destinationTile, ref chess); return(true); } } isClear = true; } if (destinationTile.RowInBoard < Position.RowInBoard && destinationTile.ColumnInBoard < Position.ColumnInBoard && Math.Abs(Position.RowInBoard - destinationTile.RowInBoard) == Math.Abs(Position.ColumnInBoard - destinationTile.ColumnInBoard)) { for (int i = 1; i < Math.Abs(Position.ColumnInBoard - destinationTile.ColumnInBoard); i++) { if (chess.Tiles[Position.RowInBoard - i, Position.ColumnInBoard - i].PieceInside != null) { isClear = false; break; } } if (IsWhite) { if (isClear && allowMove(ref chess, ref destinationTile) && whiteKing.canMoveBeforeKing(ref chess, ref destinationTile, this) && IsWhite) { changeTileForPiece(ref startingTile, ref destinationTile, ref chess); return(true); } } else { if (isClear && allowMove(ref chess, ref destinationTile) && blackKing.canMoveBeforeKing(ref chess, ref destinationTile, this) && !IsWhite) { changeTileForPiece(ref startingTile, ref destinationTile, ref chess); return(true); } } isClear = true; } if (destinationTile.RowInBoard < Position.RowInBoard && destinationTile.ColumnInBoard > Position.ColumnInBoard && Math.Abs(Position.RowInBoard - destinationTile.RowInBoard) == Math.Abs(Position.ColumnInBoard - destinationTile.ColumnInBoard)) { for (int i = 1; i < Math.Abs(Position.ColumnInBoard - destinationTile.ColumnInBoard); i++) { if (chess.Tiles[Position.RowInBoard - i, Position.ColumnInBoard + i].PieceInside != null) { isClear = false; break; } } if (IsWhite) { if (isClear && allowMove(ref chess, ref destinationTile) && whiteKing.canMoveBeforeKing(ref chess, ref destinationTile, this) && IsWhite) { changeTileForPiece(ref startingTile, ref destinationTile, ref chess); return(true); } } else { if (isClear && allowMove(ref chess, ref destinationTile) && blackKing.canMoveBeforeKing(ref chess, ref destinationTile, this) && !IsWhite) { changeTileForPiece(ref startingTile, ref destinationTile, ref chess); return(true); } } isClear = true; } return(false); }
// part of pawn move function private bool pawnMovements(ref Tile startingTile, ref Tile destinationTile, ref ChessBoard chess, bool white) { int mult; King blackKing = (King)chess.Pieces[20]; King whiteKing = (King)chess.Pieces[21]; if (white) { mult = 1; } else { mult = -1; } if (!HasMoved && (Position.RowInBoard - destinationTile.RowInBoard == 2 * mult) && destinationTile.ColumnInBoard == Position.ColumnInBoard && allowMove(ref chess, ref destinationTile)) { if (white) { if (!whiteKing.canMoveBeforeKing(ref chess, ref destinationTile, this)) { return(false); } } else { if (!blackKing.canMoveBeforeKing(ref chess, ref destinationTile, this)) { return(false); } } if (destinationTile.PieceInside != null) { return(false); } changeTileForPiece(ref startingTile, ref destinationTile, ref chess); HasMoved = true; JustMovedTwoSteps = true; return(true); } if ((Position.RowInBoard - destinationTile.RowInBoard == 1 * mult) && destinationTile.ColumnInBoard == Position.ColumnInBoard && allowMove(ref chess, ref destinationTile)) { if (white) { if (!whiteKing.canMoveBeforeKing(ref chess, ref destinationTile, this)) { return(false); } } else { if (!blackKing.canMoveBeforeKing(ref chess, ref destinationTile, this)) { return(false); } } if (destinationTile.PieceInside != null) { return(false); } changeTileForPiece(ref startingTile, ref destinationTile, ref chess); JustMovedTwoSteps = false; return(true); } else if ((Position.RowInBoard - destinationTile.RowInBoard == 1 * mult) && Position.ColumnInBoard - destinationTile.ColumnInBoard == 1 && destinationTile.PieceInside != null && allowMove(ref chess, ref destinationTile)) { if (white) { if (!whiteKing.canMoveBeforeKing(ref chess, ref destinationTile, this)) { return(false); } } else { if (!blackKing.canMoveBeforeKing(ref chess, ref destinationTile, this)) { return(false); } } if (destinationTile.PieceInside.IsWhite != white) { changeTileForPiece(ref startingTile, ref destinationTile, ref chess); JustMovedTwoSteps = false; return(true); } } else if ((Position.RowInBoard - destinationTile.RowInBoard == 1 * mult) && Position.ColumnInBoard - destinationTile.ColumnInBoard == -1 && destinationTile.PieceInside != null && allowMove(ref chess, ref destinationTile)) { if (white) { if (!whiteKing.canMoveBeforeKing(ref chess, ref destinationTile, this)) { return(false); } } else { if (!blackKing.canMoveBeforeKing(ref chess, ref destinationTile, this)) { return(false); } } if (destinationTile.PieceInside.IsWhite != white) { changeTileForPiece(ref startingTile, ref destinationTile, ref chess); JustMovedTwoSteps = false; return(true); } } return(false); }