예제 #1
0
    private void LoadPiece(short line, short file, PieceType type, bool isWhite)
    {
        var piece = new Piece(line, file, type, isWhite);

        Board[line, file] = piece;
        PieceLookup.Add(piece);
    }
예제 #2
0
    private void MakeMove(Move move, bool wasWhite)
    {
        var movedPiece    = Board[move.StartingLine, move.StartingFile];
        var capturedPiece = Board[move.DestinationLine, move.DestinationFile];

        if (capturedPiece != null)
        {
            PieceLookup.Remove(capturedPiece);
            capturedPiece = null;
        }
        if (movedPiece.Type == PieceType.King)
        {
            if (wasWhite && (White00 || White000))
            {
                White00  = false;
                White000 = false;
            }
            else if (!wasWhite && (Black00 || Black000))
            {
                Black00  = false;
                Black000 = false;
            }
            if (move.DestinationFile - move.StartingFile == 2)
            {
                Board[move.StartingLine, 7].File = 5;
                Board[move.StartingLine, 5]      = Board[move.StartingLine, 7];
                Board[move.StartingLine, 7]      = null;
            }
            else if (move.DestinationFile - move.StartingFile == -2)
            {
                Board[move.StartingLine, 0].File = 3;
                Board[move.StartingLine, 3]      = Board[move.StartingLine, 0];
                Board[move.StartingLine, 0]      = null;
            }
        }
        if (move.StartingFile == 7 && move.StartingLine == 7)
        {
            White00 = false;
        }
        else if (move.StartingFile == 7 && move.StartingLine == 0)
        {
            Black00 = false;
        }
        else if (move.StartingFile == 0 && move.StartingLine == 0)
        {
            Black000 = false;
        }
        else if (move.StartingFile == 0 && move.StartingLine == 7)
        {
            White000 = false;
        }

        Board[move.StartingLine, move.StartingFile] = null;
        movedPiece.File = move.DestinationFile;
        movedPiece.Line = move.DestinationLine;
        Board[move.DestinationLine, move.DestinationFile] = movedPiece;
        if (move.WasPromotion)
        {
            movedPiece.Type = (PieceType)move.PromotedTo;
        }
    }