前言

这个游戏中的仓库类设计开始于春节前,和大家一样,我也是期盼着放假而无心工作,所以在放假前一天虽然蹦出了思维的火花,我却没有使用文字记录下来,但是大致的思路我已经记录到脑子中了,这一次的突然感悟,与上次突然明白什么是选择排序,什么是冒泡排序很类似,都是一瞬间突然明白,是一个从量变到质变的过程,接下来简单记录下我关于仓库的理解。

初觉不妥

游戏中的仓库是用来存放道具的,这是我在接触这套游戏代码时形成的稳固的印象,结果就是代码中充斥着道具属性的判断,因为是很古老的代码,一开始我并没有产生疑问,同时也是修修补补的解决了许多BUG,可是渐渐的问题暴露了出来,设计上仓库里存储的是道具的索引,通过索引可以找到唯一的一个道具,这个思想根深蒂固,导致在写代码时自然而然的就在仓库的类里直接判断了道具属性,仔细想想这是不正确的。

起初感觉有问题时,大概是工作两年后,第一次重构道具系统的时候,当时在写放入道具和取出道具的时候总感觉怪怪的,但是又说不出问题出在哪里,其实就是在放入和取出的逻辑中,操作了道具的属性,修改了道具的坐标。也就是在仓库类的代码中设置了道具的属性,但是他们两个类不是依赖关系,硬生生的产生了依赖关系。

新的任务

道具系统的第一次重构,我并没有找到为什么代码怪怪的,也就没有修改,但是新的任务在工作4年之后给了我一个新的机会,再写一遍道具系统,这时候那段奇怪的代码给我的感觉更强烈了,绝对有问题,也就是那么一瞬,我似乎明白了,仓库这个类被我们强加了太多的东西,谁说仓库中就一定要放道具了,我们在游戏中也没有直接把道具的对象保存在仓库中,而是把道具的索引存在了仓库中,也就是仓库中存储了道具的身份证,同理如果我们把人的身份中存在仓库中,那么仓库就是管理人的,如果我们把车牌号存储在仓库中,那么仓库就是管理车辆的。

因为起初游戏中的仓库只保存了道具的索引,所以我们想当然的认为仓库中只能保存道具,所以把一大堆的道具操作代码写到了仓库类中,是时候把代码提出来了,仓库就是仓库,它只根据坐标存储对应数据的ID,而这个ID对应的数据,应该在仓库以外的类中操作,这个ID可能对应道具、可能对应人、也可能对应车辆,干干净净的仓库管理了一组数据的ID,至于对ID对应数据的操作,一概不应该放在仓库类中进行。

重构的结果

仓库类简简单单,保存着道具ID,只提供按位置放入ID,按位置取出ID,能够给出仓库的使用情况,能够初始化仓库的状态,仓库类有以上这些操作足以,仓库本身并不应该知道自己存的是道具还是车辆,真正要修改道具的属性,或者要查找指定属性的道具,放到道具管理类中来编写逻辑即可。

