/// <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); }
/// <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); }