重写一次挂机
来源:互联网 发布:mac怎么卸载adobe软件 编辑:程序博客网 时间:2024/04/30 23:24
挂机系统在4月完成了重写,一直没有把思路整理一下写出来。今天浮躁的心稍微有些平静,就写个急就章吧。
缘起
很久很久以前,有个mmoarpg项目。有了一个需求,要在游戏系统内部提供一个挂机功能。然后有程序员实现了功能,当然这个程序员不是我。再后来发现了挂机不少的bug,团队里其他的程序员很负责的打上各种各样的补丁,基本上if覆盖了常见的代码路径分支。没有人去考虑那些路径分支是常规的,还是违和的。因为看上去没有不对的地方,挂机系统就这样沉淀在系统里了,直到下一个项目。
拿来主义大行其道,启动新项目时,原来项目的代码成为指定基础代码。代码继承了下来了,策划的思路却不是一脉相承的。代码并没有起到基础的作用,大量的工作量花费在阅读,修改和调试上。挂机系统不可避免的增加了更多的if,用来满足一个又一个的“特殊情况”,最后全部都是特殊情况,没有正常情况了。
如果我有足够的时间和精力,挂机的代码早就应该重写了,真正促使我重写的原因是,现在很少有人愿意去老老实实阅读遗留系统的代码,完完整整掌握原作者的意图,这个系统的复杂程度直接减少了能维护代码的程序员数量。中间曾经有人重新实现了技能的使用,结果时间复杂度上升了一个量级,且画面表现力不甚理想。
如果再不重写,挂机终将变成一个无人敢涉的雷区。
思路
挂机功能开启,人物会看上去很智能寻路,打怪,拾取。相应的,整个系统的思路就是实现三个状态的切换:
站立到打怪,打怪到站立;站立到拾取,拾取到站立。
在某个时间点,是打怪还是拾取 策划总是会给出取舍标准的。
用有限状态机来实现,这个逻辑不算太难。
难点
难点在于,站立时找到了合适的怪物,因为距离无法攻击需要移动。移动前是站立状态,移动后攻击状态,这样的衔接是一个难点。因为在原来的系统中,挂机的状态切换和人物常规的站立移动状态切换一直绑定在一起,移动完成后常规状态切换到站立,必然造成挂机空间中又回到了站立状态机。
将常规空间和关机空间的状态切换分离,在移动完成的事件里,续上安排好的状态机,这里是挂机空间的攻击状态机,如果没有安排状态机,人物进入常规站立状态。
从站立转到拾取状态也是一样的道理。
另一种思路
是否可以将挂机的驱动放在客户端来做,解放服务器,这样能空出来的cpu能负载更多的玩家。可惜愿意做这个活的客户端我还没有见过。
- 重写一次挂机
- 记一次对在线挂机网站的渗透
- 一次对在线挂机网站的渗透的例子
- 再来一次URL重写
- 重写返回键,一次退出应用程序
- GridView重写、一次展示所有item
- 挂机系统
- 烈焰vip挂机地图挂机攻略
- 重写PreTranslateMessage(MSG* pMsg)遇到的问题--相应右键消息。隔一次响应一次,求解。
- 2008 挂机 赚钱
- asterisk App-Hangup 挂机
- 送SuperClick挂机软件!
- C# 挂机锁
- 挂机刷RP - -!
- vc编写挂机锁
- win32汇编----挂机锁
- 3G挂机QQ
- 专业挂机软件AlwaysUp
- nslookup手动模拟DNS递归查询
- BlueTooth: nRF51822蓝牙芯片
- DTD和Schema区别
- 变量后面加冒号
- 网络请求图片 SDWebImage
- 重写一次挂机
- 如何寻找靠谱的流量商家?
- 基于MMX指令集的程序设计简介
- STL常见用法整理_队列
- 已知一点经纬度和距离,求距离返回内点
- 文件删除了怎么恢复
- 【进程管理】系统调用execve()
- HIVE元数据表/数据字典
- 转:OSGI实战中的问题