重构心得

最近一直在做有关技能和战斗相关的代码整理,也史无前例血泪交加的进行了3次重构,程序员果然是一群与众不同的群体,如此的乐于推翻自己过往的工作,却又乐此不疲。

但是话说回来,每一次的重构都带来的意想不到的效果,虽然说中途会遇到一些小问题,但是大体上来说,重构带来的好处是非常多的,特别适合项目前期探索阶段。

战斗技能的脚本系统

一般游戏都免不了需要接触战斗系统,战斗无非就是单位/技能/Buff/飞行物/事件这些模块而已。而这其中的核心就是技能。 最开始做的一版架构下,每一个技能都由脚本进行处理,通过技能表直接映射到技能文件,新加一个技能新写一个脚本文件,这样的好处是,技能逻辑可以做的非常灵活,而且调试也比较方便,直接在相应的技能中output或者断点就好了。

第二次重构

不过上述做法缺点也是很明显的,新加一个技能必须重新新一些一个脚本。虽然可以通过模版的方式减少后续的操作,但是追求完美的程序是不会止步于此(闲的蛋疼)的,考虑到多数技能可能只是中途的某些元素不一样,其实多数流程大体上都差不多(造成伤害,搜索单位,移动目标,显示特效,播放动作,等等),那么我们是不是可以将这些元素独立出来,并提供一个可以配置的机制,这样任何一个技能只是基础元素的组合,程序只需要维护一个个的基础元素就好。这样就形成了第二次重构的思路基础。具体设计上,我们独立出来了一个效果的概念,技能可以拥有多个效果,效果可以主动施放的时候触发,也可以被动监听事件的时候触发,效果内部是一个个的基础元素,我们称之为操作,操作附带条件,这样一个效果内就形成了一个简单的逻辑,技能施放本质上就是走效果内部的逻辑流程。工作中实际情况是,重构结束后技能应用配置上也确实达到了预期的效果,程序员不用再维护一个个的技能了,确实蛮爽的,但是需要着重注意的一点是,对基础元素的设计一定要慎重,我们现在光是伤害就有5种基础的操作,没办法,需求就是要支持不同类型。所以基础元素的设计一定要根据具体的游戏需求来。

第三次重构

最开始的设计上,逻辑和显示是一一对应的,完全的所见即所得,游戏中进行到了什么步骤,比如回合制中等待玩家操作,单位A移动中这些情况下,逻辑也是完全处于这个状态的,这种设计的好处是在于,所见即所得,调试清晰,缺点也非常的明显,就是逻辑和显示存在耦合。举个例子就是施放技能,当显示复杂一些的时候,逻辑甚至需要去读取某一个模型的执行时间来决定逻辑自身需要协程式的卡住多久,这种设计下实现逻辑会非常复杂,特别是逻辑存在各种各样事件的时候。这个需求促使了我们进行了第三次重构。首先我们分析,由于我们自己是一个回合制游戏,游戏中并不存在过多的玩家操作,甚至可以非常简化,即轮到玩家的操作,施放一下技能,后续的逻辑(直到下一轮之前)都是确定的。那么我们可以这样设计:玩家操作后(主要是技能施放),逻辑就开始进行运算,在一帧之内将所有的结果都计算完毕,亦即逻辑已经停留在了下一回合阶段,在这个过程中逻辑会输出一系列的显示流,通知显示进行处理。显示层根据显示流来进行一个个具体表现的处理,诸如显示单位,播放动作,播放特效等等。这样的好处是,将复杂的表现和清晰的逻辑分开,表现层只关心自己的表现,而逻辑可以更清晰的处理自己最终输出数据的结果,分离的算是比较完美。这种设计的复杂度会更多的交给表现,甚至是表现需要负责进行表现的排序处理等等。不过这种设计带来的好处实在是太多了,过往我们需要做诸如游戏开始后整个逻辑屏幕抖动一下/播放各种特效后游戏才真正开始这样的效果,是需要修改逻辑的,现在逻辑已经完全不关心这个了,全部交给表现来处理,可以做很多丰富的效果。

总结

总而言之,对于产品来说,好的游戏都是磨出来的,而对于程序来说,好的设计也都是重构出来的。 与君共勉!!!

转载于:https://www.cnblogs.com/colourstar/p/7872286.html

近期重构技能的一些心得相关推荐

  1. 计算机操作技能训练心得,计算机基础技能训练报告心得3篇

    计算机,即电脑,随着科学技术的发展,不断进行着更新发展.伴随着计算机走入人类生活,它已成为人们日常生活必不可少的一部分,甚至成为当下许多人工作生活依赖的工具,下面是学习啦为大家准备的计算机基础技能训练 ...

  2. 幼儿园计算机技能大赛,幼儿园教师技能大赛的心得体会.docx

    幼儿园教师技能大赛心得体会 比赛心得体会 王十二集中心小学杜成林 自从我从事幼教几个月来,一直认为幼儿教育是一项繁琐的工作,并没有真正体会到幼教的重要性,直到参加了技能大赛,让我对幼儿教师这份职业有了 ...

  3. 近期开发工作的一点心得体会

    近期,本人加班加点地完成了多个软件版本的开发工作.总结起来,有以下心得体会: 第一,软件的第一个程序版本非常的重要,它直接决定了产品的好坏.就像大楼的地基一样,软件后续版本的需求都是在第一个版本的基础 ...

  4. 阿里巴巴编码规范技能认证考试心得与试题

    前言 现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量. 无规矩不成方圆,无规范难以协同,站在巨人的肩膀上,借鉴行业优秀经验总结 ...

  5. 【前端重构技能天赋】(一)——内容篇

    少叙闲言 专业的页面重构师手下出产的页面应该是标准.合理.高效,易扩展,易维护的.为尽早奔向这一NB的方向,吾等前赴后继的前端码农们,升级所需的必要天赋之一:载入更快,更省带宽! 结合网上大量关于Ya ...

  6. 【前端重构技能天赋】(二)——Javascript、CSS篇

    少叙闲言 承接上一篇,这篇是关于JS.CSS的一些优化,相信很多大家都非常了解了,并且实际上也都在这么做,但我想,很多人和我一样,只知道规范这么做,并不太了解到底为啥这么做,到底好处在哪了? Abou ...

  7. 小学教师计算机培训课程感言,小学教师教学技能培训心得体会

    第1篇:小学教师教学技能培训心得体会 众所周知,作为一名合格的*教师,必须有过硬的教学基本功,丰富的科学文化知识,另外还应具备优良的师德师风,作为一名合格的*教师,还应坚持党的教育政策合方针,坚持四项 ...

  8. 重构:改善既有代码的设计(评注版) 评注者序

    重构:改善既有代码的设计(评注版) 评注者序   评注者序 近十年来,若要讨论如何改进代码的质量,很难绕过Martin Fowler的这本经典著作.这本书已经影响了几代程序员,或许会持续不断地影响未来 ...

  9. 重构:改善既有代码的设计(评注版)

    传世经典书丛  重构:改善既有代码的设计(评注版)  MartinFowler,Kent Beck,John Brant,William Opdyke,Don Roberts(马丁.福勒,肯特.贝克, ...

最新文章

  1. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
  2. 打造司机在线培训,网易云信助力曹操专车“一路畅行”
  3. Hibernate查询缓存
  4. python 中的yum pip
  5. 写一个函数取出php,写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名...
  6. Iterator(迭代器)遍历Collection集合元素
  7. leetcode 175. Combine Two Tables
  8. Gartner预测:2010年个人电脑销售增长两成
  9. Java中this和super关键字分别是什么意思
  10. java获取.py文件值_Java File文件处理 读文件
  11. 不加群就可以提取QQ群成员
  12. 获取文件夹下所有tif图片,并将16位图转为8位图
  13. oppo手机android文件夹,使用OPPO手机,这3个功能一定要关闭,不然你的手机会越来越卡...
  14. 帝国php本地安装教程,帝国CMS整站源码通用安装教程
  15. Golang 函数耗时统计
  16. Flask框架四:模板继承以及豆瓣案例
  17. HTTP 长连接短连接使用场景是什么
  18. [Git] Git整理(四) git rebase 的使用
  19. 在大公司做凤尾,还是在小公司做鸡头?如何选择
  20. 七八年级计算机教案,中学七八年级信息技术教案全集.doc

热门文章

  1. 量子力学 一 基础2 作用量、普朗克常量与物质波
  2. Paper Review: Bayesian Shrinkage towards Sharp Minimaxity
  3. C# winform自己实现Windows消息处理
  4. VC#版DirectX开发入门详解
  5. ns2的第一个tcl脚本
  6. oracle SELECT子句中避免使用 ‘ * ‘
  7. 微信客服系统开发SDK使用教程- 拉取当前微信个人号列表请求(立即)
  8. C#6.0语言规范(一) 介绍
  9. PriorityBlockingQueue用法
  10. 使用Windows的分析等待链(analyze wait chain)来诊断没用响应的应用