(1)
关于人物继承:
class attribute;
class fight:attribute;
class mrole:fight
class 怪物:fight
其中人物和怪物继承的属性一样。在一次扩充中,需要加入根据属性点来提升攻击效果比例的各种药剂。而一些攻击函数的触发都放在fight类里。这也是无可非议的。 但是怎样才能让这些函数知道人物的药剂状态呢?我给fight类里加了个药剂状态的指示,先在mrole里根据效果指定好fight类里的指示,然后这些攻击函数再根据这些药剂状态进行做相应的不同动作。我起码做了以下这些复杂的动作(一切都是为了另一个怪物类的兼容)
1.给fight类加了映射mrole的药剂状态,并且赋予初始值。在一些公式里加了许多默认值。比如一些提升1.3倍效果的,默认为1.0倍
2.在一些旧代码奇怪的地方加了默认的参数.这个是旧代码的遗祸
3.在fight类里还要判断是否是哪个对象(其实这步完全不必要,因为有默认值了。)
除了一些代码兼容的繁杂调试,一切还算顺利。但是问题出来了。一些怪物类明显增加了许多浮点的计算,先不去计较这些性能的损失,这两个明显是不相关的东西。不应该放在一起继承。而我更认为,继承更适合用在一些最原始的功能组合上,而且该功能不能太随意的扩充,尤其是你认为一些共有的抽象上。 比如这些怪物和人的继承,其实很多人想当然的认为怪物的存在形式都是根据人的存在形式脱变的,比如行走吃饭交谈。这在满足这些人的YY同时,这种奇怪的怪物也确实被制造出来了,然后安静的呆在一旁。因为计算机操纵的怪物永远不会向你提出"哦,我需要这些额外的东西"。而玩家们总是唧唧喳喳的需要各种请求。所以,在为地球上的生物进行划分关系时,先从科学家弄清楚他们是哺乳动物?猫科动物?。。。从来没资料说过怪物和人物是一个系列的,这简直是妖人
因此在下个版本计划中,我可以先划分好怪物的科系属性,比如猫科,飞行科等等。。。如果有玩家愿意的话,再加个人妖系属性
(2)
class attribute; GetMaxLife()
class fight:attribute;
class mrole:fight
class 怪物:fight
因为要有一个药剂涉及对生命的修改。要对GetMaxLife()中的内容代入一个权值。跟前几个不同,前几个是GetMaxLife()*权值。考虑到该函数出现了几十次,代入一个权值明显不合适。而且在Get的函数中,最终都是一个代入索引的循环取值。持续代入2个以上就开始影响到其他权值的修改。再给attribute设置一个映射fight中的药剂权值表吗?观察后发现初始化非常复杂。主程给了个方案:把GetMaxLife改成虚函数。然后修改原来调用该函数的名字(原来是inline,保持不变)。在fight中重写该函数,原来的接口全部改为调用新的重新函数。
今日打算按虚函数的方式改写,结果发现调用GetMaxLife有的是GetA()->GetMaxLife,有的是 var a = GetA(), a->GetMaxLife().痛苦不已,下午又临时进行公式的校验。痛啊,要是把这些计算东西都放在一个层面多好。
(3)
另补充
对于这种继承上的设计,如果是属性和方法的关系比较紧密,变化也比较大,强烈建议分开。比如一个攻击函数,怪可能算完就完了,人还要考虑各种情况。当然这可以设计成虚拟函数,但随着这种变化的多元,不可能把每个函数都设计成虚拟的,那样除了给自己看没什么意义。而且这种继承的设计经常带给人以懒惰感。比如同个函数,可能两个不同继承体之间只有一个地方不一样,懒惰的做法就是,直接加个类型判断完事了。 随着这种曲线的增加,你的代码必定有一天破灭。而且维护的时候也是相当的噩梦
分享到:
相关推荐
这是万恶之源网安基地站长开发的万恶之源135抓鸡工具极速版的升级版
万恶的Blogbus教程免费版
斯蒂芬告诉对方告诉对方告诉对方告诉对方的方式告诉对方公司法
万恶的前端内存泄漏及万善的解决方案详解.docx
万恶的斐波那契.exe
万恶的凯撒加密古罗马的凯撒大帝发明了世界上最早的数学加密方法,“恺撒密码”据传是古罗马恺撒大帝用来保护重要军情的加密系统。凯撒加密是最简单的加密方式,加密的双方
万恶的音乐符号超帆为了帮森森获得森森喜欢女孩子的星座,已经三星期没吃饭了,森森哼了一段曲子,并说如果你猜的出来这曲子是什么意思,我就请你吃饭!音符如下:§‖§‖
DonaldKnuth说“过早优化是万恶之源”(prematureoptimizationistherootofallevil)。这话也许有些夸张,但“过早优化”的危害我觉得不能忽视。 让正确的程序更快比让快速的程序正确要容易太多,太多。所以,缺省...
全国大学生电子设计竞赛(National Undergraduate Electronics Design Contest),试题,解决方案及源码。计划或参加电赛的同学可以用来学习提升和参考。程序均是实战案例,经过测试可直接运行。...
《万恶迷糊尤物》第三技:笑看混战人1000字.docx
发生地方随碟附送地方
玩儿玩儿万恶人恶趣味而且维尔萨芬撒大幅撒大幅
SSM框架配置 底层配置万用模板(x)万恶之源(√) 自己手撸的SSM配置pwp方便自己也方便大家 如果有什么错误请联系我BedivereAlter@gmail.com
一款去点软件广告的补丁,希望对大家有用! 也希望大家支持我一下,首次发帖子!后面会有更好的!
一些不经常用的功能,希望有能帮助大家的地方
因为工作中有人喜欢在,前面加空格,还有人喜欢吧tab搞得到处都是,所以写了一个这个文件,用来删除行尾的tab与奇怪的空格
文件中是远程调试用到的文件,调试方法如下: 1. 拷贝《vs2003远程调试文件》文件夹到目标机器任意位置 2. 运行StartMsvcmon.bat批处理 3. 保证需要调试的进程已经启动,同时在执行文件下有相应的pdb文件 ...
代码已经封装为C++类的方式。内存共享分为服务端和客户端,服务端写入数据,客户端读取数据,服务端和客户端通过使用相同的名字,来确认配对。 下载只需要1积分,如果发现多于1积分,请留言我重新上传资源。
linux dns slave服务器无法正常获取master上的信息
javascript中万恶的function实例分析,学习js的朋友可以参考下。