Здравствуйте. Собираюсь писать Морской бой для 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
так как он будет хранить ячейки своего корабля.
Описывать дальше не буду, а то вам читать не захочется. Жду критики, может кто-нибудь обнаружит подводные камни заранее :)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите начинающему: есть сверстанная страничка со всякими мультиселектами, поиском по ней и так далееХочу переписать всё jQuery на React,...
Есть CSS, который позволяет делать такие эффекты с изображениями; но проблема в том, что как только всплывает изображение (при клике на него),...
Здравствуйте! Не знаю как правильно сформулировать вопрос, так что воспользуюсь картинкой и текстовым пояснениемВот пример необходимой...
Я заметил, что поле ввода, созданное путем прикрепления атрибута "contenteditable" к div, игнорирует ввод следующих символов: 'f', 'l', 'm', 'p'С чем это может...