Example #1
0
            void LineCapture(PieceBoard board, int x, int y, int dX, int dY)
            {
                int sX = x;
                int sY = y;

                int i = 0;

                while (true)
                {
                    sX += dX;
                    sY += dY;


                    if (!board.InBounds(sX, sY) || EmptySpace(board, sX, sY))
                    {
                        return;
                    }
                    else if (FriendSpace(board, sX, sY))
                    {
                        break;
                    }

                    i++;
                }

                sX = x; sY = y;

                for (int j = 0; j < i; j++)
                {
                    sX += dX;
                    sY += dY;

                    CapturePiece(board, sX, sY);
                }
            }
Example #2
0
        public override bool[,] possibleMov()
        {
            bool[,] mat = new bool[PieceBoard.Lines, PieceBoard.Column];
            Position position   = new Position(PiecePos.Line, PiecePos.Column);
            int      acum       = position.Line + 1;
            int      dec        = position.Line - 1;
            bool     isMoveAcum = true;
            bool     isMoveDec  = true;

            for (int j = position.Column - 1; j >= 0; j--)
            {
                if (PieceBoard.isPosition(new Position(acum, j)) && canMov(new Position(acum, j)) && isMoveAcum)
                {
                    mat[acum, j] = true;
                }
                else
                {
                    isMoveAcum = false;
                }
                acum++;
                if (PieceBoard.isPosition(new Position(dec, j)) && canMov(new Position(dec, j)) && isMoveDec)
                {
                    mat[dec, j] = true;
                }
                else
                {
                    isMoveDec = false;
                }
                dec--;
            }
            isMoveAcum = true;
            isMoveDec  = true;
            position   = new Position(PiecePos.Line, PiecePos.Column);
            dec        = position.Line - 1;
            acum       = position.Line + 1;
            for (int j = position.Column + 1; j < PieceBoard.Column; j++)
            {
                if (PieceBoard.isPosition(new Position(acum, j)) && canMov(new Position(acum, j)) && isMoveAcum)
                {
                    mat[acum, j] = true;
                }
                else
                {
                    isMoveAcum = false;
                }
                acum++;
                if (PieceBoard.isPosition(new Position(dec, j)) && canMov(new Position(dec, j)) && isMoveDec)
                {
                    mat[dec, j] = true;
                }
                else
                {
                    isMoveDec = false;
                }
                dec--;
            }


            return(mat);
        }
Example #3
0
            public override bool[,] PossibleMoves2(PieceBoard board, int x, int y)
            {
                bool[,] possible = PossibleMoves3(board, x, y);

                ChessGame chess = board as ChessGame;


                for (int i = 0; i < 8; i++)
                {
                    for (int j = 0; j < 8; j++)
                    {
                        if (possible[i, j])
                        {
                            MobilePiece overwritePiece = board.pieces[i, j];
                            board.pieces[i, j] = board.pieces[x, y];
                            board.pieces[x, y] = null;

                            Point kingPos = chess.GetKingPos(white);
                            bool  check   = chess.InCheck(kingPos.X, kingPos.Y, white);
                            //Console.WriteLine(check);

                            board.pieces[x, y] = board.pieces[i, j];
                            board.pieces[i, j] = overwritePiece;

                            if (check)
                            {
                                possible[i, j] = false;
                            }
                        }
                    }
                }

                return(possible);
            }
Example #4
0
            protected override void AfterMove(PieceBoard board, int x1, int y1, int x2, int y2)
            {
                LineCapture(board, x2, y2, 1, 0);
                LineCapture(board, x2, y2, -1, 0);
                LineCapture(board, x2, y2, 0, 1);
                LineCapture(board, x2, y2, 0, -1);

                // Corner captures
                void CheckCorner(int j, int k)
                {
                    int nJ = (j == 0) ? 1 : 7;
                    int nK = (k == 0) ? 1 : 7;

                    if (board.ComparePieceColours(board.pieces[nJ, k], board.pieces[j, nK]) &&
                        board.pieces[j, k] != null && board.pieces[j, k].white != board.pieces[nJ, k].white)
                    {
                        CapturePiece(board, j, k);
                    }
                }

                CheckCorner(0, 0);
                CheckCorner(8, 0);
                CheckCorner(0, 8);
                CheckCorner(8, 8);
            }
