Здравствуйте. Собираюсь писать Морской бой для 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 так как он будет хранить ячейки своего корабля.
Описывать дальше не буду, а то вам читать не захочется. Жду критики, может кто-нибудь обнаружит подводные камни заранее :)
Продвижение своими сайтами как стратегия роста и независимости