Beispiel #1
0
    public void GetMoves(Vector2 pos, Board.PieceType type)
    {
        switch (type)
        {
        case Board.PieceType.king:
            moves = GetTiles(GetKingMoves(pos));
            break;

        case Board.PieceType.queen:
            moves = GetTiles(GetQueenMoves(pos));
            break;

        case Board.PieceType.knight:
            moves = GetTiles(GetKnightMoves(pos));
            break;

        case Board.PieceType.bishop:
            moves = GetTiles(GetBishopMoves(pos));
            break;

        case Board.PieceType.rook:
            moves = GetTiles(GetRookMoves(pos));
            break;

        case Board.PieceType.pawn:
            moves = GetTiles(GetPawnMoves(pos));
            break;

        default:
            break;
        }
    }
Beispiel #2
0
    // This is static only because PromoteMenu doesn't exist in the scene until the game starts
    public static void Promote(PieceType type)
    {
        Square needsPromotion = instance.board.needsPromotion;
        bool   success        = instance.board.Promote(type);

        Debug.Assert(success);

        instance.UpdateScene(new List <Move>()
        {
            new Move(needsPromotion, needsPromotion, type)
        });
    }
Beispiel #3
0
    public void SetCanMove(bool state)
    {
        currentTurn = state;
        foreach (GameObject piece in alivePieces)
        {
            pieceComponent = piece.GetComponent <Piece>();
            pos            = pieceComponent.parentTile.GetComponent <Tile>().pos;
            pieceType      = pieceComponent.type;

            piece.GetComponent <Piece>().canMove = state;
            piece.GetComponent <Moves>().GetMoves(pos, pieceType);
        }
    }
Beispiel #4
0
    /** Return a heuristic value for BOARD. This can be improved. */
    private int StaticScore(Board board)
    {
        BoardStatus status = board.status;

        if (status == BoardStatus.Checkmate)
        {
            if (board.whoseTurn == PieceColor.White)
            {
                return(WIN_VALUE);
            }
            else
            {
                return(-WIN_VALUE);
            }
        }
        else if (status != BoardStatus.Playing) // AI shouldn't need to think about the promote state
        {
            return(0);
        }

        // TODO: quantify threats
        int score = 0;

        foreach (Square s in Square.squares)
        {
            PieceData?p = board.GetPiece(s);
            if (p == null)
            {
                continue;
            }

            PieceType type = p.Value.type;
            if (type == PieceType.King)
            {
                continue;
            }

            if (p.Value.color == PieceColor.White)
            {
                score += PIECE_VALUES[(int)type];
            }
            else
            {
                score -= PIECE_VALUES[(int)type];
            }
        }

        return(score);
    }
Beispiel #5
0
    private void SetPieceSprite(Board.PieceType type, Board.Colours colour, ref SpriteRenderer sr)
    {
        switch (type)
        {
        case Board.PieceType.king:
            switch (colour)
            {
            case Board.Colours.black:
                sr.sprite = sprites.kingBlack;
                break;

            case Board.Colours.white:
                sr.sprite = sprites.kingWhite;
                break;
            }
            break;

        case Board.PieceType.queen:
            switch (colour)
            {
            case Board.Colours.black:
                sr.sprite = sprites.queenBlack;
                break;

            case Board.Colours.white:
                sr.sprite = sprites.queenWhite;
                break;
            }
            break;

        case Board.PieceType.knight:
            switch (colour)
            {
            case Board.Colours.black:
                sr.sprite = sprites.knightBlack;
                break;

            case Board.Colours.white:
                sr.sprite = sprites.knightWhite;
                break;
            }
            break;

        case Board.PieceType.bishop:
            switch (colour)
            {
            case Board.Colours.black:
                sr.sprite = sprites.bishopBlack;
                break;

            case Board.Colours.white:
                sr.sprite = sprites.bishopWhite;
                break;
            }
            break;

        case Board.PieceType.rook:
            switch (colour)
            {
            case Board.Colours.black:
                sr.sprite = sprites.rookBlack;
                break;

            case Board.Colours.white:
                sr.sprite = sprites.rookWhite;
                break;
            }
            break;

        case Board.PieceType.pawn:
            switch (colour)
            {
            case Board.Colours.black:
                sr.sprite = sprites.pawnBlack;
                break;

            case Board.Colours.white:
                sr.sprite = sprites.pawnWhite;
                break;
            }
            break;
        }
    }