Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Вниз

Общие алгоритмы игр   Найти похожие ветки 

 
Урб   (2004-04-29 17:19) [0]

Внимание! Это самая не оффтопиковая тема в форуме. :)

1. Каждый придумывает свое. Уважаемые мастера, но может кто-то, где-то видел - общие блок схемы для написания игр, что-то вроде шаблонов. Очень интересно посмотреть подобные вещи. Или может кто сам рисовал.

2. Или где почитать по общим принципам построения игр (эконом. симуляторов, РПГ, стратегий). Но не статьи мальчиков-зайчиков про то как правильно сделать Фол, а серьезные статьи проф. игроделов. Можно на английском, но лучше на русском.

Заранее спасибо! С уважением Урб.


 
NailMan ©   (2004-04-29 18:02) [1]

А ты думаешь что есть общие какие-то концепции именно архитектуры?

Каждая игра - это уникум(имеею в виду оригинальные игры, а не семейство клонов типа Q3-подобных) и устроена совершенно отлично от другой, даже внешне похожей.

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

Вобщем зостри свой интерес на конкретном вопросе и спрашивай - ответим.

ЗЫ: Я вот написал статейку(на моем сайте, см. в инфо), скоро еще напишу продолжение про использование статических буферов и концепцию игровых объектов. Хоть я и не профессионал-игродел, а любитель.


 
Урб   (2004-04-29 18:36) [2]

>А ты думаешь что есть общие какие-то концепции именно архитектуры?
Скорее - надеюсь. :) Я всегда разрабатывал все с нуля. И считал, что так делают все, но что не бывает... может и есть. :)

>Каждая игра - это уникум и устроена совершенно отлично от другой, даже внешне похожей.
Думаю - да. Но вдруг кто-то выделил общие принципы постоения игр. Нарисовал все эти огроменные блок-схемы, или что-то подобное.

>Я вот написал статейку(на моем сайте, см. в инфо), скоро еще напишу продолжение про использование статических буферов и концепцию игровых объектов.
Я ваш сайт уже смотрел - и он мне очень нравиться. :)

>Хоть я и не профессионал-игродел, а любитель.
Наверное я слишком резко написал про профессионалов. Но я имел ввиду просто людей которые реально что-то делают, вроде вас господин NailMan, а не людей которые рассуждают на тему.


 
Magikan ©   (2004-04-30 03:38) [3]

Разбей свой проект на подсистемы: графика, музыка, система ввода и т.д. Каждая составляющая должна содержать:
- высокоуровневые функции для работы с подсистемой
- классы или типы, которыми оперирует подсистема
Например, графическая подситема (для 2Д) должна содержать примерно следующее:
- функции инициализации и деинициализации подсистемы
- класс (или тип) для хранения спрайта
- если для спрайта используется тип, то подсистема должна содержать функции для загрузки и вывода спрайта, если класс, то все это должно быть оформленно в виде методов
- функцию для смены поверхностей
То же самое и для звука. Подсистема ввода должна же уметь реагировать на события от устройств ввода и посылать сообщения игровому движку.
На основе этих подсистем можно уже реализовывать более высокоуровневые модули. Например сцена. Она должна содержать как минимум объект заднего фона и указатели на выводимые спрайты. При вызове функции Draw (название может быть и другим), сцена автоматически рисует фон, спрайты и производит смену буферов (используя раннее определенные функции). Также можно создать отдельный класс и для персонажей игры, который загружал бы все спрайты с движениями, а затем мог бы их анимировать.
Когда все, что нужно для игры готово, происходит самый интересный этап программирования игрового движка. В первую очередь он инициализирует все подсистемы, используемые в игре, инициализирует все игровые объекты, а затем начинается игровой цикл, в котором происходит обработка событий и, в зависимости от событий, выполняются каки-то действия (перемещение персонажа, проигрывание звуков, смещение фона и и.т.). Иногда, чтобы можно было оперативно управлять (изменять, дополнять) игровым процессом, используют сценарии (скрипты). Для обработки скриптов пишут специальный модуль, содержащий интерпретатор скриптового языка.
Вот, в общем-то основная (примерная) схема создания игр, которой я придерживаюсь.


 
KA_ ©   (2004-04-30 09:40) [4]

http://www.rsdn.ru/forum/Message.aspx?mid=404818&only=1

статья по архитектуре


 
NailMan ©   (2004-04-30 10:02) [5]

Урб
Скорее - надеюсь. :) Я всегда разрабатывал все с нуля. И считал, что так делают все, но что не бывает... может и есть. :)
Я тоже вобщем-то всегда разрабатываю с нуля. Не использую готовые движки или какие-то оболочки. В том-то и смысл любительского геймдева - разработка своего. Спорт своего рода.

Думаю - да. Но вдруг кто-то выделил общие принципы постоения игр. Нарисовал все эти огроменные блок-схемы, или что-то подобное.
Вобщем есть некоторые схемы построения, но они относятся главным образом к правильному построению программы. Типа такого:

