Exemplo n.º 1
0
    List <Move> _GetMoves(Piece.playerColor color)
    {
        List <Move> turnMove = new List <Move>();
        List <Tile> pieces   = new List <Tile>();

        if (color == Piece.playerColor.BLACK)
        {
            pieces = _blackPieces;
        }
        else
        {
            pieces = _whitePieces;
        }

        foreach (Tile tile in pieces)
        {
            MoveFactory factory    = new MoveFactory(_board);
            List <Move> pieceMoves = factory.GetMoves(tile.CurrentPiece, tile.Position);

            foreach (Move move in pieceMoves)
            {
                Move newMove = _CreateMove(move.firstPosition, move.secondPosition);
                turnMove.Add(newMove);
            }
        }
        return(turnMove);
    }
Exemplo n.º 2
0
 void BishopMove(Piece.playerColor c, Vector2 temp, Piece p)
 {
     _LineMove(9, new Vector2(1, 1), temp, c);
     _LineMove(9, new Vector2(-1, -1), temp, c);
     _LineMove(9, new Vector2(1, -1), temp, c);
     _LineMove(9, new Vector2(-1, 1), temp, c);
 }
Exemplo n.º 3
0
 void RookMove(Piece.playerColor c, Vector2 temp, Piece p)
 {
     _LineMove(9, new Vector2(0, 1), temp, c);
     _LineMove(9, new Vector2(0, -1), temp, c);
     _LineMove(9, new Vector2(1, 0), temp, c);
     _LineMove(9, new Vector2(-1, 0), temp, c);
 }
Exemplo n.º 4
0
    void KingMove(Piece.playerColor c, Vector2 temp, Piece p)
    {
        for (int x = -1; x <= 1; x++)
        {
            for (int y = -1; y <= 1; y++)
            {
                if (x == 0 && y == 0)
                {
                    continue;
                }

                CheckMove(new Vector2(_position.x + x, _position.y + y), c);
            }
        }
    }
Exemplo n.º 5
0
    public List <Move> GetMoves(Piece piece, Vector2 position)
    {
        _piece    = piece;
        _type     = piece.Type;
        _player   = piece.Player;
        _position = position;

        foreach (KeyValuePair <Piece.pieceType, System.Action> p in pieceToFunction)
        {
            if (_type == p.Key)
            {
                p.Value.Invoke();
            }
        }

        return(moves);
    }
Exemplo n.º 6
0
    public bool CheckKing()
    {
        kingAttack = false;

        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                tempVector = new Vector2(i, j);
                if (Board.Instance.GetTileFromBoard(tempVector).CurrentPiece != null)
                {
                    Piece             p     = Board.Instance.GetTileFromBoard(tempVector).CurrentPiece;
                    Piece.pieceType   type  = Board.Instance.GetTileFromBoard(tempVector).CurrentPiece.Type;
                    Piece.playerColor color = Board.Instance.GetTileFromBoard(tempVector).CurrentPiece.Player;
                    switch (type)
                    {
                    case Piece.pieceType.PAWN:
                        PawnMove(color, tempVector, p);
                        break;

                    case Piece.pieceType.ROOK:
                        RookMove(color, tempVector, p);
                        break;

                    case Piece.pieceType.BISHOP:
                        BishopMove(color, tempVector, p);
                        break;

                    case Piece.pieceType.KNIGHT:
                        KnightMove(color, tempVector, p);
                        break;

                    case Piece.pieceType.QUEEN:
                        QueenMove(color, tempVector, p);
                        break;

                    case Piece.pieceType.KING:
                        KingMove(color, tempVector, p);
                        break;
                    }
                }
            }
        }
        return(kingAttack);
    }
Exemplo n.º 7
0
 //直走路径
 void _LineMove(int limit, Vector2 direction, Vector2 tempPosition, Piece.playerColor co)
 {
     for (int i = 1; i < limit; i++)
     {
         Vector2 move = tempPosition + direction * i;
         if (_IsOnBoard(move) && _ContainsPiece(Board.Instance.GetTileFromBoard(move)))
         {
             if (Board.Instance.GetTileFromBoard(tempPosition).CurrentPiece.Type != Piece.pieceType.PAWN)
             {
                 if (co != Board.Instance.GetTileFromBoard(move).CurrentPiece.Player)
                 {
                     CheckMove(move, co);
                 }
                 break;
             }
         }
     }
 }
