Форум на Kuban.ru (http://forums.kuban.ru/)
-   Разработка программ (http://forums.kuban.ru/f1024/)
-   -   ООП и шахматы. Как лушче сделать? (http://forums.kuban.ru/f1024/oop_i_shahmaty_kak_lushche_sdelat--6552545.html)

megabax 01.03.2015 12:45

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

NTFS_ 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) Правила игры в отрыве от фигур будет обрабатываться в классе игры и только там.

Elu_Tingol 02.03.2015 13:20

+100500


Текущее время: 02:20. Часовой пояс GMT +3.