Компьютерные игры. Как это делается




Освещение - часть 2


Вам необходимо доказать собственную состоятельность либо с помощью репутации, либо поразив всех гениальной демо-программой. Жаждущие получить заказ на создание игры всегда могут появиться из ниоткуда и с ходу выдать демо-версию, соперничающую с профессиональными работами. Пока такое возможно, а значит, шансы есть у всех

В программировании информация часто хранится в виде массивов, то есть строк данных. Нередко попытка обращения к областям памяти находящимся за пределами массивов, вызывает общий сбой Windows - General Protection Fault (GPF). Например, если массив содержит только пять элементов, а программа попытается получить доступ к восьмому, вы увидите на экране сообщение о GPF. Чтобы застраховать себя от подобных ошибок, обратите внимание на следующую программу.

Это должен сделать каждый программист - создать шаблон для массивов. Не используйте массивы в стиле Си, если это не является абсолютно необходимым. Определение шаблона должно выглядеть примерно так:

template <class Entry> class Array

{

private:

Entry *pEntry;

int iSize;

Далее шаблон содержит внутренние компоненты для добавления (размещения) и удаления записей массива, а также компоненты для доступа к массиву, подобные приведенному ниже:

public:

// Обеспечивает доступ к записям массива...

Entry &operator [](const int ilndex) const

{

Assert(ilndex >= 0 && ilndex < iSize);

return pEntry[ilndex];

}

Функция Assert очень важна, так как она вызывает ошибку отладки, если значение выражения-аргумента Assert равно FALSE. Этот небольшой фрагмент программы спас нас от такого количества ошибок, что я просто не представляю, что бы мы без него делали. Наш макрос Assert выглядит примерно так:

// Режим отладки:

#if defined(_DEBUG)

extern BOOL MyAssertFunc(BOOL, int, char *};

#define NatBreakf) { _asm { int 3 } }

// Утверждает, что значение ехр - истина.

#define Assert(ехр) \

if (MyAssertFunc((int)(exp),__LINE__,__FILE__)) \

NatBreak();

// Режим без отладки:

#else

#define Assert(exp)




Содержание  Назад  Вперед