Пример #1
0
        public override IList <Square> GetAvailableMoves(ChessBoard board)
        {
            Square        cell           = this.Square;
            List <Square> availableMoves = new List <Square>();

            for (int dir = 0; dir < 4; dir++)
            {
                int    x      = this.Square.X;
                int    y      = this.Square.Y;
                Figure figure = null;
                while (figure == null)
                {
                    if (dir < 2)
                    {
                        if (dir % 2 == 0)
                        {
                            x++;
                        }
                        else
                        {
                            x--;
                        }
                    }
                    else
                    {
                        if (dir % 2 == 0)
                        {
                            y++;
                        }
                        else
                        {
                            y--;
                        }
                    }
                    if (!board.IsValid(x, y))
                    {
                        break;
                    }
                    if (board.IsEmpty(x, y))
                    {
                        availableMoves.Add(new Square(x, y));
                    }
                    else
                    {
                        figure = board.Figures[x, y];
                        if (figure.Color != this.Color)
                        {
                            availableMoves.Add(new Square(x, y));
                        }
                    }
                }
            }
            return(availableMoves);
        }
Пример #2
0
        public override IList <Square> GetAvailableMoves(ChessBoard board)
        {
            Square        cell           = this.Square;
            List <Square> availableMoves = new List <Square>();

            if (board.IsValid(cell.X + 1, cell.Y + 2) && board.IsEmptyOrEnemyFigure(cell.X + 1, cell.Y + 2, this.Color))
            {
                availableMoves.Add(new Square(cell.X + 1, cell.Y + 2));
            }
            if (board.IsValid(cell.X - 1, cell.Y + 2) && board.IsEmptyOrEnemyFigure(cell.X - 1, cell.Y + 2, this.Color))
            {
                availableMoves.Add(new Square(cell.X - 1, cell.Y + 2));
            }
            if (board.IsValid(cell.X + 1, cell.Y - 2) && board.IsEmptyOrEnemyFigure(cell.X + 1, cell.Y - 2, this.Color))
            {
                availableMoves.Add(new Square(cell.X + 1, cell.Y - 2));
            }
            if (board.IsValid(cell.X - 1, cell.Y - 2) && board.IsEmptyOrEnemyFigure(cell.X - 1, cell.Y - 2, this.Color))
            {
                availableMoves.Add(new Square(cell.X - 1, cell.Y - 2));
            }
            if (board.IsValid(cell.X + 2, cell.Y + 1) && board.IsEmptyOrEnemyFigure(cell.X + 2, cell.Y + 1, this.Color))
            {
                availableMoves.Add(new Square(cell.X + 2, cell.Y + 1));
            }
            if (board.IsValid(cell.X + 2, cell.Y - 1) && board.IsEmptyOrEnemyFigure(cell.X + 2, cell.Y - 1, this.Color))
            {
                availableMoves.Add(new Square(cell.X + 2, cell.Y - 1));
            }
            if (board.IsValid(cell.X - 2, cell.Y + 1) && board.IsEmptyOrEnemyFigure(cell.X - 2, cell.Y + 1, this.Color))
            {
                availableMoves.Add(new Square(cell.X - 2, cell.Y + 1));
            }
            if (board.IsValid(cell.X - 2, cell.Y - 1) && board.IsEmptyOrEnemyFigure(cell.X - 2, cell.Y - 1, this.Color))
            {
                availableMoves.Add(new Square(cell.X - 2, cell.Y - 1));
            }
            return(availableMoves);
        }
Пример #3
0
        public override IList <Square> GetAvailableMoves(ChessBoard board)
        {
            Square        cell           = this.Square;
            List <Square> availableMoves = new List <Square>();

            if (this.Color == Color.WHITE)
            {
                if (board.IsValid(cell.X, cell.Y + 1) && board.IsEmpty(cell.X, cell.Y + 1))
                {
                    if (cell.Y == 1 && board.IsEmpty(cell.X, cell.Y + 2))
                    {
                        availableMoves.Add(new Square(cell.X, cell.Y + 2));
                    }
                    availableMoves.Add(new Square(cell.X, cell.Y + 1));
                }
                if (board.IsValid(cell.X + 1, cell.Y + 1) && board.IsEnemyFigure(cell.X + 1, cell.Y + 1, this.Color))
                {
                    availableMoves.Add(new Square(cell.X + 1, cell.Y + 1));
                }
                if (board.IsValid(cell.X - 1, cell.Y + 1) && board.IsEnemyFigure(cell.X - 1, cell.Y + 1, this.Color))
                {
                    availableMoves.Add(new Square(cell.X - 1, cell.Y + 1));
                }
            }
            if (this.Color == Color.BLACK)
            {
                if (board.IsValid(cell.X, cell.Y - 1) && board.IsEmpty(cell.X, cell.Y - 1))
                {
                    if (cell.Y == 6 && board.IsEmpty(cell.X, cell.Y - 2))
                    {
                        availableMoves.Add(new Square(cell.X, cell.Y - 2));
                    }
                    availableMoves.Add(new Square(cell.X, cell.Y - 1));
                }
                if (board.IsValid(cell.X + 1, cell.Y - 1) && board.IsEnemyFigure(cell.X + 1, cell.Y - 1, this.Color))
                {
                    availableMoves.Add(new Square(cell.X + 1, cell.Y - 1));
                }
                if (board.IsValid(cell.X - 1, cell.Y - 1) && board.IsEnemyFigure(cell.X - 1, cell.Y - 1, this.Color))
                {
                    availableMoves.Add(new Square(cell.X - 1, cell.Y - 1));
                }
            }
            return(availableMoves);
        }