游戏设计模式-原型模式
使用特定原型实例来创建特定种类的对象,并且通过拷贝原型来创建新的对象。
原型模式的核心思想是:一个对象可以生成与自身相似的其他对象。假设我们有一个怪物的类,我们可以这样构造:
#include <iostream>class Enemy
{
public:virtual ~Enemy() {}virtual std::shared_ptr<Enemy> Clone() = 0;
};class BirdEnemy :public Enemy
{
public:BirdEnemy(){}BirdEnemy(float hp, float speed) :hp(hp), speed(speed) {}virtual std::shared_ptr <Enemy> Clone(){return std::make_shared< BirdEnemy>(100, 20);}private:float hp = 0;float speed = 0;
};
然后我们定义一个生成器
class Spawner
{
public:virtual ~Spawner() {}virtual std::shared_ptr<Enemy> SpawnEnemy() = 0;
};template<class T>
class SpawnFor : public Spawner
{
public:virtual std::shared_ptr<Enemy> SpawnEnemy() { return std::make_shared<T>(); }
};
使用
auto bird_spawner = std::make_shared<SpawnFor<BirdEnemy>>();
如果我们想要创建各种各样的BirdEnemy,则只需要创建各种各样的原型。我们只需要对上面的代码进行简单的更改:
class Enemy
{
public:virtual ~Enemy() {}virtual std::shared_ptr<Enemy> Clone() = 0;
};class BirdEnemy :public Enemy
{
public:BirdEnemy(){}BirdEnemy(const BirdEnemy& be) :hp(be.hp), speed(be.speed) {}BirdEnemy(BirdEnemy&& be) :hp(be.hp), speed(be.speed) {}BirdEnemy(float hp, float speed) :hp(hp), speed(speed) {}virtual std::shared_ptr <Enemy> Clone(){return std::make_shared< BirdEnemy>(*this);}private:float hp = 0;float speed = 0;
};class Spawner
{
public:virtual ~Spawner() {}virtual std::shared_ptr<Enemy> SpawnEnemy() = 0;
};template<class T>
class SpawnFor : public Spawner
{
public:SpawnFor(T&& t) :t(std::move(t)) {}virtual std::shared_ptr<Enemy> SpawnEnemy() { return t.Clone(); }private:T t;
};
现在策划告诉我们需要一个血量为100,速度为20的鸟类怪物,只需要:
BirdEnemy brid_enemy_template(100, 20);
auto bird_spawner = std::make_shared<SpawnFor<BirdEnemy>>(std::move(brid_enemy_template));
甚至下一步,可以直接将这些数值和种类都配置在表格里,代码进行循环读取,并创建各种各样的生成器。
以上都是基于C++来进行的设计,但是对于很多将Class作为头等公民的语言来说,Class是可以当做参数进行传递的,对于上面的实现,将会更加的简洁和优雅。
游戏设计模式-原型模式相关推荐
- 设计模式 原型模式_创新设计模式:原型模式
设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...
- 设计模式 原型模式_设计模式:原型
设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...
- 设计模式 原型模式_原型设计模式:创建另一个小车
设计模式 原型模式 创建对象确实是一个耗时的过程,也是一件昂贵的事情. 因此,我们现在正冒险节省时间和金钱. 我们该怎么做? 克隆奇迹多莉 有人记得多莉吗? 是的,是绵羊,是第一个被克隆的哺乳动物. ...
- Java常用设计模式————原型模式(一)
介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...
- 第六章 Caché 设计模式 原型模式
文章目录 第六章 Caché 设计模式 原型模式 定义 使用场景 优点 结构图 描述 示例 初级写法 缺点 中级写法 缺点 高级写法 (浅复制) 浅复制 深复制 完整示例 简历类(复制类) 对象类(工 ...
- C++设计模式——原型模式(Prototype Pattern)
C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...
- 游戏设计模式 - 命令模式在Unity中的应用(C#)
游戏设计模式 - 命令模式在Unity中的应用(C#) 实测:这是一篇简单易懂的文章-> https://zhuanlan.zhihu.com/p/46937284
- 设计模式---原型模式(Prototype Pattern)
在编程中有时候我们会发现,当我们需要一个实例,可是这个实例的创建过程十分复杂,在执行过程中 会消耗大量的时间,同时创建第一个实例和创建第二个时间的初始化信息并未改变.在此种情况下,直接New 一个实例 ...
- 精通python设计模式-浅谈Python设计模式 - 原型模式
声明,本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在<精通Python设计模式>中把设计模式分为三种类型: 创建型模式 ...
最新文章
- 一文概述2017年深度学习NLP重大进展与趋势
- impala和python_Impala和Hive之间有什么关系?
- 入行Python需要看的4本书推荐
- Python读取文本,输出指定中文(字符串)
- 台式计算机配置清单及价格,电脑主机配置清单及价格(台式组装机电脑配置清单)...
- 用Python批量替换多个Word文件中的文字
- [QUANTAXIS量化分析]三因素模型
- 无线路由器使用有线的桥接方法。
- 数仓02-从0到1设计和搭建
- 文本超出显示省略号的方法
- C语言连续定义多个指针变量
- 距离矢量(D-V)和链路状态(LS)的区别(转)
- 【入门】求长方形的周长和面积
- project2010 实验一使用记录
- 如何批量添加文件名前缀?
- PHP三种数组合并方式
- 利用现有资源建立自己的经营模式
- java resultmap_mybatis: resultMap 结果集映射和多表查询
- 微信自定义链接分享标题描述跳转任意链接url在线生成方法
- 写给即将步入大一的计算机新生的一些经验之谈
热门文章
- 计算机信息系统集成资质涉密信息系统集成资质
- 联想电脑安装Ubuntu后无法进入bios
- Mysql+Echarts+Python+Flask实现前后端交互及数据可视化
- windows用python读取文件open()函数
- 完美解决“未能装载Office文档控件。请使用Internet Explorer(6.0+)浏览器并检查浏览器的安全设置。”的方案
- 4路 HX5+Emulex 8Gb 实现 BOFM 实施 -chenjhh@dc
- Django基于admin的stark组件创建(一)
- 俄罗斯军事帝国的衰落
- 电脑的大脑——CPU
- html自学网页制作,HTML入门学习教程:简单网页制作