2 / 2 / 0
Регистрация: 11.05.2015
Сообщений: 45
1

Как правильно составить логику приложения (игра)?

12.10.2015, 03:08. Показов 2090. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ, выручайте советом! Я снова застрял на очередной задаче...
Вот текст:
Кликните здесь для просмотра всего текста
Как правильно составить логику приложения (игра)?


Я застрял на этапе структурирования приложения. Изначально мои мысли были такие:
Создаем класс Game, там создаем поле field типа Game (двумерный массив 10x10) - это игровое поле. От класс Game наследуются классы Враги, Бонусы и Препятствия, а от каждого из этих соответственно их классы (т.е. от Бонусов - Вишня, Яблоко). Затем заполняю двумерный массив field экземплярами каждого класса в произвольном порядке (ну, т.е. сначала ставлю туда к примеру Деревья и Камни, потом расставляю бонусы и т.д). Т.е. Использую в данном случае ссылочную совместимость при наследовании. Но на этом этапе уже то StackOverFlow Exeption ловлю, то зацикливание. Другими словами: при создании одного экземпляра Яблока, например, он вызывает конструктор по умолчанию родительского класса и так с созданием каждого объекта.
Да, я пока плохо усвоил полиморфизм. Может кто-то подсказать, как в данном случае правильно организовать логику приложения, что от чего наследовать или где использовать агрегацию?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2015, 03:08
Ответы с готовыми решениями:

Инкапсуляция или как правильно отделить логику
Делаю проект в WPF(но это не важно). Вопрос таков: может ли класс где обработчики всех событий...

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

Правильно ли это : выносить логику по возможности в данные ?
Ваяю приложение в паттерне MVVM, с прицелом на дальнейшее частичное портирование на мобильную...

Карты, игра на память. Как запрограммировать логику игры
Приветствую. Может у кого то уже есть сделаная ета уже заезжаная игра, где надо собирать карты по...

11
123 / 123 / 72
Регистрация: 11.05.2014
Сообщений: 331
12.10.2015, 03:28 2
Если задача состоит именно в решении задачи на "зачёт", то вам достаточно описать именно структуру без реализации ( как и написано в задании ), следовательно на этом этапе физически не может быть никаких исключений от компилятора, т.к. фактически пишется только каркас.

Если же у вас задача не "сдать зачёт и забыть", то тогда будет лучше, если вы приложите код.
0
2 / 2 / 0
Регистрация: 11.05.2015
Сообщений: 45
12.10.2015, 03:48  [ТС] 3
Задача и сдать и понять! Код уже в третий раз с нуля переписываю. Мне просто понять хотелось бы, только иерархию классов, что от чего наследуется. Код я уже сам, думаю, что осилю написать.
0
978 / 873 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
12.10.2015, 04:23 4
Цитата Сообщение от ResidentEve Посмотреть сообщение
Создаем класс Game, там создаем поле field типа Game (двумерный массив 10x10)
Уже непонятно, как это... Поле какого типа-то? Того же типа, что и класс, в каком оно лежит? Совершенно бессмысленно, а если вы попробуете таки это сделать и в конструкторе/сразу при объявлении создавать там объект, то все зависнет, а потом влетит StackOverflow из-за бесконечной рекурсии, о чем вы собственно и пишите.
Цитата Сообщение от ResidentEve Посмотреть сообщение
От класс Game наследуются классы Враги, Бонусы и Препятствия
Наследование-это отношение, которое выражается словом "является". Враги, бонусы и препятствия являются игрой? Тут логично сделать базовый класс "Объект на поле", а от него наследовать все эти предметы, в том числе и игрока. Ну а от бонусов уже-определенные фрукты, а от монстров-определенных зверей и тд.
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,398
12.10.2015, 05:54 5
Напрашивается такая иерархия - класс карта, естественно карта хранящая все, которой можно задавать размер, и список игровых объектов. В одном из ее методов - главный цикл который вызывает пересчетет и отрисовку. класс статический объект - т.е. препятствие и бонус. Который умеет отображаться как на карте так и на экране. От него поражден класс динамический объект, который кроме всего остального имеет указатель на класс "контроллер", который он опрашивает на предмет расчета куда перемещаться.
Абстрактный класс контроллер, от которого порождаются контроллеры персонажей и контроллер игрока (осуществляющий опрос с клавиатуры), а так же контроллер "сетевой игрок"
1
25 / 25 / 23
Регистрация: 07.06.2015
Сообщений: 142
12.10.2015, 06:36 6
На вскидку:
я бы делал класс field - ячейка, наследуемый от него класс area - игровая площадка.
В классе field зарезервировал бы место под класс object.
От класса object - классы enemy, bonus, isEmpty, barrier.
Соответствено enemy - Ваши волки, медведи, etc
bonus - вишни, яблоки, грибы, etc
isEmpty - мне кажется, что для пустого поля нужен отдельный класс, но имхо и на вскидку.
barrier - деревья, камни, etc.

