К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

ООП и шахматы. Как лушче сделать?

0 - 01.03.2015 - 12:45
Добрый день. Я сейчас пишу движок для шахматной игры и у меня возник такой вопрос. В каком классе лучше всего реализовывать метод для определения, куда какая фигура может ходить: в классе Game, который отвечает за игру в целом или для каждой фигуры писать свой класс, дочерний от некого абстрактного класса Unit и уже там реализовывать получение списка возможных ходов?


1 - 01.03.2015 - 14:54
Список "возможных" ходов я бы реализовал для каждой фигуры, сначала как абстрактный метод для общего класса, потом для каждого потомка.

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) Правила игры в отрыве от фигур будет обрабатываться в классе игры и только там.
2 - 02.03.2015 - 13:20
+100500


К списку вопросов
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск




Copyright ©, Все права защищены