Example #5
0
            internal bool[,] PossibleCaptures(PieceBoard board, int x, int y, out bool any)
            {
                bool[,] possible = new bool[8, 8];

                bool captureMove(int x1, int y1, int x2, int y2)
                {
                    if (EnemySpace(board, x1, y1) && EmptySpace(board, x2, y2))
                    {
                        possible[x2, y2] = true;
                        return(true);
                    }
                    return(false);
                }

                //canCapture = false;
                any = false;

                if (white || king)
                {
                    if (captureMove(x - 1, y - 1, x - 2, y - 2) | captureMove(x + 1, y - 1, x + 2, y - 2))
                    {
                        any = true;
                    }
                }

                if (!white || king)
                {
                    if (captureMove(x - 1, y + 1, x - 2, y + 2) | captureMove(x + 1, y + 1, x + 2, y + 2))
                    {
                        any = true;
                    }
                }

                return(possible);
            }
Example #6
0
 public bool canMoveToPosition(Position destiny)
 {
     if (!PieceBoard.isPosition(destiny))
     {
         throw new BoardException("please insert a valid position!");
     }
     return(possibleMov()[destiny.Line, destiny.Column]);
 }
Example #7
0
            public override bool[,] PossibleMoves3(PieceBoard board, int x, int y)
            {
                bool[,] possible = new bool[8, 8];

                if (PossibleSpace(board, x + 1, y))
                {
                    possible[x + 1, y] = true;
                }
                if (PossibleSpace(board, x + 1, y + 1))
                {
                    possible[x + 1, y + 1] = true;
                }
                if (PossibleSpace(board, x + 1, y - 1))
                {
                    possible[x + 1, y - 1] = true;
                }
                if (PossibleSpace(board, x - 1, y))
                {
                    possible[x - 1, y] = true;
                }
                if (PossibleSpace(board, x - 1, y + 1))
                {
                    possible[x - 1, y + 1] = true;
                }
                if (PossibleSpace(board, x - 1, y - 1))
                {
                    possible[x - 1, y - 1] = true;
                }
                if (PossibleSpace(board, x, y + 1))
                {
                    possible[x, y + 1] = true;
                }
                if (PossibleSpace(board, x, y - 1))
                {
                    possible[x, y - 1] = true;
                }

                if (!moved)
                {
                    ChessGame chess = board as ChessGame;

                    if (board.pieces[5, y] == null && board.pieces[6, y] == null &&
                        board.pieces[7, y] is Rook r1 && !r1.moved && r1.white == white &&
                        !chess.InCheck(5, y, white) && !chess.InCheck(6, y, white))
                    {
                        possible[6, y] = true;
                    }

                    if (board.pieces[3, y] == null && board.pieces[2, y] == null && board.pieces[1, y] == null &&
                        board.pieces[0, y] is Rook r2 && !r2.moved && r2.white == white &&
                        !chess.InCheck(3, y, white) && !chess.InCheck(2, y, white))
                    {
                        possible[2, y] = true;
                    }
                }

                return(possible);
            }
Example #8
0
        public override bool[,] PossibleMoves()
        {
            bool[,] matrix = new bool[PieceBoard.Rows, PieceBoard.Columns];

            Position p = new Position(0, 0);

            //up
            p.DefineValues(Position.Row - 1, Position.Column);
            while (PieceBoard.ValidPosition(p) && CanMove(p))
            {
                matrix[p.Row, p.Column] = true;
                if (PieceBoard.piece(p) != null && PieceBoard.piece(p).Color != Color)
                {
                    break;
                }
                p.Row = p.Row - 1;
            }

            //down
            p.DefineValues(Position.Row + 1, Position.Column);
            while (PieceBoard.ValidPosition(p) && CanMove(p))
            {
                matrix[p.Row, p.Column] = true;
                if (PieceBoard.piece(p) != null && PieceBoard.piece(p).Color != Color)
                {
                    break;
                }
                p.Row = p.Row + 1;
            }

            //right
            p.DefineValues(Position.Row, Position.Column + 1);
            while (PieceBoard.ValidPosition(p) && CanMove(p))
            {
                matrix[p.Row, p.Column] = true;
                if (PieceBoard.piece(p) != null && PieceBoard.piece(p).Color != Color)
                {
                    break;
                }
                p.Column = p.Column + 1;
            }

            //left
            p.DefineValues(Position.Row, Position.Column - 1);
            while (PieceBoard.ValidPosition(p) && CanMove(p))
            {
                matrix[p.Row, p.Column] = true;
                if (PieceBoard.piece(p) != null && PieceBoard.piece(p).Color != Color)
                {
                    break;
                }
                p.Column = p.Column - 1;
            }

            return(matrix);
        }
