![]() |
ООП и шахматы. Как лушче сделать? Добрый день. Я сейчас пишу движок для шахматной игры и у меня возник такой вопрос. В каком классе лучше всего реализовывать метод для определения, куда какая фигура может ходить: в классе Game, который отвечает за игру в целом или для каждой фигуры писать свой класс, дочерний от некого абстрактного класса Unit и уже там реализовывать получение списка возможных ходов? |
Список "возможных" ходов я бы реализовал для каждой фигуры, сначала как абстрактный метод для общего класса, потом для каждого потомка. TUnit = class public class function createStepCells(const x,y:Integer):TCellList ; virtual ; abstract ; TUnitElephant = class(TUnit) public class function createStepCells(const x,y:Integer):TCellList ; override ; Для слона такой метод вернет все клетки по диагоналям от x,y, без учета правил и занятности оных. А вот список ходов, доступных исходя из логики игры (занятые клетки, запрет установки короля под шах и т.д.) - уже в классе игры, который будет взаимодействовать с конкретной фигурой и её методом. Таким образом: 1) Правила хода фигуры будут инкапсулированы в классе фигуры и только там. 2) Правила игры в отрыве от фигур будет обрабатываться в классе игры и только там. |
+100500 |
Текущее время: 10:03. Часовой пояс GMT +3. |