关于游戏中仓库类的设计相关推荐

  1. 游戏脚本在移动游戏设计中的作用_关卡设计师谈游戏中的敌对角色设计Monster Design...

    原作者:Emil Glans 关卡设计是一门非常广泛的学科,不仅涵盖了基础几何学.脚本中的事件&敌人设计,还涉及到不同部分的组合.紧张度调节和叙事.在本文中,我将重点讨论一些与核心游戏设计密切 ...

  2. 游戏设计之我见 —— 动作游戏中的敌人移动设计

    这篇博客结合了一些游戏案例,介绍了在3D动作游戏中常用的AI移动规律的设计. 移动方向 在3D游戏中,所有的物件都是以"横·纵·高"三个轴为基础进行移动. 但是对于动作游戏来讲,如 ...

  3. 游戏中用户升级的设计

    在游戏中,有多个模块都会涉及到升级的问题,例如,玩家升级,装备升级,英雄升级等升级问题. 用户升级 数据库设计 需要一个经验值静态表 id : 等级的idexp_line : 本级达标经验值exp_o ...

  4. 游戏中的人工智能AI设计

    因为在现在的项目中花了很大精力设计和制作怪物AI和技能,所以在这里也做个小总结. 什么叫做游戏中的AI        游戏中的AI可以简单的理解为计算机控制的智能角色,这些智能角色能够通过周遭环境或者 ...

  5. 游戏中掉落系统的设计

    我们在游戏中会采用不同的随机方式.而玩家感觉起来像随机的事件其实也不完全是按随机事件来设计的.下面我们来谈谈这些做法. 1.计数随机 在早期游戏中,有些道具的掉落是和怪物被击杀的次数相关的,通常在成千 ...

  6. ABAP 编程语言中 Class(类)的设计原理剖析

    在具体介绍 ABAP 这门编程语言的 Class(类) 的设计原理之前,先简单介绍一下 ABAP 编程语言本身. ABAP 是 SAP 公司推出的一门高级编程语言,全称是 Advanced Busin ...

  7. 第五周项目二-游戏中的角色类(1)

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年3月29日 *版 本 ...

  8. 从游戏中学习产品设计2:消费篇

    上一期,我们介绍了游戏中的诱导充值套路,没有看的朋友可点击 从游戏中学习产品设计1:充值篇!了解游戏中是如何引诱玩家充值的,今天我们来聊一聊游戏中的消费套路,上文介绍了游戏中的三类货币:金币,钱币和时 ...

  9. 游戏中要遵守道德规范吗?谈《荒野大镖客2》道德体验设计的意义

    <荒野大镖客2>是Rocksta公司制作发行的一款游戏,在游戏中玩家将会回到1880年代的美国西部,一方面需要不断的和敌方帮派火拼,另一方面还要躲避私家侦探的追击,可以说是体验一把艰难的逃 ...

最新文章

  1. Oracle笔记 六、PL/SQL简单语句块、变量定义
  2. HTML5 实现手机拍照上传
  3. 【Java框架】 Hibernate与Mybatis对比
  4. SaaS颠覆传统软件到底是不是个伪命题?
  5. Algorithm:C++语言实现之内排序、外排序相关算法(插入排序 、锦标赛排序、归并排序)
  6. 喜马拉雅xm格式转化mp3_怎样让mp3录音转文字?
  7. Nacos配置管理-微服务配置拉取
  8. C#基于Socket的简单聊天室实践
  9. centos7安装samba服务器
  10. 列车运行图的编制原则是什么_我国农村将有序推进村庄规划编制
  11. 常用数据库高可用和分区解决方案(2) — MongoDB篇
  12. 第十届蓝桥杯B组C/C++省赛编程题题目及答案解析
  13. 献给即将来临的母亲节父亲节!!
  14. python中科院_中科院闹乌龙,Python“换皮”成木兰
  15. Direct Rendering Manager (DRM)
  16. tp框架该网页无法正常运作的一个坑
  17. 使用Python遍历文件夹下文件寻找关键词
  18. 站在招聘者角度看面试 | 掘金技术征文
  19. (Python)异常处理try...except、raise
  20. 【转】课堂教学中如何实现有效师生互动

热门文章

  1. 关键词(快排)刷词原理和方法
  2. Excel·VBA选中列一键计算小计总计
  3. 非乘a非b_给你28万 ,你买B+级车还是豪华入门车?
  4. win10切换输入法快捷键_电脑小白必学的5个Win10技巧
  5. 2021年危险化学品生产单位安全生产管理人员考试内容及危险化学品生产单位安全生产管理人员试题及解析
  6. 【AI】图灵奖得主 Yann LeCun 最新文章 :自监督学习,人工智能世界的“暗物质”...
  7. 单身程序狗解决了一个技术难题后,没有妹子可以炫耀,怎么办?
  8. (五)DDR协议命令波形时序二——(Precharge、Refresh、Self Refresh、Power Down)
  9. 多场景业务实战-AB测试实战(数据分析干货!!!!!)
  10. Linux下的磁盘分区和逻辑卷