public override List <Move> getLegalMovesWithoutCheck(Board board) { List <Move> knightMoves = new List <Move>(); pieceColor currentPieceColor = board.getBoardPieces()[this.getPiecePosition().Item1, this.getPiecePosition().Item2].getPieceColor(); for (int i = 0; i < knightMovment.Length; i += 2) { int DestinationRow = this.getPiecePosition().Item1 + knightMovment[i]; int DestinationCol = this.getPiecePosition().Item2 + knightMovment[i + 1]; if (Utility.isValidMove(DestinationRow, DestinationCol)) { if (board.isEmptyCell(DestinationRow, DestinationCol)) { knightMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol))); } else { pieceColor destinationPieceColor = board.getBoardPieces()[DestinationRow, DestinationCol].getPieceColor(); if (currentPieceColor != destinationPieceColor) { knightMoves.Add(new AttackMove(Tuple.Create(DestinationRow, DestinationCol))); } } } } return(knightMoves); }
public override List <Move> getLegalMovesWithCheck(Board board) { List <Move> pawnMoves = new List <Move>(); pieceColor currentPieceColor = board.getBoardPieces()[this.getPiecePosition().Item1, this.getPiecePosition().Item2].getPieceColor(); for (int i = 0; i < pawnMovement.Length; i += 2) { int DestinationRow = this.getPiecePosition().Item1 + (int)this.getPieceColor() * pawnMovement[i]; int DestinationCol = this.getPiecePosition().Item2 + pawnMovement[i + 1]; if (!Utility.isValidMove(DestinationRow, DestinationCol) || !Utility.kingStillSafe(board, this.getPiecePosition(), Tuple.Create(DestinationRow, DestinationCol))) { continue; } if (i == 2 && this.firstMove) { //checking if the next row is empty or not int nextRow = this.getPiecePosition().Item1 + (int)this.getPieceColor(); int nextCol = this.getPiecePosition().Item2 + pawnMovement[i + 1];; if (board.isEmptyCell(nextRow, nextCol) && board.isEmptyCell(DestinationRow, DestinationCol)) { pawnMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol))); } } else if (i == 0 && board.isEmptyCell(DestinationRow, DestinationCol)) { pawnMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol))); //this.isFirstMove = false; } else if (i == 4 || i == 6) { if (board.isEmptyCell(DestinationRow, DestinationCol)) { continue; } else { pieceColor destinationPieceColor = board.getBoardPieces()[DestinationRow, DestinationCol].getPieceColor(); if (currentPieceColor != destinationPieceColor) { pawnMoves.Add(new AttackMove(Tuple.Create(DestinationRow, DestinationCol))); } else { continue; } } } } return(pawnMoves); }
public void randomize() { int i = Random.Range(0, 5); pc = (pieceColor)i; setAlpha(1f); img.sprite = sprites[i]; isMatched = false; isDestroyed = false; matchedWith = null; bonus = (Bonus)0; }
public static List <Move> getPlayerLegalMove(Board board, pieceColor color) { List <Move> legalMoves = new List <Move>(); for (int i = 0; i < 8; ++i) { for (int j = 0; j < 8; ++j) { if (!board.isEmptyCell(i, j) && board.getBoardPieces()[i, j].getPieceColor() == color) { legalMoves.AddRange(board.getBoardPieces()[i, j].getLegalMovesWithoutCheck(board)); } } } return(legalMoves); }
public override List <Move> getLegalMovesWithCheck(Board board) { List <Move> rookMoves = new List <Move>(); pieceColor currentPieceColor = board.getBoardPieces()[this.getPiecePosition().Item1, this.getPiecePosition().Item2].getPieceColor(); for (int i = 0; i < rookMovement.Length; i += 2) { int DestinationRow = this.getPiecePosition().Item1; int DestinationCol = this.getPiecePosition().Item2; while (Utility.isValidMove(DestinationRow, DestinationCol)) { DestinationRow += rookMovement[i]; DestinationCol += rookMovement[i + 1]; if (!Utility.isValidMove(DestinationRow, DestinationCol)) { break; } if (board.isEmptyCell(DestinationRow, DestinationCol)) { if (Utility.kingStillSafe(board, this.getPiecePosition(), Tuple.Create(DestinationRow, DestinationCol))) { rookMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol))); } } else { pieceColor destinationPieceColor = board.getBoardPieces()[DestinationRow, DestinationCol].getPieceColor(); if (currentPieceColor != destinationPieceColor) { if (Utility.kingStillSafe(board, this.getPiecePosition(), Tuple.Create(DestinationRow, DestinationCol))) { rookMoves.Add(new AttackMove(Tuple.Create(DestinationRow, DestinationCol))); } break; } else { break; } } } } return(rookMoves); }
public List <Button> GetAllPossibleCheckMovesForColor(pieceColor color, Button[,] board) { List <Button> locations = new List <Button>(); for (int i = 0; i < 8; ++i) { for (int j = 0; j < 8; ++j) { if (GetPieceOnSquare(i, j, board).Color == color) { GetPossibleCheckedMovesForPiece(board[i, j], board); } } } return(locations); }
public override List <Move> getLegalMovesWithCheck(Board board) { List <Move> kingMoves = new List <Move>(); pieceColor currentPieceColor = board.getBoardPieces()[this.getPiecePosition().Item1, this.getPiecePosition().Item2].getPieceColor(); for (int i = 0; i < kingMovement.Length; i += 2) { int DestinationRow = this.getPiecePosition().Item1 + kingMovement[i]; int DestinationCol = this.getPiecePosition().Item2 + kingMovement[i + 1]; if (i == 0) { if (Utility.canPerformLongCastling(board, this)) { kingMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol))); } } else if (i == 2) { if (Utility.canPerformShortCastling(board, this)) { kingMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol))); } } else { if (Utility.isValidMove(DestinationRow, DestinationCol) && Utility.kingStillSafe(board, this.getPiecePosition(), Tuple.Create(DestinationRow, DestinationCol))) { if (board.isEmptyCell(DestinationRow, DestinationCol)) { kingMoves.Add(new NormalMove(Tuple.Create(DestinationRow, DestinationCol))); } else { pieceColor destinationPieceColor = board.getBoardPieces()[DestinationRow, DestinationCol].getPieceColor(); if (currentPieceColor != destinationPieceColor) { kingMoves.Add(new AttackMove(Tuple.Create(DestinationRow, DestinationCol))); } } } } } return(kingMoves); }
public Tuple <int, int> getPlayerKingPosition(pieceColor kingColor) { for (int i = 0; i < 8; ++i) { for (int j = 0; j < 8; ++j) { if (!isEmptyCell(i, j) && kingColor == pieceColor.White && boardPieces[i, j].getPieceType() == (int)pieceType.whiteKing) { return(Tuple.Create(i, j)); } else if (!isEmptyCell(i, j) && kingColor == pieceColor.BLack && boardPieces[i, j].getPieceType() == (int)pieceType.blackKing) { return(Tuple.Create(i, j)); } } } return(Tuple.Create(1, 1)); }
public List <Button> GetAllAvailableMovesForColor(pieceColor color, Button[,] board) { List <Button> locations = new List <Button>(); for (int i = 0; i < 8; ++i) { for (int j = 0; j < 8; ++j) { Piece piece = GetPieceOnSquare(i, j, board); if (piece.Color == color) { switch (piece.Name) { case "Pawn": PawnAttackLogic(piece, locations, board); PawnAttackLogic(piece, locations, board); break; case "Knight": KnightMoveLogic(piece, locations, board); break; case "Bishop": BishopMoveLogic(piece, locations, board); break; case "Rook": RookMoveLogic(piece, locations, board); break; case "Queen": QueenMoveLogic(piece, locations, board); break; case "King": KingMoveLogic(piece, locations, board); break; } } } } return(locations); }
public Knight(Tuple <int, int> piecePosition, pieceType type, pieceColor color) : base(piecePosition, type, color) { }
public Piece(Tuple <int, int> piecePosition, pieceType type, pieceColor color) { this.piecePosition = piecePosition; this.type = type; this.color = color; }
public Pawn(Tuple <int, int> piecePosition, pieceType type, pieceColor color) : base(piecePosition, type, color) { this.firstMove = true; }