Example #9
0
            public override bool[,] PossibleMoves3(PieceBoard board, int x, int y)
            {
                bool[,] possible = new bool[8, 8];

                DirectionalPossible(ref possible, board, x, y, 1, 1);
                DirectionalPossible(ref possible, board, x, y, -1, 1);
                DirectionalPossible(ref possible, board, x, y, 1, -1);
                DirectionalPossible(ref possible, board, x, y, -1, -1);

                return(possible);
            }
Example #10
0
        public override bool[,] possibleMov()
        {
            bool[,] mat = new bool[PieceBoard.Lines, PieceBoard.Column];


            Position position = new Position(PiecePos.Line - 1, PiecePos.Column);

            while (PieceBoard.isPosition(position) && canMov(position))
            {
                mat[position.Line, position.Column] = true;
                if (PieceBoard.GetPiece(position) != null && PieceBoard.GetPiece(position).PieceColor != PieceColor)
                {
                    break;
                }
                position.Line--;
            }

            position = new Position(PiecePos.Line + 1, PiecePos.Column);
            while (PieceBoard.isPosition(position) && canMov(position))
            {
                mat[position.Line, position.Column] = true;
                if (PieceBoard.GetPiece(position) != null && PieceBoard.GetPiece(position).PieceColor != PieceColor)
                {
                    break;
                }
                position.Line++;
            }

            position = new Position(PiecePos.Line, PiecePos.Column - 1);
            while (PieceBoard.isPosition(position) && canMov(position))
            {
                mat[position.Line, position.Column] = true;
                if (PieceBoard.GetPiece(position) != null && PieceBoard.GetPiece(position).PieceColor != PieceColor)
                {
                    break;
                }
                position.Column--;
            }

            position = new Position(PiecePos.Line, PiecePos.Column + 1);
            while (PieceBoard.isPosition(position) && canMov(position))
            {
                mat[position.Line, position.Column] = true;
                if (PieceBoard.GetPiece(position) != null && PieceBoard.GetPiece(position).PieceColor != PieceColor)
                {
                    break;
                }
                position.Column++;
            }

            return(mat);
        }
Example #11
0
            protected override bool CancelMove(PieceBoard board, int x1, int y1, int x2, int y2, Action action = null)
            {
                if (x2 == x1 + 2)
                {
                    (board.pieces[7, y1] as Rook).Move(board, 7, y1, 5, y1);
                }
                else if (x2 == x1 - 2)
                {
                    (board.pieces[0, y1] as Rook).Move(board, 0, y1, 3, y1);
                }

                return(false);
            }
Example #12
0
        public override bool[,] possibleMov()
        {
            bool[,] mat = new bool [PieceBoard.Lines, PieceBoard.Column];

            //if (PieceBoard.isPosition(pos) && canMov(pos))

            Position pos = new Position(PiecePos.Line + 1, PiecePos.Column + 2);

            if (PieceBoard.isPosition(pos) && canMov(pos))
            {
                mat[pos.Line, pos.Column] = true;
            }
            pos = new Position(PiecePos.Line + 2, PiecePos.Column + 1);

            if (PieceBoard.isPosition(pos) && canMov(pos))
            {
                mat[pos.Line, pos.Column] = true;
            }
            pos = new Position(PiecePos.Line - 1, PiecePos.Column + 2);

            if (PieceBoard.isPosition(pos) && canMov(pos))
            {
                mat[pos.Line, pos.Column] = true;
            }
            pos = new Position(PiecePos.Line + 1, PiecePos.Column - 2);

            if (PieceBoard.isPosition(pos) && canMov(pos))
            {
                mat[pos.Line, pos.Column] = true;
            }
            pos = new Position(PiecePos.Line - 1, PiecePos.Column - 2);

            if (PieceBoard.isPosition(pos) && canMov(pos))
            {
                mat[pos.Line, pos.Column] = true;
            }
            pos = new Position(PiecePos.Line - 2, PiecePos.Column - 1);

            if (PieceBoard.isPosition(pos) && canMov(pos))
            {
                mat[pos.Line, pos.Column] = true;
            }
            pos = new Position(PiecePos.Line - 2, PiecePos.Column + 1);

            if (PieceBoard.isPosition(pos) && canMov(pos))
            {
                mat[pos.Line, pos.Column] = true;
            }
            return(mat);
        }
Example #13
0
            public override bool[,] PossibleMoves3(PieceBoard board, int x, int y)
            {
                bool[,] possible = new bool[8, 8];

                if (white)
                {
                    if (EmptySpace(board, x, y - 1))
                    {
                        possible[x, y - 1] = true;

                        if (y == 6 && EmptySpace(board, x, y - 2))
                        {
                            possible[x, y - 2] = true;
                        }
                    }

                    if (EnemySpace(board, x + 1, y - 1))
                    {
                        possible[x + 1, y - 1] = true;
                    }
                    if (EnemySpace(board, x - 1, y - 1))
                    {
                        possible[x - 1, y - 1] = true;
                    }
                }
                else
                {
                    if (EmptySpace(board, x, y + 1))
                    {
                        possible[x, y + 1] = true;

                        if (y == 1 && EmptySpace(board, x, y + 2))
                        {
                            possible[x, y + 2] = true;
                        }
                    }

                    if (EnemySpace(board, x + 1, y + 1))
                    {
                        possible[x + 1, y + 1] = true;
                    }
                    if (EnemySpace(board, x - 1, y + 1))
                    {
                        possible[x - 1, y + 1] = true;
                    }
                }

                return(possible);
            }
Example #14
0
        public override bool[,] possibleMov()
        {
            Position position = new Position(PiecePos.Line, PiecePos.Column);

            bool[,] mat = new bool[PieceBoard.Lines, PieceBoard.Column];

            for (int i = position.Line - 1; i <= position.Line + 1; i++)
            {
                for (int j = position.Column - 1; j <= position.Column + 1; j++)
                {
                    if (PieceBoard.isPosition(new Position(i, j)) && canMov(new Position(i, j)))
                    {
                        mat[i, j] = true;
                    }
                    else if (PieceBoard.isPosition(new Position(i, j)) && !canMov(new Position(i, j)))
                    {
                        mat[i, j] = false;
                    }
                }
            }
            //#expessial movies
            if (QteMoviment == 0 && !KingMatch.adversaryCheck)
            {
                Position posT  = new Position(PiecePos.Line, PiecePos.Column - 3);
                Position posT2 = new Position(PiecePos.Line, PiecePos.Column + 4);
                if (isTowerRoque(posT))
                {
                    Position p1 = new Position(PiecePos.Line, PiecePos.Column - 1);
                    Position p2 = new Position(PiecePos.Line, PiecePos.Column - 2);
                    if (PieceBoard.GetPiece(p1) == null && PieceBoard.GetPiece(p2) == null)
                    {
                        mat[PiecePos.Line, PiecePos.Column - 2] = true;
                    }
                }
                if (isTowerRoque(posT2))
                {
                    Position p1 = new Position(PiecePos.Line, PiecePos.Column + 1);
                    Position p2 = new Position(PiecePos.Line, PiecePos.Column + 2);
                    Position p3 = new Position(PiecePos.Line, PiecePos.Column + 3);
                    if (PieceBoard.GetPiece(p1) == null && PieceBoard.GetPiece(p2) == null && PieceBoard.GetPiece(p3) == null)
                    {
                        mat[PiecePos.Line, PiecePos.Column + 2] = true;
                    }
                }
            }
            return(mat);
        }
Example #15
0
            void DirectionalPossible(ref bool[,] possible, PieceBoard board, int x, int y, int dX, int dY)
            {
                int sX = x;
                int sY = y;

                while (true)
                {
                    if (!EmptySpace(board, sX + dX, sY + dY))
                    {
                        break;
                    }

                    sX += dX;
                    sY += dY;

                    possible[sX, sY] = true;
                }
            }
