首页 > 其他分享 >软件设计模式之模拟游角色选择(Darren建造者模式)

软件设计模式之模拟游角色选择(Darren建造者模式)

时间:2022-12-05 15:05:39浏览次数:32  
标签:里面 游戏 角色 软件设计 创建 Darren 模式 AbstractRole


o(︶︿︶)o 唉,今天的状态不是很好,但是学习还是要继续的,今天和大家一起分享一下建造者模式,记得之前自己之前一直再想QQ秀换装是怎么是怎么是实现的,今天看了建造者模式我明白了... 

Darren又在每天的这个时候与大家见面了........

伴随着家驹的《不在犹豫》今天的学习就这样展开了:

首先回忆一下之前我已经学习的设计模式和原则:

简单工厂模式,策略模式,单一职责原则,开放封闭原则,依赖倒转原则,装饰模式,代理模式,抽象工厂模式,原型模式,模板方法模式,迪米特法则,外观模式

总结一下目前我已经学习了8个设计模式和4个设计原则

今天就再学习一下建造者模式

先分析一下我们现在的需求:

每当我们创建游戏用户成功的时候,第一次登录以后系统都会提示我们选择我们喜欢的人物,对于大部分网游基本上都是这种模式,像诛仙,天龙八部,问道。还有一些是玩家进入游戏以后才开始选角色,例如反恐精英ONLINE。不用的游戏都会让玩家根据自己的意愿去选择自己喜欢的人物,今天我们就来小小剖析一下这里面的原理:

代码今天由于时间关系就不提供源码了,只要原理讲清楚了,我想编码应该不是什么问题。

我对反恐精英ONLINE比较熟悉,其实这个游戏和早期的CS很像,大家应该都不会陌生:


当我们开始一轮战斗,在开始的时候系统会提示我们要选择的角色,下面是反恐精英里面的部分角色以及介绍:

软件设计模式之模拟游角色选择(Darren建造者模式)_网游

这几个角色都是前年反恐里面比较流行的几个角色,不从性别方面我们可以初步了解这几款角色具有的共同特点就是他们都是人,都有头,手,脚,身子,当然武器配备如果从编程的角度去考虑的话应该另外抽出一个类单独去写,这一块就不在多讲了:

游戏里面最重要的就是游戏角色和技能,角色看上去好了,技能炫了,武器装吧好了,大家都喜欢玩,想当年反恐里面出现一个“伊琳娜”让多少男玩家倾心,尤其是掌握这个角色的也是一个女玩家,大家想想轰动可想而知,谁让这个社会就是一个狼的社会呢:

一款游戏里面必须要有很多角色,这样才能吸引住玩家。

我们先来讲一下建造者模式的定义以及应用场合:

定义:

将一个复杂对象和它的表示分离,使用同样的构造过程可以创建不同的表示。


软件设计模式之模拟游角色选择(Darren建造者模式)_网游_02

建造者模式的好处:

建造者模式的好处就是建造代码和表示代码分离,由于简直者隐藏了该对象是如何组装的,所以如果想改变一个产品的内部表示,只需要再定义一个建造者就可以了。

应用场合:

创造者模式是在当创建复杂的对象的算法应该独立于该对象的组成部分及它们的装配方式时适用的模式。


介绍完建造者的具体定义以及应用场合,大家应该对这个模式有了一定的了解,那么现在大家一起来吧游戏角色创建一起理一下


1,首先我们应该建立一个GameRole角色类,里面封装游戏角色的相关属性以及动作。这里简单的定义几个动作:走,猫步走,跑,开枪,扔手雷.. ...


2,定义抽象角色类AbstractRole,里面封装具体的创建各个角色的方法,比如创建头型,发型,眼型,眉形,嘴型,身体,衣服,裤子,鞋子 ... ...里面考虑的比较多,就不一一列举了。


3,定义具体的角色类,比如说"安娜"Ana类,这个类继承自AbstractRole,在这个类里面根据我们的意愿去构建我们想要的角色的头型,发型,衣服,裤子,身体,鞋子。


