最近在制作公会火堆的功能,逻辑不是太繁琐,也借此做了一个简单的模块划分。以便于更好的理解抽象工厂模式。

1.功能描述:

我们有3个火堆,默认开放第一个,第二个第三个由公会的等级来决定;

每个火堆下面都有各种BUFF,三个火堆的可选BUFF是一样的((╯‵□′)╯︵┻━┻,有病的设计);

每种BUFF会有3个等级,加成效果不一样,消耗木材数目也不一样。

木材由公会成员捐献到公会仓库,由会长和管理员决定开启哪种BUFF,同类型BUFF可以叠加。

2.功能的划分

我们设计了一个基础BUFF类,BUFF工厂类,BUFF选单类,火堆类,火堆管理员类

3.功能详解

 1)基础BUFF类

/// <summary>
/// 作为基础Buff 可能有血量 攻击 等等不同的buff  目前是加成百分比  后期有可能 每种buff 出现功能上的不同所以 此类 作为基类来处理 其余实际Buff 继承于本类
/// 暂时 buff 值写在这里 后期功能右边  后人自行修改结构
/// </summary>
public abstract class BaseBuff
{public int level;public float BuffValue;public int BuffCostCount;//消耗木材数量public BaseBuff(int _level,float _buffValue,int _cost){this.level = _level;this.BuffValue = _buffValue;this.BuffCostCount = _cost;}}

 这个类作为基类来处理,其余的类必须继承于此,上面定义的等级、数值、消耗木材量,这些是所有BUFF共有的一些东西,目前来说暂时的功能全都是倍率加成类型的,但是鬼知道天杀的策划会出什么幺蛾子,所以我们做一个基类,将来如果不是数值加成的,我们在具体实施的BUFF类里面做修改就行了。

2)BUFF工厂类

public class BuffFactory
{//public  enum BuffCategory//{//    AtkBuff,//    ResistanceBuff,//    GoldBuff,//    WoodBuff,//    PowerBuff,//    StaminaBuff,//    ExpBuff//}/// <summary>/// 创建Buff/// </summary>public static RealBuff CreatBuff(int category,int lv,float value,int cost){                                                                              // 以后改变buff类型可以改变返回类型 或者使用泛型RealBuff buff = new RealBuff(category, lv, value, cost);return buff;}}/// <summary>
/// 实际被操作的Buff
/// </summary>
public class RealBuff : BaseBuff
{public int BuffCategory ;public RealBuff(int _category,int _level, float _buffValue, int _cost): base(_level, _buffValue, _cost){this.BuffCategory = _category;}}

我们做了这个工厂。。。工厂嘛,造东西的,这个就是用来造BUFF的,下面的class realbuff 就是我们的具体BUFF了,上面讲到我们防止策划有变数所以做了基类,但是目前没什么事 我们就把所有BUFF用这个来表达,在上面的工厂类中我也做类枚举来防策划(╯‵□′)╯︵┻━┻。我们在创建BUFF的时候直接使用构造函数来创建。

 3)BUFF选单类

public class BuffTable
{public int TableIndex;public List<BaseBuff> Buffs = new List<BaseBuff>();private GuildFires Fire;public BuffTable(int _index, GuildFires _fire){this.TableIndex = _index;this.Fire = _fire;this.InitAllBuff();}/// <summary>/// 造出页面上的所有buff/// </summary>private void InitAllBuff(){List<PBGuildFireBuffConf> firesConf = Kiwi.Core.GDHolder.GetguildFireBuffConfs();firesConf.ForEach((PBGuildFireBuffConf item) => //先遍历type{if (item.fireIndex.Contains(this.TableIndex)){item.fireLevels[this.Fire.level - 1].ForEach((PBGuildFireBuffLevelConf levelconf) => {//取火堆等级相应的数据 进行遍历Buffs.Add(BuffFactory.CreatBuff(item.pk, this.Fire.buffLevel, levelconf.buffValue, levelconf.woodCost));});}});}}

这个选单类我们同样使用构造函数来初始化各种参数,我们有选单的编号,有BUFF的集合 还有造出BUFF的函数,数据结构请忽略,为了策划填表和后端运算方便才这么做的。这个选单也是可以扩充和变化的。结构并不复杂。

4)火堆类

