Форум: "Прочее";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
ВнизПомогите организовать структуру Найти похожие ветки
← →
Nucer (2008-08-20 11:00) [0]Решил сделать игру и уже день не могу придумать хороший способ организации ее структуры.
Игра пошаговая. Есть множество объектов (допустим, танки). Есть поле, по которому они передвигаются. Есть объект, управляющий танками. Управление сводится к методам move, attack, rotate и др.
Логично было бы создать класс "танк" и реализовать в этом классе методы move/attack/rotate, но танк сам по себе не знает о других объектах (о поле, о других танках). Занята ли соседняя ячейка, попал ли куда-нибудь снаряд (он не может "уничтожить" другой танк, как и не может снять у него HP, т.к. ничего не знает о его существовании). Получается нужен какой-то менеджер с функциями move/attack/rotate (в функции передается ссылка объект "танк" как параметр), который содержит информацию о поле и о всех танках, но в итоге танк представляет из себя уже только набор параметров, с ним не удобно работать и никаким ООП тут уже и не пахнет.
← →
Vlad Oshin © (2008-08-20 11:19) [1]что это за танк, который ничего не видит?
у него должно быть cd-во ДальностьЗрения..
Дефолтное поведение в определенных об-вах
← →
clickmaker © (2008-08-20 11:29) [2]для тех, кто в танке нужно св-во "кругозор" - ячейки, которые он может отслеживать, в определенном радиусе
← →
Vlad Oshin © (2008-08-20 11:36) [3]+
ячейки - это скорее, модификация радиусу зрению танка.
(в низине меньше обзор, на холме дальше )
← →
DVM © (2008-08-20 11:38) [4]
> Получается нужен какой-то менеджер с функциями move/attack/rotate
может завести объект поле или карта, который содержит ячейки. А ячейка имеет некоторые свойства.
← →
clickmaker © (2008-08-20 11:46) [5]+ ячейка может быть свободной или занятой. Другим танком или пехотинцами или "ежом". Либо миной. Но в этом случае танк про нее и правда не знает
← →
oldman © (2008-08-20 12:01) [6]
> но танк сам по себе не знает о других объектах
Но кто-то про них знает? Массив объектов есть?
Можно после команды проверить результат?
Кто мешает представить поле как матрицу, в ячейках которой размещены объекты, которым даются команды?
Результатом команды будет true или false:
move - соседня ячейка занята/не занята
attack - попал/не попал
rotate - всегда true
← →
brother © (2008-08-20 12:03) [7]карты для таких игр так и делаются, по ячейкам...
← →
oldman © (2008-08-20 12:03) [8]
> никаким ООП тут уже и не пахнет.
Ваша цель - написать игру или использовать ООП?
← →
Ega23 © (2008-08-20 12:03) [9]
> Но кто-то про них знает?
А вдруг сапёров расстреляли после работы? Тогда внатуре никто не знает.
← →
Vlad Oshin © (2008-08-20 12:10) [10]чет да, ерунда..
Мне всегда казалось, что придумывать такие вещи гораздо интереснее, чем писать код. Сколько вещей, у меня, можно сказать пропало :) из-за того, что придумались, а делать лень была.
А тут самое интересное на откуп отдают..
← →
brother © (2008-08-20 12:11) [11]> из-за того, что придумались, а делать лень была.
знакомая ситуация)
← →
oldman © (2008-08-20 12:16) [12]
> Vlad Oshin © (20.08.08 12:10) [10]
> чет да, ерунда..
> А тут самое интересное на откуп отдают..
курсач? диплом? лаба?
← →
brother © (2008-08-20 12:18) [13]> курсач? диплом? лаба?
> Решил сделать игру
саморазвитие)
← →
antonn © (2008-08-20 23:18) [14]
> Nucer (20.08.08 11:00)
вообще "полное" ООП тут только вредит.
Каждый танк - класс, с методами move/rotate/babax и тыпы, и указатель на "цель". Создаем экземпляр - заносим указатель в TList, а сам список - доступен "глобально". Вообще два списка - враги и "наши" :)
Класс "менеджер" по очереди проходит каждый список и для каждого танка в нем находит наиближайший вражеский танк из другого списка. После нахождения проверяется дальность до него. Если дальность в норме - запоминаем указатель на врага в танке. далее нужно по указателю отслеживать его, при увеличении дальности - искать новую цель. При уничтожении танка уведомлять все танки, что цель такая то уничтожена, те, у кого уничтоженый был целью - ищут новую.
Функция бабах делает лишь одно - создает "пулю", задает ей угол, скорость (или вектор), и стартовые координаты (дуло врага, а вообще для всяки самоноводящихся фиговин запоминать и указатель на врага - для преследования), при Бабахе - объект создается у дула ствола и все, дальше пулей занимается "менеджер" (вызывает методы move, проверяет коллизии). В пуле можно запоминать id ее владельца, при попадании можно считать килы владельца и повышать скилл - рпг %)
В качестве примером погу посоветовать глянуть Battle Scroller или Defence II, хотя они и до жути запутаны:
http://desksoft.ru/index.php?files&id=3&owner=3
← →
brother © (2008-08-21 05:04) [15]> два списка - враги и "наши" :)
кто не с нами - то наш враг! )))))
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.049 c