4,定义角色创建控制类RoleDirector。这个类里面大致是这样写的:

Class RoleDirector

{

private AbstractRole absRole;

public RoleDirector(AbstractRole nowRole)

{

this.absRole = nowRole;

}


public void CreatRole()

{

absRole.创建头型();

absRole.创建身体();

.... ....

}

}


在客户端调用的时候就直接:

.... ........        .......      .......

Ana ana = new Ana();

RoleDirector roleDirector = new RoleDirector(ana);

roleDirector.CreatRole();

.................

......


如果客户端需要调用角色的相关方法,例如,跑,跳,扔雷等操作的时候,只需在AbstractRole里面添加一个抽象的方法,让他来返回一个GameRole就可以啦,这样你就可以在客户端调用角色的相关动作。


到此为止,整个角色的创建思路分析完毕。时间也花了不少。

,如果主管要求我们再添加几个新的游戏角色的话:

软件设计模式之模拟游角色选择(Darren建造者模式)_游戏_03

没问题,我们只需要添加这几个角色的类,然后继承于AbstractRole并实现里面的方法就好了。是不是扩展性很强呢。其实在创建模式是对依赖倒转原则的实际用用,依赖于抽象,不依赖与具体。



标签:里面,游戏,角色,软件设计,创建,Darren,模式,AbstractRole
From: https://blog.51cto.com/u_11295556/5912188

相关文章

  • 软件设计模式之外观设计模式(Darren)
    先回顾一下之前我们已经讲过的设计模式:简单工厂模式,策略模式,单一职责原则,开放封闭原则,依赖倒转原则,装饰模式,抽象工厂模式,模板方法模式,迪米特法则;今天我们来讲一下......
  • Web前端开发中的MCRV模式
     摘要针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性、扩展性和适应性差等问题,本文尝试以MVC思想为基础,结合Web前端开发中“内容......
  • Selenium4+Python3系列(十) - Page Object设计模式
    前言​​PageObject(PO)​​​模式,是​​Selenium​​实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一。在设计测试时,把页面元素定位和元素操作方法按照......
  • 22.状态模式
    [实验任务一]:银行账户用Java代码模拟实现课堂上的“银行账户”的实例,要求编写客户端测试代码模拟用户存款和取款,注意账户对象状态和行为的变化。代码Java代码Account.j......
  • C++ IMPL模式解析(下)
    二进制兼容在上一章结尾处提到了二进制兼容的概念,这里先说说二进制兼容的问题。为什么是二进制兼容简单说,就是我的可执行程序调用你的动态库(so/dll),若动态库发生改动,我......
  • 设计模式之代理模式学习分享[Darren]
    很高兴又在每晚的这个时候和博友有分享今天的学习成果了,感谢大家一直对Darren的支持,也希望各位博友们能将自己的好文章分享出来,在此Darren只是抛砖,希望大家不要吝啬自己的学......
  • VK1625是一种64*8点 LCD液晶段码屏显示驱动控制电路(IC/芯片),可兼容替代市面1625,具省电
    产品品牌:永嘉微电/VINKA产品型号:VK1625封装形式:LQFP100/QFP100/DICE概述:VK1625是一个点阵式存储映射的LCD驱动器,可支持最大512点(64EGx8COM)的LCD屏。单片机可通过3/4线串......
  • 单例模式常用模板类
    单例模式可以确保软件生命周期内仅有一个实例化对象,方便各处便利调用。单例模板类申明定义如下:template<typenameT>classSingleTon{public:staticT&getIns......
  • 21.观察者模式
    [实验任务一]:股票提醒当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。类图代码JavaClient.javapac......
  • C++ IMPL模式解析
    https://blog.csdn.net/myw31415926/article/details/127722899抛砖引玉试想一个问题,如果有一套收发数据的网络接口,需要提供给其他同事或厂家使用,包含头文件和动态库,假设......