Продумывание логики “Морского боя”

274
31 января 2017, 20:50

Здравствуйте. Собираюсь писать Морской бой для Android и вот начал, как правило, с логики. Посмотрите, пожалуйста, верно ли я рассуждаю. Мультиплеер. Игра на одном устройстве.

Расстановка кораблей сводится к созданию двух ArrayList, один для кораблей, другой для ячеек (с вложенным ArrayList), а именно:

Создаю класс Ship для корабля. В конструктор передаётся количество его палуб и индексы его ячеек. В классе находится shotCounter - счётчик подбитых палуб. Реализован метод shot в котором инкрементируется этот счетчик. Метод меняет состояния ячеек на KILL и возвращает true если корабль полностью потоплен и false, если только подбит. При расстановке кораблей создаётся List из классов Ship. Причем, каждой ячейке, относившейся к кораблю передаётся индекс этого корабля из List-а. Так обеспечивается взаимная связь корабля со своими ячейками.

Создаю класс Cell для ячейки игрового поля. Класс имеет два конструктора. В первый передается, как описано выше, индекс корабля из List-а, к которому относится ячейка. Класс будет содержать переменную с индексом корабля, логическую переменную IS_EMPTY, если ячейка не относится ни к какому кораблю и состояние ячейки (MISS - промах, HIT - подбит и KILL - потоплен. Во второй ничего не передается. В нем логической переменной IS_ЕMPTY присваивается true. В классе Cell будет написан метод shot без входных параметров со следующей логикой. Если IS_ЕМPTY содержит true, то менять состояние ячейки на MISS (промах). Иначе следует обратиться к соответствующему классу Ship, вызвав его метод shot. Если он вернет false, то меняем состояние ячейки на HIT. Если true, то значит корабль подбит полностью и следует автоматически поменять состояния вблиз лежащих ячеек на MISS, так как там ничего быть не может, скорее всего удобнее это сделать в классе Ship так как он будет хранить ячейки своего корабля.

Описывать дальше не буду, а то вам читать не захочется. Жду критики, может кто-нибудь обнаружит подводные камни заранее :)

READ ALSO
Добавить ReactJS в проект

Добавить ReactJS в проект

Подскажите начинающему: есть сверстанная страничка со всякими мультиселектами, поиском по ней и так далееХочу переписать всё jQuery на React,...

412
Блок с описанием при клике на картинку [требует правки]

Блок с описанием при клике на картинку [требует правки]

Есть CSS, который позволяет делать такие эффекты с изображениями; но проблема в том, что как только всплывает изображение (при клике на него),...

324
Одинаковые отступы элементов в таблице

Одинаковые отступы элементов в таблице

Здравствуйте! Не знаю как правильно сформулировать вопрос, так что воспользуюсь картинкой и текстовым пояснениемВот пример необходимой...

403
html contenteditable игнорирует некоторые буквы [требует правки]

html contenteditable игнорирует некоторые буквы [требует правки]

Я заметил, что поле ввода, созданное путем прикрепления атрибута "contenteditable" к div, игнорирует ввод следующих символов: 'f', 'l', 'm', 'p'С чем это может...

391