A-tit indd


Паттерны программирования игр



Download 3,35 Mb.
Pdf ko'rish
bet191/313
Sana05.06.2022
Hajmi3,35 Mb.
#638392
1   ...   187   188   189   190   191   192   193   194   ...   313
Bog'liq
Nistrem R. Patterni programmirovaniya igr-1

Паттерны программирования игр
— Паттерны поведения
259
гарантируем, что все монстры пройдут через нужную 
нам схему управления памятью.
Разделение данных через наследование
На данный момент у нас на руках весьма пригодная си-
стема типов объектов, но все же достаточно простая. 
В конце концов в нашей игре будут 
сотни
родов, а в каж-
дом — десятки свойств. И если геймдизайнеру захочется 
изменить все тридцать разновидностей троллей, сделать 
их чуть сильнее, придется убить уйму времени на ввод 
новых данных.
Нам могла бы помочь возможность совместного вла-
дения некоторыми свойствами для нескольких 
родов

как род позволяет нам использовать совместное владе-
ние свойствами для разных 
монстров
. Решить эту за-
дачу можно с помощью наследования. Только вместо 
использования встроенного в язык механизма наследо-
вания мы реализуем собственный через наши объекты 
типов.
Для простоты в нашей игре будет поддержка только 
одного уровня наследования. У класса может быть роди-
тельский класс, а у рода — родительский род:
class Breed
{
public:
Breed(Breed* parent, int health,
const char* attack)
: parent_(parent),
health_(health),
attack_(attack)
{}
int getHealth();
const char* getAttack();
private:
Breed* parent_;
int health_; // 6 .
const char* attack_;
};


260
Объект типа (Type Object) — 
Паттерны программирования игр
Когда мы конструируем род, мы указываем его роди-
теля, от которого он наследует. Мы можем указать зна-
чение 
NULL
для базового рода, не имеющего предков.
Чтобы извлечь из ситуации максимум пользы, дочер-
ний элемент рода должен иметь выбор, какие свойства 
наследовать от родителя, а какие — переопределять или 
задавать самостоятельно. Пусть в нашей системе род 
переопределяет показатель здоровья, если он не равен 
нулю, и строку атаки, если она имеет значение не 
NULL

Иначе он будет наследовать эти значения.
Существует два способа. Первый — обрабатывать на-
следование динамически, каждый раз, когда происхо-
дит обращение к свойству. Примерно так:
int Breed::getHealth()
{
// .
if (health_ != 0 || parent_ == NULL)
{
return health_;
}
// ? .
return parent_->getHealth();
}
const char* Breed::getAttack()
{
// .
if (attack_ != NULL || parent_ == NULL)
{
return attack_;
}
// ? .
return parent_->getAttack();
}
Способ будет работать корректно, даже если во время 
выполнения род был изменен так, чтобы больше не на-
следовать или не переопределять какое-то свойство. Од-
нако он требует немного больше памяти (необходимо 



Download 3,35 Mb.

Do'stlaringiz bilan baham:
1   ...   187   188   189   190   191   192   193   194   ...   313




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish