近期重构技能的一些心得

重构心得

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

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

战斗技能的脚本系统

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

第二次重构

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

第三次重构

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

总结

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

时间: 2024-08-04 08:26:19

近期重构技能的一些心得的相关文章

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

近期,本人加班加点地完成了多个软件版本的开发工作.总结起来,有以下心得体会: 第一,软件的第一个程序版本非常的重要,它直接决定了产品的好坏.就像大楼的地基一样,软件后续版本的需求都是在第一个版本的基础上完成的,如果"地基"没有打牢,后面对程序的增删改都会很困难,让人感到似乎掉进了一个"无底洞"里面. 第二,软件的详细设计文档非常重要,千万不要将之放在无足轻重的位置.要想对程序的基本功能有一个大致的.快速的了解,最普遍的做法就是查看它的详细设计文档.如果这个文档写好了

个人在重构代码中的心得体会

最近在维护客户的电子商务系统过程中对该系统的代码进行了一些简单的重构.我本来不是一个爱重构的人习惯于随意的书写代码心底里认为没有必要搞那么多花哨的东西毕竟现在的开发模式大多数是MVC已经提供了固定的代码分层和代码层级,但这次简直是忍不了了代码太庞大(1000行代码在一个方法体里面,还只是其中的一个方法),因此动手收拾一下代码.我具体做法如下: 1 对代码进行分组,分组原则是每一个小处理,每个分支代码块为单位,把相近的的代码移动到最近的位置.这样做的好处在于能够提供流畅的阅读,不用去满篇的去找某个

Linux从零到高手的进阶心得(转)

从2006年毕业至今,从事IT行业已经接近8个年头. 一路走来有很多心路历程和技术心得都写在了51CTO的博客中,不少文字现在看来已显稚嫩,但是这正是我真实的成长之路.这八年,从最基础的网络管理员开 始,从最下层的IT工作比如说做水晶头做起,慢慢的走过国企.干过外企,做过网络管理员.系统工程师.项目经理.Linux讲师,经历过众多重大的项目 (包括政府部门.国家重要民生相关项目),流过汗熬过夜,写过心得出过书,不谦虚的说,从很多方面来看,可以算得上是个IT老鸟.所以经常也有不少认识和 不认识的朋

2016的道路:一年之计在于春

今天第一天开工,leader开了个小会聊了下大家近期的技能提升计划,会议记录 要走coder这条路的话,一个是基础知识比如java基础.设计模式等.另一个是快速应用sdk的本领.将快速出现的比如支付sdk,地图sdk,融云的IM……导入自己设计的结构中. 很多市场是难以进入的,比如支付需要政策上的支付牌照,很多这些事情改变不了就不要瞎操心了. 很多新兴技术也不一定就是适合的,比如H5,没有一定的js基础学习曲线是很陡峭的.比如swift之与OC,很多新技术是和旧知识相通的,如果没有响应的语言基础

测试未来发展,测试人员的发展方向,测试趋势

最近在脉脉上看到某某公司斩掉测试团队啊,某某开发嘲讽测试人员啊╮(╯▽╰)╭,转个测试行业看法聊以自慰,至少现在还有碗饭吃. 测试行业的趋势有这么些: 功能测试依然存在,但是会变得越来越难找工作 功能测试不可能消失,即使Google这种高技术的公司,也依然存在功能测试,所以功能测试肯定不会消失,但是工作一定会越来越难找.国内的企业招聘都是从众心理,大家都觉得BAT的招聘是业界的方向,所以现在都开始要求测试人员必须会各种编程语言,实际上他们也不知道自己要什么,入职后也可能还是点点点,但是由于他们都

【转】你应该了解的基础和2017测试行业的趋势

背景 今天偶然在某个Q群看到大家在聊测试行业发展的趋势,作为一个有那么些经验的娱乐型测试选手,简单写写自己的想法. 方向 测试的发展基本上就两个方向:技术和管理.而我认为这两者是都要学的技能,也就是所谓的经济基础决定上层建筑.当然不是说没有技术就不能做管理,外行管内行自然也有方法,否则所有CEO都得懂各种技术了. 技术 技术方面我认为这么一些是必备的: 测试基本知识 Linux系统的简单操作 一门脚本语言 五花八门的开发知识 测试基本知识不用多说,整套研发流程下来的需求分析.用例设计.评审.缺陷

敏捷开发与XP实践

北京电子科技学院(BESTI) 实  验  报  告 课程: Java        班级:1352          姓名:黄伟业         学号:20135215 成绩:               指导教师:娄嘉鹏    实验日期:2015.6.2 实验密级:         预习程度:             实验时间:15:30~18:00 仪器组次:37         必修/选修:选修       实验序号:(三) 实验名称:敏捷开发与XP实践 实验目的: 1.XP基础 2.

第三次实验报告 敏捷开发与XP实践

一.  实验内容 (一)敏捷开发与XP 摘要:一项实践在XP环境中成功使用的依据通过XP的法则呈现,包括:快速反馈.假设简单性.递增更改.提倡更改.优质工作.XP软件开发的基石是XP的活动,包括:编码.测试.倾听.设计. 学习:XP是一种更加灵活的开发方式和理念,通过迅速的反应及时充分修改程序,保证所有团队成员对资源和责任的共享:适用于“小而精”的团队开发.同时,其所倡导的“倾听”也是实现了程序开发“需求至上”的终极目标. (二)编码标准 编码是一个即主观又客观的过程,每个程序员都有他自己的编程

第三次实验

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计   班级:1352       姓名:胡御风  学号:20135222 成绩:             指导教师:娄嘉鹏      实验日期: 实验密级:         预习程度:             实验时间: 仪器组次:          必修/选修:选修       实验序号:3 实验名称:                敏捷开发与XP实践 实验目的与要求: 完成实验.撰写实验报告,实验报告