示例#1
0
        public override bool[,] PossibleMovements()
        {
            bool[,] matrix = new bool[Board.Rows, Board.Cols];

            Position pos = new Position(0, 0);

            // up
            pos.Row = Position.Row - 1;
            pos.Col = Position.Col;
            while (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
                if (Board.GetPiece(pos) != null && Board.GetPiece(pos).Color != Color)
                {
                    break;
                }
                pos.Row--;
            }

            // right
            pos.Row = Position.Row;
            pos.Col = Position.Col + 1;
            while (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
                if (Board.GetPiece(pos) != null && Board.GetPiece(pos).Color != Color)
                {
                    break;
                }
                pos.Col++;
            }

            // down
            pos.Row = Position.Row + 1;
            pos.Col = Position.Col;
            while (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
                if (Board.GetPiece(pos) != null && Board.GetPiece(pos).Color != Color)
                {
                    break;
                }
                pos.Row++;
            }

            // left
            pos.Row = Position.Row;
            pos.Col = Position.Col - 1;
            while (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
                if (Board.GetPiece(pos) != null && Board.GetPiece(pos).Color != Color)
                {
                    break;
                }
                pos.Col--;
            }

            return(matrix);
        }
示例#2
0
        public override bool[,] PossibleMovements()
        {
            bool[,] matrix = new bool[Board.Rows, Board.Cols];

            Position pos = new Position(0, 0);

            if (Color == Color.White)
            {
                pos.Row = Position.Row - 1;
                pos.Col = Position.Col;
                if (Board.IsValidPosition(pos) && FreePosition(pos))
                {
                    matrix[pos.Row, pos.Col] = true;
                }

                pos.Row = Position.Row - 2;
                pos.Col = Position.Col;
                if (Board.IsValidPosition(pos) && FreePosition(pos) && QtyMovements == 0)
                {
                    matrix[pos.Row, pos.Col] = true;
                }

                pos.Row = Position.Row - 1;
                pos.Col = Position.Col - 1;
                if (Board.IsValidPosition(pos) && HasOpponent(pos))
                {
                    matrix[pos.Row, pos.Col] = true;
                }

                pos.Row = Position.Row - 1;
                pos.Col = Position.Col + 1;
                if (Board.IsValidPosition(pos) && HasOpponent(pos))
                {
                    matrix[pos.Row, pos.Col] = true;
                }

                // En Passant
                if (Position.Row == 3)
                {
                    Position leftPos = new Position(Position.Row, Position.Col - 1);
                    if (Board.IsValidPosition(leftPos) && HasOpponent(leftPos) && Board.GetPiece(leftPos) == Game.VulnerableEnPassant)
                    {
                        matrix[leftPos.Row - 1, leftPos.Col] = true;
                    }
                    Position rightPos = new Position(Position.Row, Position.Col + 1);
                    if (Board.IsValidPosition(rightPos) && HasOpponent(rightPos) && Board.GetPiece(rightPos) == Game.VulnerableEnPassant)
                    {
                        matrix[rightPos.Row - 1, rightPos.Col] = true;
                    }
                }
            }
            else
            {
                pos.Row = Position.Row + 1;
                pos.Col = Position.Col;
                if (Board.IsValidPosition(pos) && FreePosition(pos))
                {
                    matrix[pos.Row, pos.Col] = true;
                }

                pos.Row = Position.Row + 2;
                pos.Col = Position.Col;
                if (Board.IsValidPosition(pos) && FreePosition(pos) && QtyMovements == 0)
                {
                    matrix[pos.Row, pos.Col] = true;
                }

                pos.Row = Position.Row + 1;
                pos.Col = Position.Col - 1;
                if (Board.IsValidPosition(pos) && HasOpponent(pos))
                {
                    matrix[pos.Row, pos.Col] = true;
                }

                pos.Row = Position.Row + 1;
                pos.Col = Position.Col + 1;
                if (Board.IsValidPosition(pos) && HasOpponent(pos))
                {
                    matrix[pos.Row, pos.Col] = true;
                }

                // En Passant
                if (Position.Row == 4)
                {
                    Position leftPos = new Position(Position.Row, Position.Col - 1);
                    if (Board.IsValidPosition(leftPos) && HasOpponent(leftPos) && Board.GetPiece(leftPos) == Game.VulnerableEnPassant)
                    {
                        matrix[leftPos.Row + 1, leftPos.Col] = true;
                    }
                    Position rightPos = new Position(Position.Row, Position.Col + 1);
                    if (Board.IsValidPosition(rightPos) && HasOpponent(rightPos) && Board.GetPiece(rightPos) == Game.VulnerableEnPassant)
                    {
                        matrix[rightPos.Row + 1, rightPos.Col] = true;
                    }
                }
            }


            return(matrix);
        }
示例#3
0
        public override bool[,] PossibleMovements()
        {
            bool[,] matrix = new bool[Board.Rows, Board.Cols];

            Position pos = new Position(0, 0);

            pos.Row = Position.Row - 1;
            pos.Col = Position.Col - 2;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            pos.Row = Position.Row - 1;
            pos.Col = Position.Col + 2;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            pos.Row = Position.Row - 2;
            pos.Col = Position.Col - 1;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            pos.Row = Position.Row - 2;
            pos.Col = Position.Col + 1;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            pos.Row = Position.Row + 1;
            pos.Col = Position.Col + 2;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            pos.Row = Position.Row + 1;
            pos.Col = Position.Col - 2;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            pos.Row = Position.Row + 2;
            pos.Col = Position.Col - 1;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            pos.Row = Position.Row + 2;
            pos.Col = Position.Col + 1;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            return(matrix);
        }
示例#4
0
        public override bool[,] PossibleMovements()
        {
            bool[,] matrix = new bool[Board.Rows, Board.Cols];

            Position pos = new Position(0, 0);

            // up
            pos.Row = Position.Row - 1;
            pos.Col = Position.Col;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            // up right
            pos.Row = Position.Row - 1;
            pos.Col = Position.Col + 1;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            // right
            pos.Row = Position.Row;
            pos.Col = Position.Col + 1;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            // down right
            pos.Row = Position.Row + 1;
            pos.Col = Position.Col + 1;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            // down
            pos.Row = Position.Row + 1;
            pos.Col = Position.Col;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            // down left
            pos.Row = Position.Row + 1;
            pos.Col = Position.Col - 1;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            // left
            pos.Row = Position.Row;
            pos.Col = Position.Col - 1;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            // up left
            pos.Row = Position.Row - 1;
            pos.Col = Position.Col - 1;
            if (Board.IsValidPosition(pos) && CanMove(pos))
            {
                matrix[pos.Row, pos.Col] = true;
            }

            // Castling
            if (QtyMovements == 0 && !Game.Check)
            {
                Position posRook1 = new Position(Position.Row, Position.Col + 3);
                if (CheckRookForCastling(posRook1))
                {
                    Position pos1 = new Position(Position.Row, Position.Col + 1);
                    Position pos2 = new Position(Position.Row, Position.Col + 2);
                    if (Board.GetPiece(pos1) == null && Board.GetPiece(pos2) == null)
                    {
                        matrix[Position.Row, Position.Col + 2] = true;
                    }
                }
                Position posRook2 = new Position(Position.Row, Position.Col - 4);
                if (CheckRookForCastling(posRook2))
                {
                    Position pos1 = new Position(Position.Row, Position.Col - 1);
                    Position pos2 = new Position(Position.Row, Position.Col - 2);
                    Position pos3 = new Position(Position.Row, Position.Col - 3);
                    if (Board.GetPiece(pos1) == null && Board.GetPiece(pos2) == null && Board.GetPiece(pos3) == null)
                    {
                        matrix[Position.Row, Position.Col - 2] = true;
                    }
                }
            }

            return(matrix);
        }