Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.12;
Скачать: CL | DM;

Вниз

Помогите организовать структуру   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
15-1219135239
Petr V. Abramov
2008-08-19 12:40
2008.10.12
Крупный съезд ученых-нанотехнологов


15-1219090059
Alien1769
2008-08-19 00:07
2008.10.12
pppoe


15-1219251940
ProgRAMmer Dimonych
2008-08-20 21:05
2008.10.12
Своя замена для Windows Explorer


3-1207556648
Раиса
2008-04-07 12:24
2008.10.12
Full Join и условие = неверный результат?


6-1193993911
Artik
2007-11-02 11:58
2008.10.12
Запуск программ по сети.