public class BaseBonfire
{public int Index;//火堆编号// public int LvUpNeedWoodCount;//升级所需木材// public string NameOfBonfire;//火堆名字public BuffTable Room;/// <summary>/// 火堆的构造函数/// </summary>/// <param name="_index"></param>public BaseBonfire(int _index){this.Index = _index;}//火堆的功能写在下面}

火堆基本也是一样的,我们就直接造一个这样的类,所有功能都是相同的,提前做了些字段来防策划(╯‵□′)╯︵┻━┻,注意我们这里有一个选单的字段 BuffTable Room,就是上面的选单要给赋值到这里。

5)管理员类

public class BonfireMgr
{private static Dictionary<int, BaseBonfire> GuildFireDic = new Dictionary<int, BaseBonfire>();public BonfireMgr(){}/// <summary>/// 创建完整的工会火堆/// </summary>public void CreatBoneFire(){ViewUser user = ((DataSysUser)Kiwi.Core.DataMgr.GetDataSys(DataSysID.DS_USER)).ViewUser;BaseBonfire fire1 = new BaseBonfire(1);fire1.Room = this.CreatBuffRoom(1, user.guild.guildInfo.fire1);BaseBonfire fire2 = new BaseBonfire(2);fire2.Room = this.CreatBuffRoom(1, user.guild.guildInfo.fire2);BaseBonfire fire3 = new BaseBonfire(3);fire3.Room = this.CreatBuffRoom(1, user.guild.guildInfo.fire3);BonfireMgr.GuildFireDic.Add(1, fire1);BonfireMgr.GuildFireDic.Add(2, fire2);BonfireMgr.GuildFireDic.Add(3, fire3);}/// <summary>/// 创建buff选单/// </summary>/// <param name="index"></param>/// <param name="fires"></param>/// <returns></returns>public BuffTable CreatBuffRoom(int index,GuildFires fires){return new BuffTable(index, fires);}}

我们有一个造火堆的函数,有一个造选单的函数,在早火堆的同时造出选单,并把选单赋值给火堆然后 存放到上面的火堆的字典中,这样在表现层来取具体的东西就方便了。

以上就是我们的公户火堆功能的逻辑划分,这些都只是从表现层抽象出来的逻辑,这些只是部分代码,用来表达逻辑的,具体逻辑就不公布了。

大家可以从上面看出,逻辑功能的划分其实不是很难,只要梳理清楚,知道自己要做什么即可,这样在维护的时候也没那痛苦,各自管理各自的功能,降低耦合性,不会牵一发动全身,比如我们要改变BUFF的功能,这样我们直接造一个新的BUFF并给他新的功能函数就行了,如果这个直接是做在选单里面的,写改的时候还要去改选单里面的创建BUFF的函数。

就这么多,以后会尽快更新博客。

此文仅仅供新手使用,高手绕路。

【unity】【设计模式】【游戏设计】从公会火堆功能讲简单的功能划分相关推荐

  1. Unity 五子棋游戏设计和简单AI(2)

    上文我们实现了基本五子棋的下棋的基本功能,这次我们来判断五子棋的胜负条件.逻辑是这样的:每次下棋后之后对这个棋子进行8个方向的检测,如果有相同类型的棋子则沿着棋子继续判断直到5个为止.介绍完基本思路, ...

  2. Unity五子棋游戏设计 和简单AI实现(1)

     1 准备工作: vs unity ,棋子,一张15*15的棋局. 我们先把准备好的图直接拖上来,将左下方的点设为(0,0),因此将中心点设为(7,7),由于图中的中心和图片pivot不完全吻合,所以 ...

  3. 游戏邦成立以来部分游戏设计观点回顾

    游戏邦成立以来部分游戏设计观点回顾(五万字长文) 发布时间:2012-01-10 17:04:40 Tags:微博平台,游戏邦,部分游戏设计观点回顾 2010年底,游戏邦从数据分析的角度解析了当时手机 ...

  4. 设计模式 - 七大设计原则(一)

    设计模式 - 七大设计原则(一) 概述 简单介绍一下七大设计原则: 开闭原则:是所有面向对象设计的核心,对扩展开放,对修改关闭 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体 单一职责原则:一个 ...

  5. java设计建议植物大战僵尸_基于Java的游戏设计之植物大战僵尸

    植物大战僵尸这款游戏相信大家或多或少都玩过,那么大家有没有想过自己尝试着做一下植物大战僵尸的游戏设计呢.本文将基于Java语言为大家展示如何开发出植物大战僵尸游戏的简易版本,主要内容包括规则.对象.功 ...

  6. 【微信小游戏实战】零基础制作《欢乐停车场》一、游戏设计

    1.游戏立项 微信小游戏中有一款<欢乐停车场>的小游戏,大家可以搜索玩下.这是一款益智类的小游戏,游戏中有红.黄.绿.蓝.紫5辆豪车6个停车位,玩家通过可行走路线移动小车,最终让各颜色的小 ...

  7. Unity游戏设计与实现 南梦宫一线程序员的开发实例pdf

    下载地址:网盘下载 编辑推荐 10个典型的开发实例,覆盖基本游戏类型  怪物--点击动作游戏  迷你拼图--拼图游戏  地牢吞噬者--吃豆游戏  In the Dark Water--3D声音探索游戏 ...

  8. vista下载_Vista和视图在游戏设计中的功能

    vista下载 Views in video games are observation points used to highlight a lot of objects into one fram ...

  9. Unity游戏设计与实现 南梦宫一线程序员的开发实例

    图灵程序设计丛书 Unity游戏设计与实现:南梦宫一线程序员的开发实例(修订版) 加藤政树 (作者) 罗水东 (译者)  c# 游戏 unity <内容提要> 本书的作者是日本知名游戏公司 ...

最新文章

  1. python 发邮件-带附件-文本-html
  2. 【WP7】对象序列化
  3. 7.破解的最简单例子
  4. pytorch torch.from_numpy()(从numpy数组创建一个张量,数组和张量共享相同内存)
  5. 343. Integer Break
  6. Json string to object debug - json字符串转Java对象的处理调试
  7. 用Python增强Excel的3大集成方法及用途
  8. 一键搞定数码照片印前特效-【用可牛影像】
  9. PHP编写增功能思路,php ztree如何实现增 删 改
  10. git fetch实战以及与git pull 的区别
  11. 例4.5 最小公倍数 - 九度教程第48题(最小公倍数)
  12. css3 border渐变实现
  13. java实现中文转拼音包含声调
  14. oracle查询平均每月数据,oracle 按每天,每周,每月,每季度,每年查询统计数据
  15. 使用itextPdf合并PDF
  16. Linux container hand-crafted
  17. 营造平安 信息化使公交事业更加人性化
  18. java实现注销功能_8.6.2 登录注销功能的实现
  19. 北京联合大学计算机科学与技术分数线,北京联合大学录取分数线2021是多少分(附历年录取分数线)...
  20. 域名备案、服务器备案和网站备案有什么区别?

热门文章

  1. 在java中实现 AutoCAD api
  2. 常见射频同轴连接器类型
  3. 结合WebSocket和Openlayers4实现地图内容的刷新
  4. vue实现类目筛选功能
  5. python爬虫案例(二):大学排名
  6. 【转】欧姆龙OMRON PLC之HostLink通讯协议-FINS命令W字/位操作篇
  7. JNI获取assets文件夹内的文件地址
  8. Qt解决qrc文件过大问题
  9. 网页防篡改把服务器顶满,网页防篡改技术
  10. C# 中用 Sqlparameter 的两种用法