public List <PieceMove> GetMoves(Grid pos) { Piece piece = chessBoard.Board[pos.row, pos.column]; if (piece == null || piece.color != turn) { return(new List <PieceMove>()); } List <PieceMove> moves = new List <PieceMove>(); if (check != null && piece.color == check.checkColor && piece.GetType() != typeof(King)) { foreach (PieceMove move in piece.GetPieceMoves(pos)) { if (!check.checkPositions.Contains(move.newPos) && move.newPos != check.piecePos) { continue; } else if (TestMove(move)) { moves.Add(move); } } return(moves); } return(piece.GetPieceMoves(pos)); }
CheckInfo IsCheckMate(Grid pos) { Piece piece = chessBoard.Board[pos.row, pos.column]; King king = piece.color != ChessColor.White ? chessBoard.whiteKing : chessBoard.blackKing; List <Grid> piecePositions = new List <Grid>(); piece.GetPieceMoves(pos).ForEach(x => piecePositions.Add(x.newPos)); if (piecePositions.Contains(chessBoard.GetIndex(king))) { return(new CheckInfo(pos, king.color, piecePositions)); } else { return(null); } }
void CheckMove(Grid pos) { Piece piece = chessBoard.Board[pos.row, pos.column]; King king = piece.color != ChessColor.White ? chessBoard.whiteKing : chessBoard.blackKing; List <Grid> kingPositions = new List <Grid>(); king.GetPieceMoves(chessBoard.GetIndex(king)).ForEach(x => kingPositions.Add(x.newPos)); foreach (PieceMove move in piece.GetPieceMoves(pos)) { if (move.moveType == MoveType.Eat) { if (move.newPos == chessBoard.GetIndex(king)) { //check } else if (kingPositions.Contains(move.newPos)) { //lock position for king } } } }