关于游戏中仓库类的设计
前言
这个游戏中的仓库类设计开始于春节前,和大家一样,我也是期盼着放假而无心工作,所以在放假前一天虽然蹦出了思维的火花,我却没有使用文字记录下来,但是大致的思路我已经记录到脑子中了,这一次的突然感悟,与上次突然明白什么是选择排序,什么是冒泡排序很类似,都是一瞬间突然明白,是一个从量变到质变的过程,接下来简单记录下我关于仓库的理解。
初觉不妥
游戏中的仓库是用来存放道具的,这是我在接触这套游戏代码时形成的稳固的印象,结果就是代码中充斥着道具属性的判断,因为是很古老的代码,一开始我并没有产生疑问,同时也是修修补补的解决了许多BUG,可是渐渐的问题暴露了出来,设计上仓库里存储的是道具的索引,通过索引可以找到唯一的一个道具,这个思想根深蒂固,导致在写代码时自然而然的就在仓库的类里直接判断了道具属性,仔细想想这是不正确的。
起初感觉有问题时,大概是工作两年后,第一次重构道具系统的时候,当时在写放入道具和取出道具的时候总感觉怪怪的,但是又说不出问题出在哪里,其实就是在放入和取出的逻辑中,操作了道具的属性,修改了道具的坐标。也就是在仓库类的代码中设置了道具的属性,但是他们两个类不是依赖关系,硬生生的产生了依赖关系。
新的任务
道具系统的第一次重构,我并没有找到为什么代码怪怪的,也就没有修改,但是新的任务在工作4年之后给了我一个新的机会,再写一遍道具系统,这时候那段奇怪的代码给我的感觉更强烈了,绝对有问题,也就是那么一瞬,我似乎明白了,仓库这个类被我们强加了太多的东西,谁说仓库中就一定要放道具了,我们在游戏中也没有直接把道具的对象保存在仓库中,而是把道具的索引存在了仓库中,也就是仓库中存储了道具的身份证,同理如果我们把人的身份中存在仓库中,那么仓库就是管理人的,如果我们把车牌号存储在仓库中,那么仓库就是管理车辆的。
因为起初游戏中的仓库只保存了道具的索引,所以我们想当然的认为仓库中只能保存道具,所以把一大堆的道具操作代码写到了仓库类中,是时候把代码提出来了,仓库就是仓库,它只根据坐标存储对应数据的ID,而这个ID对应的数据,应该在仓库以外的类中操作,这个ID可能对应道具、可能对应人、也可能对应车辆,干干净净的仓库管理了一组数据的ID,至于对ID对应数据的操作,一概不应该放在仓库类中进行。
重构的结果
仓库类简简单单,保存着道具ID,只提供按位置放入ID,按位置取出ID,能够给出仓库的使用情况,能够初始化仓库的状态,仓库类有以上这些操作足以,仓库本身并不应该知道自己存的是道具还是车辆,真正要修改道具的属性,或者要查找指定属性的道具,放到道具管理类中来编写逻辑即可。
相关文章
- CodeCombat多人游戏Greed
- 游戏设计的三大原则
- 【UOJ#51】【UR #4】元旦三侠的游戏(博弈论)
- 【LOJ6436】【PKUSC2018】神仙的游戏(NTT)
- BZOJ 1444 [Jsoi2009]有趣的游戏 (AC自动机 + 概率DP + Gauss)
- 《Android 游戏开发大全(第二版)》——6.11节小结
- 《OpenCL实战》一1.3 类比:OpenCL处理和纸牌游戏
- 《游戏大师Chris Crawford谈互动叙事》一9.6 互动小说机理剖析
- 《游戏机制——高级游戏设计技术》一2.2 将突现和渐进进行对比
- 《游戏机制——高级游戏设计技术》一2.5 结构差异
- 《游戏机制——高级游戏设计技术》一导读
- 《Android游戏开发详解》——第2章,第2.7节构建一个简单的计数程序
- 《触摸屏游戏设计》——导读
- 力扣解法汇总794-有效的井字游戏
- 再探 游戏 《 2048 》 —— AI方法—— 缘起、缘灭(2) —— 游戏环境设计篇
- 【2023unity游戏制作-mango的冒险】-6.关卡设计
- Python版飞机大战游戏的设计(二)-----游戏框架搭建
- Python版飞机大战游戏的设计(一)-----敌机出场
- 透过游戏研发项目特点看项目需求管理
- C++井字棋游戏,DOS界面版
- Runaway Robot游戏过关通用算法设计并java语言实现
- 游戏设计的100个原理(11-15)