Лежебокер, маленький пример движка на данных.
В Doom есть такое понятие, как кадр анимации. Он состоит из…
• фазы анимации (от А до Z, а также [ \ ]). Загрузчик спрайтов учитывал название спрайта, фазу анимации и ориентацию и, например, PLAYB2B8 — игрок (PLAY) в фазе B, который смотрит на 45° влево (2). Игрок в фазе B, который смотрит на 45° вправо (8), делается зеркальным отражением. Особая ориентация 0 говорит, что этот спрайт берётся независимо от ориентации. Буквы ничего не значат в отрыве от контекста; A/B/C/D — у большинства монстров анимация хождения.
• длительности кадра, в игровых тактах (1/35 с)
• указателя на следующий кадр
• флагов (помню один: рисовать на полной яркости, не просчитывая освещение)
• указателя в код. Для редактирования вне игры лучше использовать строки типа «ShootPistol», DEHACKED использовал что-то типа «точно так же, как было в кадре 15».
Лежебокер, Сам я, когда играл с исходниками Doom, сделал какой-то ключ, который говорит: за убийство врагов давать фраги (ну и появляется псевдоигрок Opponent, получающий фраги за вас). Именно для таких тренажёров.
Лежебокер, Естественно, движок на данных проще всех. Из Doom невозможно сделать, например, CTF, но гранаты, огнемёты, камикадзе, маскирующихся под бочки, и даже deathmatch-тренажёр (фраги не считаются) делали.
Anton Dyrkov, В том, что Graph — единый неразрывный кусок, нет никаких проблем.
Штука у вас в том, что Parser ссылается на Graph, а Graph — на Parser. Не очень мне это нравится, и есть два варианта.
1. Вся функциональность по построению графа в Graph (а Parser выдаёт какой-то промежуточный код типа вызова callback’ов) — сделать интерфейс типа GraphSource.
2. Вся функциональность по построению графа в Parser — я уже говорил.
VrencchBug, Просто ноут такой, что нет нужды ремонтировать отвал чипа. Где кто писал про «ремонт» — просто хочу сказать человеку, стоит ли тащить старющий «пенёк» к ремонтникам.
shvaidahder, Условия, что стоит чуть выше, я не вижу.
При каком условии перестанет выполняться неравенство i < i + (что-то там)? Когда сумма в правой части переполнится! То есть цикл выполнит 2 млрд итераций.
shvaidahder,
"horror" (и вообще любой строковый литерал) находится в сегменте данных, предназначенном только для чтения, имеет тип char const* (или const char*) и не позволяет переприсваивания.
shvaidahder, 1. ПОВТОРЯЮ, вызывать strlen в цикле неоптимально.
2. У вас совершенно неверное условие остановки цикла. Которое выполнится, когда i переполнится.
В Doom есть такое понятие, как кадр анимации. Он состоит из…
• фазы анимации (от А до Z, а также [ \ ]). Загрузчик спрайтов учитывал название спрайта, фазу анимации и ориентацию и, например, PLAYB2B8 — игрок (PLAY) в фазе B, который смотрит на 45° влево (2). Игрок в фазе B, который смотрит на 45° вправо (8), делается зеркальным отражением. Особая ориентация 0 говорит, что этот спрайт берётся независимо от ориентации. Буквы ничего не значат в отрыве от контекста; A/B/C/D — у большинства монстров анимация хождения.
• длительности кадра, в игровых тактах (1/35 с)
• указателя на следующий кадр
• флагов (помню один: рисовать на полной яркости, не просчитывая освещение)
• указателя в код. Для редактирования вне игры лучше использовать строки типа «ShootPistol», DEHACKED использовал что-то типа «точно так же, как было в кадре 15».