예제 #1
0
        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));
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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
                    }
                }
            }
        }