Информация об изменениях

Сообщение Re[2]: Как Подтянуть навыки ООП? от 01.09.2016 14:07

Изменено 01.09.2016 14:25 Lexey

Здравствуйте, Sharov, Вы писали:

S>Заводим абстрактный класс корабль. У карабля должны быть координаты (x1,y1) и (x2,y2), либо нач. координаты, тип корабля (верт. или гор.) и длина. Короче -- либо декартова, либо полярная система координат. Все корабли унаследуются от этого класса, переопределяя соотв. координаты в зависимости от своего типа. Далее, вводим абстракцию доска или игровое поле. Сразу видятся два метода -- сгенерировать расположение фигур, и обработать выстрел соперника (bool GetUserShot(x,y) или bool ApplyUserShot(x,y)). В каждом из методов необходимо задействовать соотв. алгоритмы -- размещение фигур на доске (какое-нибудь динамическое программирование или что-нибудь вроде этого), и определять попал-непопал. Как выше уже сказано все это зависит от выбора структур данных для представления кораблей -- матрица, списки или еще что-то. Вероятно интервьюер хотел поговорить про детали реализации алгоритмов и как ключевые абстракции будут взаимодействовать.


Выглядит как попытка натянуть ООП на глобус стрелять из пушки по воробьям. Для корабля достаточно его типа (который и определяет размер). Остальные параметры — это привязка корабля к доске, которую лучше в ней и хранить (например, как id корабля в клетках, которые он занимает).
По сути, для хранения позиции тут достаточно простой двумерной матрицы из интов (шотов/чаров) (а если навесить ограничение на отсутствие касаний бортами, то и булов) и счетчика живых кораблей (чтобы не сканить всю доску для определения конца игры). Типы кораблей нужны только для генерации позиции (ну и для красивой отрисовки могут пригодиться).
Re[2]: Как Подтянуть навыки ООП?
Здравствуйте, Sharov, Вы писали:

S>Заводим абстрактный класс корабль. У карабля должны быть координаты (x1,y1) и (x2,y2), либо нач. координаты, тип корабля (верт. или гор.) и длина. Короче -- либо декартова, либо полярная система координат. Все корабли унаследуются от этого класса, переопределяя соотв. координаты в зависимости от своего типа. Далее, вводим абстракцию доска или игровое поле. Сразу видятся два метода -- сгенерировать расположение фигур, и обработать выстрел соперника (bool GetUserShot(x,y) или bool ApplyUserShot(x,y)). В каждом из методов необходимо задействовать соотв. алгоритмы -- размещение фигур на доске (какое-нибудь динамическое программирование или что-нибудь вроде этого), и определять попал-непопал. Как выше уже сказано все это зависит от выбора структур данных для представления кораблей -- матрица, списки или еще что-то. Вероятно интервьюер хотел поговорить про детали реализации алгоритмов и как ключевые абстракции будут взаимодействовать.


Выглядит как попытка натянуть ООП на глобус стрелять из пушки по воробьям. Для корабля достаточно его типа (который и определяет размер). Остальные параметры — это привязка корабля к доске, которую лучше в ней и хранить (например, как id корабля в клетках, которые он занимает).
По сути, для хранения позиции тут достаточно простой двумерной матрицы из интов (шотов/чаров) (а если навесить ограничение на отсутствие касаний бортами, то и булов) и счетчика живых клеток кораблей (чтобы не сканить всю доску для определения конца игры). Типы кораблей нужны только для генерации позиции (ну и для красивой отрисовки могут пригодиться).