Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #64, МАРТ 2006 г.

строим двухмерное счастье

ПАЛАГИН АНТОН

Спецвыпуск: Хакер, номер #064, стр. 064-076-2


архитектура игровой логики

Логика тетриса реализуется в классе GameDriver. Он воспринимает управляющие события от виджетов: начало новой игры, пауза в игре, управление тетрисными фигурами. Также этот класс рисует на экране фигуры тетриса, удаляет заполненные строки в стакане, генерирует новые фигуры, следит за окончанием игры. Подсчет очков, набранных пользователем, и повышение уровня сложности реализует класс GameLogic, агрегируемый классом GameDriver. Отображение тетрисных блоков в заданных координатах игровой сетки берет на себя класс GameView, также агрегируемый классом GameDriver. Класс GameView «знает» то, как переводятся координаты на игровой сетке (поле) в экранные координаты. Поведением блоков на игровой сетке размером 10х20 управляет класс Playfield. Каждая фигура описывается классом TetrisBlock, который умеет хранить конфигурации фигур и вращать их. Соответствующую UML-диаграмму смотри на рисунке «Архитектура игровой логики».

инициализация игры

//Инициализируем движок игры

SexyAppBase::Init();

//Парсим манифест ресурсов (сценарии ресурсов)

LoadResourceManifest();

//Загружаем секцию ресурсов «Init»

if( !mResourceManager->LoadResources(«Init») )

{

ShowResourceError(true);

return;

}

if( !ExtractInitResources(mResourceManager) )

{

ShowResourceError(true);

return;

}

//Загружаем ресурсы, нужные для игровой заставки

if( !mResourceManager->LoadResources(«TitleScreen») )

{

ShowResourceError(true);

return;

}

if( !ExtractTitleScreenResources(mResourceManager) )

{

ShowResourceError(true);

return;

}

//Инициализируем заставку

m_titleScreen.reset(new TitleScreen(this));

m_titleScreen->Resize(0, 0, mWidth, mHeight);

m_titleScreen->Init();

mWidgetManager->AddWidget(m_titleScreen.get());

mNumLoadingThreadTasks = mResourceManager->GetNumResources(«Game»);

//Загружаем фоновую музыку

mMusicInterface->LoadMusic(0, «Musics/1984-Network.s3m»);

mMusicInterface->FadeIn(0, 0, 0.002, false);

Первый шаг, который совершают после создания ядра игры, — инициализация ядра. Инициализируем движок игры, затем загружаем в память манифест ресурсов игры. Манифест — это XML-документ, в котором описаны наборы (секции) ресурсов: шрифты, изображения и звуки. На рисунке «Манифест ресурсов» как раз приведен пример из XTreas. В секции Init содержатся ресурсы, нужные в течение всего игрового цикла. В секции TittleScreen — ресурсы, необходимые на этапе демонстрации заставки игры. Наконец, в секции Game — игровые ресурсы.

Манифест определяет для каждого ресурса его символическое (строковое) имя в контексте менеджера ресурсов PopCap, и, чтобы обратиться к нужной картинке или звуку из игры, достаточно сказать менеджеру ресурсов: «Дай мне картинку А» или «Дай мне звук B». После того как пользователь нажмет на заставке кнопку, вызовется код изображенный на листинге «Начало игры». Пользователь удалит ресурсы заставки, ставшие ненужными, создаст игровое поле и запустит игровой цикл.

Назад на стр. 064-076-1  Содержание  Вперед на стр. 064-076-3