Пример #1
0
        /// <summary>
        /// Возвращает список доступных клеток относительно текущей позиции фигуры, в указаном направлении.
        /// </summary>
        /// <param name="figure"></param>
        /// <param name="dir"></param>
        /// <returns></returns>
        static private List <PointV2> BustPoints(IMotionInterfaceFigure figure, PointV2 dir)
        {
            // Временно значение точки изменяемое каждую итерацию.
            PointV2 BufferPoint,
            // Позиция фигуры относительно которой вычисляються точки.
                    position = figure.position;

            List <PointV2> result = new List <PointV2>();

            // Вычисление начальной точки, с которой будет вестись последующие вычисления.
            // Позиция фигуры не учитываеться !!!
            BufferPoint = position + dir;

            // Все вычисление ведутся пока точка находиться в пределах игровой доски.
            while (GameBoard.Instance.isOnTheChessboard(BufferPoint))
            {
                // Еслм точка выходит за границу доски - выход из цыкла.
                if (!GameBoard.Instance.isOnTheChessboard(BufferPoint))
                {
                    break;
                }

                // Если фигуре доступен шаг на текушую точку 'BufferPoint', добавляем в список-результат.
                // Интерфейс IMotionInterfaceFigure предоставляет метод который содержит каждая фигура
                // и который определяет доступна ли точка для шага данной фигуры.
                if (figure.GetIsAvailableForActions(BufferPoint))
                {
                    result.Add(BufferPoint);
                    // Шаг в заданом направлении.
                    BufferPoint += dir;
                }
                // Если точка недоступна, все последующие так же не доступны по правилам шахмат.
                // выход из цыкла.
                // Данное правило обходит только фигуру'конь'.
                else
                {
                    break;
                }
            }

            return(result);
        }
Пример #2
0
        /// <summary>
        /// Возвращает список доступных клеток в один шаг, относительно текущей позиции фигуры, в указаном направлении.
        /// </summary>
        /// <param name="figure"></param>
        /// <param name="dir"></param>
        /// <param name="isOneStep"></param>
        /// <returns></returns>
        static private List <PointV2> BustPoints(IMotionInterfaceFigure figure, PointV2 dir, bool isOneStep)
        {
            // Временно значение точки изменяемое каждую итерацию.
            PointV2 BufferPoint,
            // Позиция фигуры относительно которой вычисляються точки.
                    position = figure.position;

            List <PointV2> result = new List <PointV2>();

            //Вычисление начальной точки, с которой будет вестись последующие вычисления.
            BufferPoint = position + dir;

            // Если фигуре доступен шаг на текушую точку 'BufferPoint', добавляем в список-результат.
            // Интерфейс IMotionInterfaceFigure предоставляет метод который содержит каждая фигура
            // и который определяет доступна ли точка для шага данной фигуры.
            if (figure.GetIsAvailableForActions(BufferPoint))
            {
                result.Add(BufferPoint);
            }
            // Данная функция возвращает по сути лишь одну точку, один шаг.
            // Поэтому возвращаем результат, после вычисления.

            return(result);
        }