【unity】【设计模式】【游戏设计】从公会火堆功能讲简单的功能划分
最近在制作公会火堆的功能,逻辑不是太繁琐,也借此做了一个简单的模块划分。以便于更好的理解抽象工厂模式。
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】【设计模式】【游戏设计】从公会火堆功能讲简单的功能划分相关推荐
- Unity 五子棋游戏设计和简单AI(2)
上文我们实现了基本五子棋的下棋的基本功能,这次我们来判断五子棋的胜负条件.逻辑是这样的:每次下棋后之后对这个棋子进行8个方向的检测,如果有相同类型的棋子则沿着棋子继续判断直到5个为止.介绍完基本思路, ...
- Unity五子棋游戏设计 和简单AI实现(1)
1 准备工作: vs unity ,棋子,一张15*15的棋局. 我们先把准备好的图直接拖上来,将左下方的点设为(0,0),因此将中心点设为(7,7),由于图中的中心和图片pivot不完全吻合,所以 ...
- 游戏邦成立以来部分游戏设计观点回顾
游戏邦成立以来部分游戏设计观点回顾(五万字长文) 发布时间:2012-01-10 17:04:40 Tags:微博平台,游戏邦,部分游戏设计观点回顾 2010年底,游戏邦从数据分析的角度解析了当时手机 ...
- 设计模式 - 七大设计原则(一)
设计模式 - 七大设计原则(一) 概述 简单介绍一下七大设计原则: 开闭原则:是所有面向对象设计的核心,对扩展开放,对修改关闭 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体 单一职责原则:一个 ...
- java设计建议植物大战僵尸_基于Java的游戏设计之植物大战僵尸
植物大战僵尸这款游戏相信大家或多或少都玩过,那么大家有没有想过自己尝试着做一下植物大战僵尸的游戏设计呢.本文将基于Java语言为大家展示如何开发出植物大战僵尸游戏的简易版本,主要内容包括规则.对象.功 ...
- 【微信小游戏实战】零基础制作《欢乐停车场》一、游戏设计
1.游戏立项 微信小游戏中有一款<欢乐停车场>的小游戏,大家可以搜索玩下.这是一款益智类的小游戏,游戏中有红.黄.绿.蓝.紫5辆豪车6个停车位,玩家通过可行走路线移动小车,最终让各颜色的小 ...
- Unity游戏设计与实现 南梦宫一线程序员的开发实例pdf
下载地址:网盘下载 编辑推荐 10个典型的开发实例,覆盖基本游戏类型 怪物--点击动作游戏 迷你拼图--拼图游戏 地牢吞噬者--吃豆游戏 In the Dark Water--3D声音探索游戏 ...
- vista下载_Vista和视图在游戏设计中的功能
vista下载 Views in video games are observation points used to highlight a lot of objects into one fram ...
- Unity游戏设计与实现 南梦宫一线程序员的开发实例
图灵程序设计丛书 Unity游戏设计与实现:南梦宫一线程序员的开发实例(修订版) 加藤政树 (作者) 罗水东 (译者) c# 游戏 unity <内容提要> 本书的作者是日本知名游戏公司 ...
最新文章
- python 发邮件-带附件-文本-html
- 【WP7】对象序列化
- 7.破解的最简单例子
- pytorch torch.from_numpy()(从numpy数组创建一个张量,数组和张量共享相同内存)
- 343. Integer Break
- Json string to object debug - json字符串转Java对象的处理调试
- 用Python增强Excel的3大集成方法及用途
- 一键搞定数码照片印前特效-【用可牛影像】
- PHP编写增功能思路,php ztree如何实现增 删 改
- git fetch实战以及与git pull 的区别
- 例4.5 最小公倍数 - 九度教程第48题(最小公倍数)
- css3 border渐变实现
- java实现中文转拼音包含声调
- oracle查询平均每月数据,oracle 按每天,每周,每月,每季度,每年查询统计数据
- 使用itextPdf合并PDF
- Linux container hand-crafted
- 营造平安 信息化使公交事业更加人性化
- java实现注销功能_8.6.2 登录注销功能的实现
- 北京联合大学计算机科学与技术分数线,北京联合大学录取分数线2021是多少分(附历年录取分数线)...
- 域名备案、服务器备案和网站备案有什么区别?