Example #16
0
 public override void BeforeMove(PieceBoard board, int x1, int y1, int x2, int y2)
 {
     if (turnInto == 0)
     {
         base.BeforeMove(board, x1, y1, x2, y2);
     }
     else
     {
         SendGameMessage(msg =>
         {
             msg.Write(x1);
             msg.Write(y1);
             msg.Write(x2);
             msg.Write(y2);
             msg.Write(turnInto);
         });
     }
 }
Example #17
0
            protected override void AfterMove(PieceBoard board, int x1, int y1, int x2, int y2)
            {
                if (Math.Abs(x2 - x1) == 2)
                {
                    board.pieces[(x1 + x2) / 2, (y1 + y2) / 2] = null;
                    (board as DraughtsGame).capturingPiece     = new Point(x2, y2);
                }

                if (!king && (y2 == 0 || y2 == 7))
                {
                    king = true;
                    MobilePiece piece = this;

                    board.pieces[x2, y2] = null;

                    board.animations.Add(new SpriteAnim(white ? whitePieces.flip : blackPieces.flip,
                                                        new Vector2(x2, y2) + Vector2.One / 2,
                                                        () => board.pieces[x2, y2] = piece));
                }
            }
Example #18
0
            public override bool[,] PossibleMoves3(PieceBoard board, int x, int y)
            {
                bool[,] possible = new bool[8, 8];

                if (PossibleSpace(board, x + 2, y + 1))
                {
                    possible[x + 2, y + 1] = true;
                }
                if (PossibleSpace(board, x + 2, y - 1))
                {
                    possible[x + 2, y - 1] = true;
                }
                if (PossibleSpace(board, x + 1, y - 2))
                {
                    possible[x + 1, y - 2] = true;
                }
                if (PossibleSpace(board, x - 1, y - 2))
                {
                    possible[x - 1, y - 2] = true;
                }
                if (PossibleSpace(board, x - 2, y + 1))
                {
                    possible[x - 2, y + 1] = true;
                }
                if (PossibleSpace(board, x - 2, y - 1))
                {
                    possible[x - 2, y - 1] = true;
                }
                if (PossibleSpace(board, x + 1, y + 2))
                {
                    possible[x + 1, y + 2] = true;
                }
                if (PossibleSpace(board, x - 1, y + 2))
                {
                    possible[x - 1, y + 2] = true;
                }

                return(possible);
            }
Example #19
0
            public override bool[,] PossibleMoves2(PieceBoard board, int x, int y)
            {
                Point capturing = (board as DraughtsGame).capturingPiece;

                if (capturing.X != -1 && (capturing.X != x || capturing.Y != y))
                {
                    return(new bool[8, 8]);
                }

                bool[,] possible = PossibleMoves3(board, x, y, out bool canCapture);

                if (canCapture)
                {
                    return(possible);
                }

                for (int i = 0; i < 8; i++)
                {
                    for (int j = 0; j < 8; j++)
                    {
                        if (x == i && y == j)
                        {
                            continue;
                        }

                        if (board.pieces[i, j] != null && board.pieces[i, j].white == white)
                        {
                            (board.pieces[i, j] as Draught).PossibleCaptures(board, i, j, out bool any);

                            if (any)
                            {
                                return(new bool[8, 8]);
                            }
                        }
                    }
                }

                return(possible);
            }
Example #20
0
            protected override bool CancelMove(PieceBoard board, int x1, int y1, int x2, int y2, Action action = null)
            {
                if (turnInto == 0 && (y2 == 0 || y2 == 7))
                {
                    OptionsOverlay splash = new OptionsOverlay("What will your pawn turn into?", new string[] { "Knight", "Bishop", "Rook", "Queen" })
                    {
                        action = (string s) =>
                        {
                            switch (s)
                            {
                            case "Knight":
                                turnInto = 1;
                                break;

                            case "Bishop":
                                turnInto = 2;
                                break;

                            case "Rook":
                                turnInto = 3;
                                break;

                            case "Queen":
                                turnInto = 4;
                                break;
                            }

                            Move(board, x1, y1, x2, y2, action);
                        }
                    };
                    board.overlay = splash;
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
Example #21
0
            protected override void AfterMove(PieceBoard board, int x1, int y1, int x2, int y2)
            {
                if (y2 == 0 || y2 == 7)
                {
                    switch (turnInto)
                    {
                    case 1:
                        board.pieces[x2, y2] = new Knight(white);
                        break;

                    case 2:
                        board.pieces[x2, y2] = new Bishop(white);
                        break;

                    case 3:
                        board.pieces[x2, y2] = new Rook(white);
                        break;

                    case 4:
                        board.pieces[x2, y2] = new Queen(white);
                        break;
                    }
                }
            }
Example #22
0
            protected bool[,] PossibleMoves3(PieceBoard board, int x, int y, out bool canCapture)
            {
                bool[,] possible = PossibleCaptures(board, x, y, out canCapture);

                if (white || king)
                {
                    if (!canCapture)
                    {
                        if (EmptySpace(board, x - 1, y - 1))
                        {
                            possible[x - 1, y - 1] = true;
                        }
                        if (EmptySpace(board, x + 1, y - 1))
                        {
                            possible[x + 1, y - 1] = true;
                        }
                    }
                }

                if (!white || king)
                {
                    if (!canCapture)
                    {
                        if (EmptySpace(board, x - 1, y + 1))
                        {
                            possible[x - 1, y + 1] = true;
                        }
                        if (EmptySpace(board, x + 1, y + 1))
                        {
                            possible[x + 1, y + 1] = true;
                        }
                    }
                }

                return(possible);
            }
Example #23
0
        private bool isTowerRoque(Position pos)
        {
            Piece p = PieceBoard.GetPiece(pos);

            return(p != null && p is Tower && p.PieceColor == this.PieceColor && p.QteMoviment == 0);
        }
Example #24
0
 public abstract bool[,] PossibleMoves3(PieceBoard board, int x, int y);
Example #25
0
        public override bool[,] possibleMov()
        {
            bool[,] mat = new bool[PieceBoard.Lines, PieceBoard.Column];
            ChessMatch match = new ChessMatch();

            if (PieceColor == Color.white)
            {
                int line   = PiecePos.Line;
                int col    = PiecePos.Column + 1;
                int revcol = PiecePos.Column - 1;

                if (PiecePos.Line == 6)
                {
                    while (line > PiecePos.Line - 3)
                    {
                        if (PieceBoard.isPosition(new Position(PiecePos.Line - 1, col)) && canCapture(new Position(PiecePos.Line - 1, col)))
                        {
                            mat[PiecePos.Line - 1, col] = true;
                        }
                        if (PieceBoard.isPosition(new Position(PiecePos.Line - 1, revcol)) && canCapture(new Position(PiecePos.Line - 1, revcol)))
                        {
                            mat[PiecePos.Line - 1, revcol] = true;
                        }
                        if (PieceBoard.isPosition(new Position(line, PiecePos.Column)) && canMov(new Position(line, PiecePos.Column)))
                        {
                            mat[line, PiecePos.Column] = true;
                        }
                        line--;
                    }
                }
                else
                {
                    if (PieceBoard.isPosition(new Position(line - 1, col)) && canCapture(new Position(line - 1, col)))
                    {
                        mat[line - 1, col] = true;
                    }
                    if (PieceBoard.isPosition(new Position(line - 1, revcol)) && canCapture(new Position(line - 1, revcol)))
                    {
                        mat[line - 1, revcol] = true;
                    }
                    if (PieceBoard.isPosition(new Position(line - 1, PiecePos.Column)) && canMov(new Position(line - 1, PiecePos.Column)))
                    {
                        mat[line - 1, PiecePos.Column] = true;
                    }
                }

                //en passant
                if (PiecePos.Line == 3)
                {
                    Position left = new Position(PiecePos.Line, PiecePos.Column - 1);
                    if (PieceBoard.isPieceOnPos(left) && isEnemy(left) && PieceBoard.GetPiece(left) == _match._vulnerableEnPassant)
                    {
                        mat[left.Line - 1, left.Column] = true;
                    }
                    Position right = new Position(PiecePos.Line, PiecePos.Column + 1);
                    if (PieceBoard.isPieceOnPos(right) && isEnemy(right) && PieceBoard.GetPiece(right) == _match._vulnerableEnPassant)
                    {
                        mat[right.Line - 1, right.Column] = true;
                    }
                }
            }
            else
            {
                int line   = PiecePos.Line;
                int col    = PiecePos.Column + 1;
                int revcol = PiecePos.Column - 1;

                if (PiecePos.Line == 1)
                {
                    while (line < PiecePos.Line + 3)
                    {
                        if (PieceBoard.isPosition(new Position(PiecePos.Line + 1, col)) && canCapture(new Position(PiecePos.Line + 1, col)))
                        {
                            mat[PiecePos.Line + 1, col] = true;
                        }
                        if (PieceBoard.isPosition(new Position(PiecePos.Line + 1, revcol)) && canCapture(new Position(PiecePos.Line + 1, revcol)))
                        {
                            mat[PiecePos.Line + 1, revcol] = true;
                        }
                        if (PieceBoard.isPosition(new Position(line, PiecePos.Column)) && canMov(new Position(line, PiecePos.Column)))
                        {
                            mat[line, PiecePos.Column] = true;
                        }
                        line++;
                    }
                }
                else
                {
                    if (PieceBoard.isPosition(new Position(line + 1, col)) && canCapture(new Position(line + 1, col)))
                    {
                        mat[line + 1, col] = true;
                    }
                    if (PieceBoard.isPosition(new Position(line + 1, revcol)) && canCapture(new Position(line + 1, revcol)))
                    {
                        mat[line + 1, revcol] = true;
                    }
                    if (PieceBoard.isPosition(new Position(line + 1, PiecePos.Column)) && canMov(new Position(line + 1, PiecePos.Column)))
                    {
                        mat[line + 1, PiecePos.Column] = true;
                    }
                }
                //en passant
                if (PiecePos.Line == 4)
                {
                    Position left = new Position(PiecePos.Line, PiecePos.Column - 1);
                    if (PieceBoard.isPieceOnPos(left) && isEnemy(left) && PieceBoard.GetPiece(left) == _match._vulnerableEnPassant)
                    {
                        mat[left.Line + 1, left.Column] = true;
                    }
                    Position right = new Position(PiecePos.Line, PiecePos.Column + 1);
                    if (PieceBoard.isPieceOnPos(right) && isEnemy(right) && PieceBoard.GetPiece(right) == _match._vulnerableEnPassant)
                    {
                        mat[right.Line + 1, right.Column] = true;
                    }
                }
            }

            return(mat);
        }
Example #26
0
        public override bool[,] possibleMov()
        {
            bool[,] mat = new bool[PieceBoard.Lines, PieceBoard.Column];
            Position position   = new Position(PiecePos.Line, PiecePos.Column);
            int      acum       = position.Line + 1;
            int      dec        = position.Line - 1;
            bool     isMoveAcum = true;
            bool     isMoveDec  = true;

            for (int j = position.Column - 1; j >= 0; j--)
            {
                if (PieceBoard.isPosition(new Position(acum, j)) && canMov(new Position(acum, j)) && isMoveAcum)
                {
                    mat[acum, j] = true;
                }
                else
                {
                    isMoveAcum = false;
                }
                acum++;
                if (PieceBoard.isPosition(new Position(dec, j)) && canMov(new Position(dec, j)) && isMoveDec)
                {
                    mat[dec, j] = true;
                }
                else
                {
                    isMoveDec = false;
                }
                dec--;
            }
            isMoveAcum = true;
            isMoveDec  = true;
            position   = new Position(PiecePos.Line, PiecePos.Column);
            dec        = position.Line - 1;
            acum       = position.Line + 1;
            for (int j = position.Column + 1; j < PieceBoard.Column; j++)
            {
                if (PieceBoard.isPosition(new Position(acum, j)) && canMov(new Position(acum, j)) && isMoveAcum)
                {
                    mat[acum, j] = true;
                }
                else
                {
                    isMoveAcum = false;
                }
                acum++;
                if (PieceBoard.isPosition(new Position(dec, j)) && canMov(new Position(dec, j)) && isMoveDec)
                {
                    mat[dec, j] = true;
                }
                else
                {
                    isMoveDec = false;
                }
                dec--;
            }
            isMoveAcum = true;
            isMoveDec  = true;
            position   = new Position(PiecePos.Line - 1, PiecePos.Column);
            while (PieceBoard.isPosition(position) && canMov(position))
            {
                mat[position.Line, position.Column] = true;
                if (PieceBoard.GetPiece(position) != null && PieceBoard.GetPiece(position).PieceColor != PieceColor)
                {
                    break;
                }
                position.Line--;
            }

            position = new Position(PiecePos.Line + 1, PiecePos.Column);
            while (PieceBoard.isPosition(position) && canMov(position))
            {
                mat[position.Line, position.Column] = true;
                if (PieceBoard.GetPiece(position) != null && PieceBoard.GetPiece(position).PieceColor != PieceColor)
                {
                    break;
                }
                position.Line++;
            }

            position = new Position(PiecePos.Line, PiecePos.Column - 1);
            while (PieceBoard.isPosition(position) && canMov(position))
            {
                mat[position.Line, position.Column] = true;
                if (PieceBoard.GetPiece(position) != null && PieceBoard.GetPiece(position).PieceColor != PieceColor)
                {
                    break;
                }
                position.Column--;
            }

            position = new Position(PiecePos.Line, PiecePos.Column + 1);
            while (PieceBoard.isPosition(position) && canMov(position))
            {
                mat[position.Line, position.Column] = true;
                if (PieceBoard.GetPiece(position) != null && PieceBoard.GetPiece(position).PieceColor != PieceColor)
                {
                    break;
                }
                position.Column++;
            }

            return(mat);
        }
Example #27
0
        private bool CanMove(Position position)
        {
            Piece piece = PieceBoard.piece(position);

            return(piece == null || piece.Color != Color);
        }
Example #28
0
        public override bool[,] PossibleMoves()
        {
            bool[,] matrix = new bool[PieceBoard.Rows, PieceBoard.Columns];

            Position p = new Position(0, 0);

            //up
            p.DefineValues(Position.Row - 1, Position.Column);
            if (PieceBoard.ValidPosition(p) && CanMove(p))
            {
                matrix[p.Row, p.Column] = true;
            }

            //up&right
            p.DefineValues(Position.Row - 1, Position.Column + 1);
            if (PieceBoard.ValidPosition(p) && CanMove(p))
            {
                matrix[p.Row, p.Column] = true;
            }

            //right
            p.DefineValues(Position.Row, Position.Column + 1);
            if (PieceBoard.ValidPosition(p) && CanMove(p))
            {
                matrix[p.Row, p.Column] = true;
            }

            //down&right
            p.DefineValues(Position.Row + 1, Position.Column + 1);
            if (PieceBoard.ValidPosition(p) && CanMove(p))
            {
                matrix[p.Row, p.Column] = true;
            }

            //down
            p.DefineValues(Position.Row + 1, Position.Column);
            if (PieceBoard.ValidPosition(p) && CanMove(p))
            {
                matrix[p.Row, p.Column] = true;
            }

            //down&left
            p.DefineValues(Position.Row + 1, Position.Column - 1);
            if (PieceBoard.ValidPosition(p) && CanMove(p))
            {
                matrix[p.Row, p.Column] = true;
            }

            //left
            p.DefineValues(Position.Row, Position.Column - 1);
            if (PieceBoard.ValidPosition(p) && CanMove(p))
            {
                matrix[p.Row, p.Column] = true;
            }

            //up&left
            p.DefineValues(Position.Row - 1, Position.Column - 1);
            if (PieceBoard.ValidPosition(p) && CanMove(p))
            {
                matrix[p.Row, p.Column] = true;
            }

            return(matrix);
        }
Example #29
0
 void CapturePiece(PieceBoard board, int x, int y)
 {
     board.animations.Add(new ZoomAnim(board.pieces[x, y].GetTexture, new Vector2(x, y), null, Vector2.One, Vector2.Zero));
     board.pieces[x, y] = null;
 }
Example #30
0
        private bool canMov(Position p)
        {
            Piece aux = PieceBoard.GetPiece(p);

            return(aux == null || aux.PieceColor != PieceColor);
        }