Exemplo n.º 8
0
 void PawnMove(Piece.playerColor c, Vector2 temp, Piece p)
 {
     if (p.Player == Piece.playerColor.BLACK)
     {
         int limit = p.HasMoved ? 2 : 3;
         _LineMove(limit, new Vector2(0, 1), temp, c);
         Vector2 diagLeft  = new Vector2(temp.x - 1, temp.y + 1);
         Vector2 diagRight = new Vector2(temp.x + 1, temp.y + 1);
         if (_IsOnBoard(diagLeft))
         {
             CheckMove(diagLeft, c);
         }
         if (_IsOnBoard(diagRight))
         {
             CheckMove(diagRight, c);
         }
     }
 }
Exemplo n.º 9
0
 //通用检查
 void CheckMove(Vector2 v, Piece.playerColor c)
 {
     if (_IsOnBoard(v) && _ContainsPiece(Board.Instance.GetTileFromBoard(v)))
     {
         if (c != Board.Instance.GetTileFromBoard(v).CurrentPiece.Player)
         {
             if (Board.Instance.GetTileFromBoard(v).CurrentPiece.Type == Piece.pieceType.KING)
             {
                 kingAttack = true;
                 if (Board.Instance.GetTileFromBoard(v).CurrentPiece.Player == Piece.playerColor.BLACK)
                 {
                     checkColor = true;
                 }
                 else
                 {
                     checkColor = false;
                 }
             }
         }
     }
 }
Exemplo n.º 10
0
    void KnightMove(Piece.playerColor c, Vector2 temp, Piece p)
    {
        Vector2 move;

        move = new Vector2(temp.x + 2, temp.y + 1);
        CheckMove(move, c);
        move = new Vector2(temp.x + 2, temp.y - 1);
        CheckMove(move, c);
        move = new Vector2(temp.x - 2, temp.y + 1);
        CheckMove(move, c);
        move = new Vector2(temp.x - 2, temp.y - 1);
        CheckMove(move, c);

        move = new Vector2(temp.x + 1, temp.y - 2);
        CheckMove(move, c);
        move = new Vector2(temp.x + 1, temp.y + 2);
        CheckMove(move, c);
        move = new Vector2(temp.x - 1, temp.y + 2);
        CheckMove(move, c);
        move = new Vector2(temp.x - 1, temp.y - 2);
        CheckMove(move, c);
    }
Exemplo n.º 11
0
    public int GetBoardWeight(Piece.pieceType type, Vector2 position, Piece.playerColor color)
    {
        switch (type)
        {
        case Piece.pieceType.PAWN:
            if (color == Piece.playerColor.WHITE)
            {
                return(PawnBoardWeight[(int)position.x, (int)position.y]);
            }
            else
            {
                return(PawnMirrorBoardWeight[(int)position.x, (int)position.y]);
            }

        case Piece.pieceType.ROOK:
            if (color == Piece.playerColor.WHITE)
            {
                return(RookBoardWeight[(int)position.x, (int)position.y]);
            }
            else
            {
                return(RookMirrorBoardWeight[(int)position.x, (int)position.y]);
            }

        case Piece.pieceType.KNIGHT:
            if (color == Piece.playerColor.WHITE)
            {
                return(KnightBoardWeight[(int)position.x, (int)position.y]);
            }
            else
            {
                return(KnightMirrorBoardWeight[(int)position.x, (int)position.y]);
            }

        case Piece.pieceType.BISHOP:
            if (color == Piece.playerColor.WHITE)
            {
                return(BishopBoardWeight[(int)position.x, (int)position.y]);
            }
            else
            {
                return(BishopMirrowBoardWeight[(int)position.x, (int)position.y]);
            }

        case Piece.pieceType.QUEEN:
            if (color == Piece.playerColor.WHITE)
            {
                return(QueenBoardWeight[(int)position.x, (int)position.y]);
            }
            else
            {
                return(QueenMirrorBoardWeight[(int)position.x, (int)position.y]);
            }

        case Piece.pieceType.KING:
            if (color == Piece.playerColor.WHITE)
            {
                return(KingBoardWeight[(int)position.x, (int)position.y]);
            }
            else
            {
                return(KingMirrorBoardWeight[(int)position.x, (int)position.y]);
            }

        default:
            return(-1);
        }
    }
Exemplo n.º 12
0
 void QueenMove(Piece.playerColor c, Vector2 temp, Piece p)
 {
     BishopMove(c, temp, p);
     RookMove(c, temp, p);
 }