Игрок - отдельный класс, наверное. и в нем обработка собыйтий, когда объект класса игрок сталкивается с объектом другого класса, обработка перемещений, etc.

Как-то так
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,398
12.10.2015, 07:49 7
Цитата Сообщение от Remuless Посмотреть сообщение
Игрок - отдельный класс, наверное. и в нем обработка собыйтий, когда объект класса игрок сталкивается с объектом другого класса, обработка перемещений, etc.
Ну и зачем плодить кучу классов, если игрок и противник соответствуют классу динамический объект а бонус и препятствие - статический. разница только в поведении, все остальное одинаковое. К каждому цепляется контроллер поведения, который можно легко переназначать не меняя всего остального, даже на лету, не пересоздавая объект. При этом сами контроллеры можно и в группы связывать для обеспечения противникам группового ИИ.
0
2 / 2 / 0
Регистрация: 11.05.2015
Сообщений: 45
12.10.2015, 16:20  [ТС] 8
Fulcrum_013, я правильно понимаю, что класс карта - это главный класс, от которого все наследуются? Т.е. от него напрямую наследуется СтатическийКласс, а от статического - Динамический Класс?
Одно непонятно, собственно, у меня и до этого объяснения возникала подобная проблема: сама карта - как ее задать? Двумерный массив? Но массив чего? Я до этого пробовал создавать массив того же класса, но мне уже объснили, какую ошибку я тем самым совершал. Его экземпляр (карты) будет лежать непосредственно в классе карта?
Спасибо!
0
978 / 873 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
12.10.2015, 17:42 9
Цитата Сообщение от ResidentEve Посмотреть сообщение
Fulcrum_013, я правильно понимаю, что класс карта - это главный класс, от которого все наследуются?
Нет, абсолютно неправильно. Читайте мой пост выше. Наследование существует для того, чтобы не писать лишний код. Наследник перенимает все методы/свойства класса, от которого происходит наследование. Как я уже писал, это можно выразить словом "является". Карта и объект на ней-это разные вещи, методы и свойства карты объекту ни к чему.
Цитата Сообщение от ResidentEve Посмотреть сообщение
Двумерный массив? Но массив чего?
Самое простое-массив ссылок на объекты класса, который обозначен в данном посте как "СтатическийОбъектНаКарте"(имеется в виду объект на карте, который не двигается). "Статический класс" это совсем другое, не путайте Пустые клетки можно обозначить как null.
1
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,398
12.10.2015, 18:15 10
Цитата Сообщение от ResidentEve Посмотреть сообщение
что класс карта - это главный класс, от которого все наследуются?
Нет, от него никто не наследуется, в него все отоброжаются, он только хранит двумерный массив, и при отображении в нем определяет коллизию. Наследуются объекты карты от базового "объекта", к примеру от "статический объект". Ну и от базового объекта "контроллер" наследуются специализированные контроллеры.
1
2 / 2 / 0
Регистрация: 11.05.2015
Сообщений: 45
12.10.2015, 20:47  [ТС] 11
Сделал и сдал задачу успешно! Всем спасибо огромное!
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,398
12.10.2015, 20:52 12
Цитата Сообщение от ResidentEve Посмотреть сообщение
Его экземпляр (карты) будет лежать непосредственно в классе карта?
В более сложных играх может быть и так, только в разных экземплярах класса. К примеру дом со своей картой помещений может быть более мелкомасштабной картой одной ячейки глобальной карты, а соответственно карта дома вместе с домом - статическим объектом на глобальной карте. Поэтому в общем то имеет смысл порождать карту от класса "статический объект".
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2015, 20:52
Помогаю со студенческими работами здесь

Как организовать логику приложения WebView
Здравствуйте, подскажите пожалуйста как организовать методы в коде (куда, какой) так, чтобы webview...

Как правильно переписать логику OnInput?
Здравствуйте. Есть логика в OnInput, нужно оставить первый INPUT и вместо оставшиеся двух инпутов...

Как правильно реализовать логику программы?
Здравствуйте! Хочу реализовать такую логику программы: телефон - стартовая активность А ->...

Как правильно отделить логику от вида
Есть таблица в БД состоящая из четырех столбцов н.п. ID SURNAME NAME PHONE 1 Петров Петя ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru