Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1220249253
programmer90
2008-09-01 10:07
2008.10.12
Поворот формы на 180 градусов


15-1219061510
Джо_
2008-08-18 16:11
2008.10.12
Подскажите сайт


2-1220452724
FIL-23
2008-09-03 18:38
2008.10.12
Двойное нажатие мышкой...


2-1220338927
sD
2008-09-02 11:02
2008.10.12
Изменение FormStyle при создании формы


2-1220425410
DelphiLexx
2008-09-03 11:03
2008.10.12
в rxlib есть ф-ция ReplaceStr, есть ли аналог в самом Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский