Game Programming Patterns / Паттерны программирования в играх: 1.4. Prototype
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Первый раз я услышал слово прототип в Паттернах Проектирования. eko24 30.04.14 в 18:40 Впервые, я услышал термин "прототип" в Паттернах Проектирования. GromHoll 14.06.14 в 11:15 |
|
|
Сегодня, похоже, все его используют, но оказывается, что они говорят не о паттернах проектирования. eko24 30.04.14 в 18:42 Сегодня, кажется, его использую все подряд, но только не в разговорах о паттернах проектирования. GromHoll 14.06.14 в 11:17 |
||
|
Мы расскажем это здесь, но я также покажу вам другие, более интересные места, где термин "прототип" и его концепции появились. eko24 30.04.14 в 18:44 Мы расскажем об этом, но так же я покажу более интересные места, где термин "прототип" и его идея может всплыть. GromHoll 14.06.14 в 11:19 Мы обсудим это, а также я покажу другие места, поинтереснее, откуда термин "прототип" и концепция, стоящая за этим словом, появились на свет. Deo 24.08.14 в 20:56 |
||
|
Но сперва давайте вернемся к оригинальным паттернам eko24 30.04.14 в 18:45 |
||
|
Говоря "оригинальным" - я не говорю об этом легкомысленно eko24 30.04.14 в 18:46 |
||
|
Паттерны Проектирования цитируют легендарный проект Ивана Сазерленда в 1963 году, как один из первых примеров этого паттерна в "дикой природе". eko24 30.04.14 в 18:47 |
||
|
Пока остальные слушали Дилана и Битлз, Сазерленд был занят, что бы вы понимали, изобретением базовых концепций CAD, интерактивной графики, и объектно-ориентированного программирования. eko24 30.04.14 в 18:49 |
||
|
Просмотрите демонстрацию и приготовьтесь удивится. eko24 30.04.14 в 18:50 Смотрите демо и готовьтесь восхищаться. Deo 24.08.14 в 20:57 |
||
|
Паттерн проектирования Prototype eko24 30.04.14 в 18:52 |
||
|
Представьте, что мы делаем игру в стиле Gauntlet. eko24 30.04.14 в 18:52 |
||
|
У нас есть существа и демоны, которые роятся вокруг героя, борясь за свою долю его плоти. eko24 30.04.14 в 18:54 |
||
|
Эти сомнительные братья по ужину выходят на арену с помощью "спавнера", и для каждого вида врага есть свой спавнер. eko24 30.04.14 в 18:56 |
||
|
Ради этого примера, скажем, у нас есть различные типы для каждого вида монстра в игре. eko24 30.04.14 в 18:57 |
||
|
У нас есть реальные классы C + + для Призрака, Демона, Волшебника и т.д. eko24 30.04.14 в 18:58 |
||
|
, такие как: eko24 30.04.14 в 18:58 |
||
|
class Monster eko24 30.04.14 в 19:01 |
||
|
{ eko24 30.04.14 в 19:01 |
||
|
// Всякая всячина... eko24 30.04.14 в 19:02 |
||
|
}; eko24 30.04.14 в 19:02 |
||
|
class Ghost : public Monster {}; eko24 30.04.14 в 19:02 |
||
|
class Demon : public Monster {}; eko24 30.04.14 в 19:02 |
||
|
class Sorcerer : public Monster {}; eko24 30.04.14 в 19:02 |
||
|
Спавнер создает экземпляр одного конкретного вида монстра. eko24 30.04.14 в 19:03 |
||
|
Для поддержки каждого монстра в игре, мы могли бы грубой силой вынудить его (?), имея класс Spawner для каждого класса монстра, что приводит к иерархии параллельного класса: eko24 30.04.14 в 19:05 Для поддержки всех монстров в игре, мы могли бы перебрать их и написать для каждого свой спавнер, создав параллельную иерархию классов: GromHoll 14.06.14 в 11:27 |
+1 | |
|
Реализация выглядит следующим образом: eko24 30.04.14 в 19:06 |
||
|
class Spawner eko24 30.04.14 в 19:06 |
||
|
{ eko24 30.04.14 в 19:06 |
||
|
public: eko24 30.04.14 в 19:06 |
||
|
virtual ~Spawner() {} eko24 30.04.14 в 19:06 |
||
|
virtual Monster* spawnMonster() = 0; eko24 30.04.14 в 19:06 |
||
|
}; eko24 30.04.14 в 19:06 |
||
|
class GhostSpawner : public Spawner eko24 30.04.14 в 19:06 |
||
|
{ eko24 30.04.14 в 19:06 |
||
|
public: eko24 30.04.14 в 19:17 |
||
|
virtual Monster* spawnMonster() eko24 30.04.14 в 19:17 |
||
|
{ eko24 30.04.14 в 19:06 |
||
|
return new Ghost(); eko24 30.04.14 в 19:17 |
||
|
} eko24 30.04.14 в 19:07 |
||
|
}; eko24 30.04.14 в 19:07 |
||
|
class DemonSpawner : public Spawner eko24 30.04.14 в 19:07 |
||
|
{ eko24 30.04.14 в 19:07 |
||
|
public: eko24 30.04.14 в 19:07 |
||
|
virtual Monster* spawnMonster() eko24 30.04.14 в 19:07 |
||
|
{ eko24 30.04.14 в 19:07 |
||
|
return new Demon(); eko24 30.04.14 в 19:07 |
||
|
} eko24 30.04.14 в 19:07 |
||
|
}; eko24 30.04.14 в 19:07 |
||
|
// Ну вы поняли... eko24 30.04.14 в 19:08 |
||
|
Если вам не платят за количество строк кода, это довольно очевидно, что это - не забавный способ заставить это работать. eko24 30.04.14 в 19:13 Очевидно, такой способ может быть забавным, только если вам платят за количество строк кода. Deo 24.08.14 в 21:06 |
||
|
Много классов, много шаблонов, много избыточности, много дублирования, много повторений ... eko24 30.04.14 в 19:14 Куча классов, шаблонов, много избыточности, дублирования, повторений... Deo 24.08.14 в 21:09 |