- считывание настроек игры из внешнего файла или реестра
- инициализация среды(D3D, OGL) по настройкам и возможностям аппаратуры(не всегда же желание игрока совпадает с возможностями его компа   :-) )
- инициализация системы ввода
- вывод циклического меню(GUI - графического интерфейса пользователя)
- (после выбора СТАРТ!):
-- загрузка ресурсов
-- инициализация игровой среды(сцены) на основе каких-то параметров(файл сцены, генератор и т.д)
-- создание элементов игровой среды(объекты)
-- создание первичных параметров AI
-- игровой цикл
- высвобождение ресурсов
- деинициализация среды

Каждый пункт можно расписывать и расписывать.

В общем и целом как уже сказал Magikan © двигло можно разбить на составные части:
1. GUI(обязательная и очень важна часть, которая часто игнорируется или делается абы как)
2. рендерер
3. ресурсный менеджер
4. собственно SCENE engine
5. контроллер ввода
6. Collision engine
7. AI
8. звуковой движок
9. Сетевой двигло(если требуется)

Пункты 2 - 4 (имхо) условно называются графическим ядром. Пункты 6-7 условно называются физическим ядром. Все пункты вместе зовутся движком.

Это лишь моя версия. У каждого геймдевелопера свой взгляд на мир, посему лучше толковать про конкретные части движка.


 
wiz ©   (2004-04-30 10:09) [6]

to KA_: не знаю кому как, а мне статья понравилась... возможно тем, что я прошёл почти тот же путь самостоятельно, и структура проекта который я сейчас делаю (серия "sd" см.форум :] ) примерно соответствует "середине" главы 5 :))


 
Урб   (2004-04-30 13:52) [7]

Magikan, KA_, NailMan, wiz спасибо огромное!

Только возник конкретный вопрос:

Если в игре непрерывно проверяется большое количество самых разнообразных условий - что делать со скриптом:
1. Либо очень навороченный скрипт
2. Писать непосредственно в кодах (грамотно насоздавав обьектов и процедур)
3. Специальный редактор-генератор скрипта?

Потому как сложность скрипта приближается к синтаксису языка програмирования. (как критический пример экономический симулятор или футбольный менеджер).

Кто как решает эту проблему? Какие пути решения?


 
NailMan ©   (2004-04-30 14:41) [8]

Урб
Если в игре непрерывно проверяется большое количество самых разнообразных условий - что делать со скриптом:
1. Либо очень навороченный скрипт
2. Писать непосредственно в кодах (грамотно насоздавав обьектов и процедур)
3. Специальный редактор-генератор скрипта?

Потому как сложность скрипта приближается к синтаксису языка програмирования. (как критический пример экономический симулятор или футбольный менеджер).

Кто как решает эту проблему? Какие пути решения?


Во первых все вычисления производятся во времени не постоянно, а по квантам, тоесть на просчет каждого игрового объекта выделяются некоторые границы времени. Скажем каждый такой объект просчитывается 50 раз в секунду.

Под просчетом подразумеваются: проверка столкновений(Collision Detection) и реакция на них, AI, изменения положения и направления в пространстве(движение и анимация) и все что угодно.

Причем для того чтобы не было тормозов(не рывков, а именно физического замедления течения игры) все это синхронизуется с некоторым поправоным коффициентом(для каждого объекта персональный), в следствие чего на дохлых тачках будут как раз эти рывки(или пропуски кадров рендера).

Обработка скриптов довольно гемморный для скорости процесс посему его надо проводить только при срабатывании каких-то особых условий(скажем после срабатывания триггера), а не в выделенном кванте.

Кстате есть бесплатные скриптовые движки, например LUA(я вот скоро его буду осваивать), которые вполне быстро работают. Незря же ведь HomeWorld2 построен почти целиком на LUA!


 
Урб   (2004-05-13 15:31) [9]

>NailMan
Спасибо! Но я скорее, про потерновые игры с большим количество переменных и проверок.

Вроде тут были люди которые делают РПГ...
Интересно также мнение господина который делает SOE, Игорь, кажеться, хотя могу ошибаться.


 
cyborg ©   (2004-05-13 19:23) [10]

Булевый массив сделай, и расставляй там флаги чего принесли, чего сделали или не сделали.



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.038 c
1-1092475522
Flox
2004-08-14 13:25
2004.08.29
ListView


14-1092221156
Иван Шихалев
2004-08-11 14:45
2004.08.29
Про слова


9-1083916006
MsShtaer
2004-05-07 11:46
2004.08.29
Помогите с выбором стиле к стратегической игре


14-1092061346
ИМХО
2004-08-09 18:22
2004.08.29
Корейко


14-1092235635
ghg
2004-08-11 18:47
2004.08.29
вопрос по C++





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский