Exemplo n.º 1
0
        /* possible moves = true
         * @return bool[,]
         */
        public override bool[,] GetPossibleMoves()
        {
            bool[,] m = new bool[this.Board.Rows, this.Board.Columns];
            Position pos;

            //n
            pos = new Position(this.Position.Row - 1, this.Position.Column);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }

            //ne
            pos.NewValues(this.Position.Row - 1, this.Position.Column + 1);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }

            //e
            pos.NewValues(this.Position.Row, this.Position.Column + 1);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }

            //se
            pos.NewValues(this.Position.Row + 1, this.Position.Column + 1);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }

            //s
            pos.NewValues(this.Position.Row + 1, this.Position.Column);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }

            //sw
            pos.NewValues(this.Position.Row + 1, this.Position.Column - 1);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }

            //w
            pos.NewValues(this.Position.Row, this.Position.Column - 1);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }

            //nw
            pos.NewValues(this.Position.Row - 1, this.Position.Column - 1);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }


            if (this.MoveCounter == 0 && !_match.Check)
            {
                /*** King-side castling ***/
                Position PosR1 = new Position(Position.Row, Position.Column + 3);

                if (TestRookCastling(PosR1))
                {
                    Position p1 = new Position(Position.Row, Position.Column + 1);
                    Position p2 = new Position(Position.Row, Position.Column + 2);
                    if (this.Board.GetPiece(p1) == null && this.Board.GetPiece(p2) == null)
                    {
                        m[this.Position.Row, this.Position.Column + 2] = true;
                    }
                }

                /*** Queen-side castling ***/
                Position PosR2 = new Position(Position.Row, Position.Column - 4);

                if (TestRookCastling(PosR1))
                {
                    Position p1 = new Position(Position.Row, Position.Column - 1);
                    Position p2 = new Position(Position.Row, Position.Column - 2);
                    Position p3 = new Position(Position.Row, Position.Column - 3);
                    if (this.Board.GetPiece(p1) == null && this.Board.GetPiece(p2) == null &&
                        this.Board.GetPiece(p3) == null)
                    {
                        m[this.Position.Row, this.Position.Column - 2] = true;
                    }
                }
            }



            return(m);
        }
Exemplo n.º 2
0
        /* possible moves = true
         * @return bool[,]
         */
        public override bool[,] GetPossibleMoves()
        {
            bool[,] m = new bool[this.Board.Rows, this.Board.Columns];
            Position pos;

            //n
            pos = new Position(this.Position.Row - 1, this.Position.Column);
            while (this.Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;

                if (this.Board.GetPiece(pos) != null && this.Board.GetPiece(pos).Color != this.Color)
                {
                    break;
                }

                pos.Row = pos.Row - 1;
            }

            //s
            pos.NewValues(this.Position.Row + 1, this.Position.Column);
            while (this.Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;

                if (this.Board.GetPiece(pos) != null &&
                    this.Board.GetPiece(pos).Color != this.Color)
                {
                    break;
                }

                pos.Row = pos.Row + 1;
            }

            //e
            pos.NewValues(this.Position.Row, this.Position.Column + 1);
            while (this.Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;

                if (this.Board.GetPiece(pos) != null &&
                    this.Board.GetPiece(pos).Color != this.Color)
                {
                    break;
                }

                pos.Column = pos.Column + 1;
            }

            //w
            pos.NewValues(this.Position.Row, this.Position.Column - 1);
            while (this.Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;

                if (this.Board.GetPiece(pos) != null &&
                    this.Board.GetPiece(pos).Color != this.Color)
                {
                    break;
                }

                pos.Column = pos.Column - 1;
            }
            return(m);
        }
Exemplo n.º 3
0
        /* possible moves = true
         * @return bool[,]
         */
        public override bool[,] GetPossibleMoves()
        {
            bool[,] m = new bool[this.Board.Rows, this.Board.Columns];
            Position pos;

            if (this.Color == Color.White)
            {
                pos = new Position(this.Position.Row - 1, this.Position.Column);
                if (this.Board.IsValid(pos) && EmptyPos(pos))
                {
                    m[pos.Row, pos.Column] = true;
                }

                pos.NewValues(this.Position.Row - 2, this.Position.Column);
                if (this.Board.IsValid(pos) && EmptyPos(pos) && this.MoveCounter == 0)
                {
                    m[pos.Row, pos.Column] = true;
                }

                pos = new Position(this.Position.Row - 1, this.Position.Column - 1);
                if (this.Board.IsValid(pos) && HasOpponent(pos))
                {
                    m[pos.Row, pos.Column] = true;
                }

                pos = new Position(this.Position.Row - 1, this.Position.Column + 1);
                if (this.Board.IsValid(pos) && HasOpponent(pos))
                {
                    m[pos.Row, pos.Column] = true;
                }

                //*** En Passant ***//
                if (this.Position.Row == 3)
                {
                    Position left = new Position(this.Position.Row, this.Position.Column - 1);

                    if (this.Board.IsValid(left) && HasOpponent(left) &&
                        this.Board.GetPiece(left) == _chessMatch.EnPassant)
                    {
                        m[left.Row - 1, left.Column] = true;
                    }

                    Position right = new Position(this.Position.Row, this.Position.Column + 1);

                    if (this.Board.IsValid(left) && HasOpponent(right) &&
                        this.Board.GetPiece(left) == _chessMatch.EnPassant)
                    {
                        m[right.Row - 1, right.Column] = true;
                    }
                }
            }
            else
            {
                pos = new Position(this.Position.Row + 1, this.Position.Column);
                if (this.Board.IsValid(pos) && EmptyPos(pos))
                {
                    m[pos.Row, pos.Column] = true;
                }

                pos.NewValues(this.Position.Row + 2, this.Position.Column);
                if (this.Board.IsValid(pos) && EmptyPos(pos) && this.MoveCounter == 0)
                {
                    m[pos.Row, pos.Column] = true;
                }

                pos = new Position(this.Position.Row + 1, this.Position.Column - 1);
                if (this.Board.IsValid(pos) && HasOpponent(pos))
                {
                    m[pos.Row, pos.Column] = true;
                }

                pos = new Position(this.Position.Row + 1, this.Position.Column + 1);
                if (this.Board.IsValid(pos) && HasOpponent(pos))
                {
                    m[pos.Row, pos.Column] = true;
                }

                //*** En Passant ***//
                if (this.Position.Row == 4)
                {
                    Position left = new Position(this.Position.Row, this.Position.Column - 1);

                    if (this.Board.IsValid(left) && HasOpponent(left) &&
                        this.Board.GetPiece(left) == _chessMatch.EnPassant)
                    {
                        m[left.Row + 1, left.Column] = true;
                    }

                    Position right = new Position(this.Position.Row, this.Position.Column + 1);

                    if (this.Board.IsValid(right) && HasOpponent(right) &&
                        this.Board.GetPiece(right) == _chessMatch.EnPassant)
                    {
                        m[right.Row + 1, right.Column] = true;
                    }
                }
            }
            return(m);
        }
Exemplo n.º 4
0
        /* possible moves = true
         * @return bool[,]
         */
        public override bool[,] GetPossibleMoves()
        {
            bool[,] m = new bool[this.Board.Rows, this.Board.Columns];
            Position pos;

            pos = new Position(this.Position.Row - 1, this.Position.Column - 2);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }


            pos.NewValues(this.Position.Row - 2, this.Position.Column - 1);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }


            pos.NewValues(this.Position.Row - 2, this.Position.Column + 1);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }


            pos.NewValues(this.Position.Row - 1, this.Position.Column + 2);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }


            pos.NewValues(this.Position.Row + 1, this.Position.Column + 2);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }


            pos.NewValues(this.Position.Row + 2, this.Position.Column + 1);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }


            pos.NewValues(this.Position.Row + 2, this.Position.Column - 1);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }


            pos.NewValues(this.Position.Row + 1, this.Position.Column - 2);

            if (Board.IsValid(pos) && PossibleMove(pos))
            {
                m[pos.Row, pos.Column] = true;
            }

            return(m);
        }