Game Programming Patterns / Паттерны программирования в играх: 1.4. Prototype

← →
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Первый раз я услышал слово прототип в Паттернах Проектирования.

eko24 30.04.14 в 18:40

1

Впервые, я услышал термин "прототип" в Паттернах Проектирования.

GromHoll 14.06.14 в 11:15

4

Сегодня, похоже, все его используют, но оказывается, что они говорят не о паттернах проектирования.

eko24 30.04.14 в 18:42

0

Сегодня, кажется, его использую все подряд, но только не в разговорах о паттернах проектирования.

GromHoll 14.06.14 в 11:17

1

Мы расскажем это здесь, но я также покажу вам другие, более интересные места, где термин "прототип" и его концепции появились.

eko24 30.04.14 в 18:44

0

Мы расскажем об этом, но так же я покажу более интересные места, где термин "прототип" и его идея может всплыть.

GromHoll 14.06.14 в 11:19

0

Мы обсудим это, а также я покажу другие места, поинтереснее, откуда термин "прототип" и концепция, стоящая за этим словом, появились на свет.

Deo 24.08.14 в 20:56

1

Но сперва давайте вернемся к оригинальным паттернам

eko24 30.04.14 в 18:45

0

Говоря "оригинальным" - я не говорю об этом легкомысленно

eko24 30.04.14 в 18:46

0

Паттерны Проектирования цитируют легендарный проект Ивана Сазерленда в 1963 году, как один из первых примеров этого паттерна в "дикой природе".

eko24 30.04.14 в 18:47

0

Пока остальные слушали Дилана и Битлз, Сазерленд был занят, что бы вы понимали, изобретением базовых концепций CAD, интерактивной графики, и объектно-ориентированного программирования.

eko24 30.04.14 в 18:49

2

Просмотрите демонстрацию и приготовьтесь удивится.

eko24 30.04.14 в 18:50

0

Смотрите демо и готовьтесь восхищаться.

Deo 24.08.14 в 20:57

0

Паттерн проектирования Prototype

eko24 30.04.14 в 18:52

0

Представьте, что мы делаем игру в стиле Gauntlet.

eko24 30.04.14 в 18:52

0

У нас есть существа и демоны, которые роятся вокруг героя, борясь за свою долю его плоти.

eko24 30.04.14 в 18:54

1

Эти сомнительные братья по ужину выходят на арену с помощью "спавнера", и для каждого вида врага есть свой спавнер.

eko24 30.04.14 в 18:56

2

Ради этого примера, скажем, у нас есть различные типы для каждого вида монстра в игре.

eko24 30.04.14 в 18:57

0

У нас есть реальные классы C + + для Призрака, Демона, Волшебника и т.д.

eko24 30.04.14 в 18:58

0

, такие как:

eko24 30.04.14 в 18:58

0

class Monster

eko24 30.04.14 в 19:01

0

{

eko24 30.04.14 в 19:01

0

// Всякая всячина...

eko24 30.04.14 в 19:02

0

};

eko24 30.04.14 в 19:02

0

class Ghost : public Monster {};

eko24 30.04.14 в 19:02

0

class Demon : public Monster {};

eko24 30.04.14 в 19:02

0

class Sorcerer : public Monster {};

eko24 30.04.14 в 19:02

0

Спавнер создает экземпляр одного конкретного вида монстра.

eko24 30.04.14 в 19:03

1

Для поддержки каждого монстра в игре, мы могли бы грубой силой вынудить его (?), имея класс Spawner для каждого класса монстра, что приводит к иерархии параллельного класса:

eko24 30.04.14 в 19:05

0

Для поддержки всех монстров в игре, мы могли бы перебрать их и написать для каждого свой спавнер, создав параллельную иерархию классов:

GromHoll 14.06.14 в 11:27

2
+1

Реализация выглядит следующим образом:

eko24 30.04.14 в 19:06

1

class Spawner

eko24 30.04.14 в 19:06

0

{

eko24 30.04.14 в 19:06

0

public:

eko24 30.04.14 в 19:06

0

virtual ~Spawner() {}

eko24 30.04.14 в 19:06

0

virtual Monster* spawnMonster() = 0;

eko24 30.04.14 в 19:06

0

};

eko24 30.04.14 в 19:06

0

class GhostSpawner : public Spawner

eko24 30.04.14 в 19:06

0

{

eko24 30.04.14 в 19:06

0

public:

eko24 30.04.14 в 19:17

0

virtual Monster* spawnMonster()

eko24 30.04.14 в 19:17

0

{

eko24 30.04.14 в 19:06

0

return new Ghost();

eko24 30.04.14 в 19:17

0

}

eko24 30.04.14 в 19:07

0

};

eko24 30.04.14 в 19:07

0

class DemonSpawner : public Spawner

eko24 30.04.14 в 19:07

0

{

eko24 30.04.14 в 19:07

0

public:

eko24 30.04.14 в 19:07

0

virtual Monster* spawnMonster()

eko24 30.04.14 в 19:07

0

{

eko24 30.04.14 в 19:07

0

return new Demon();

eko24 30.04.14 в 19:07

0

}

eko24 30.04.14 в 19:07

0

};

eko24 30.04.14 в 19:07

0

// Ну вы поняли...

eko24 30.04.14 в 19:08

0

Если вам не платят за количество строк кода, это довольно очевидно, что это - не забавный способ заставить это работать.

eko24 30.04.14 в 19:13

0

Очевидно, такой способ может быть забавным, только если вам платят за количество строк кода.

Deo 24.08.14 в 21:06

0

Много классов, много шаблонов, много избыточности, много дублирования, много повторений ...

eko24 30.04.14 в 19:14

0

Куча классов, шаблонов, много избыточности, дублирования, повторений...

Deo 24.08.14 в 21:09

0
Минутку...

Следующая страница →