我非常喜欢Dota这款游戏,趁着学习Java就用代码做了一个英雄PK计算器的工具,其实就是两个英雄在无装备也无技能的时候对着a,看谁先被打死。
其实难点并不在于实现过程,而在于如何把代码写的漂亮且具有扩展性。
先说数据的录入工作,Dota英雄的数据有一部分叫基础数据,就是你必须录入而不能通过其它数据计算的,比如基础力量、基础攻击间隔等等。而有些数据则是通过这些基础数据算出来的,比如生命值=150+力量值*19。所以其实网上所查的英雄数据库从程序的角度来讲并不专业,
因为它常常包含"重复"的数据如生命值,又少了必要的基础数据如基础攻击间隔。
我用这些基础的属性数据构造一个英雄类,new出所有Dota的英雄对象(当然这一步数据录入可以用scanner直接从文件中读取),这些基本的准备工作就做好了。
接下来就要考虑英雄对a需要哪些数据来判断输赢,我用五个数据来作为参考,分别是生命值、生命回复速度、攻击力、伤害减免(根据护甲值)、攻击间隔。这五个数据都是那些基础数据的函数,如何计算就不在赘述。
在接下来就是用这些数据判断输赢,比如A英雄打B英雄,那么我们可以计算A打出的一下普攻让B实际掉了多少血,B又在这下普攻的间隔中回复了多少血,这可以计算出A的一下普攻对B血量少的最终效果。不难计算出A多少下普攻让B死亡(life<0),最后根据攻击间隔计算出死亡时间(time)对比一下即可。
写完这个程序我做了个遍历,结果白牛为1级时最强的单挑英雄,我想是因为它力量攻击力护甲都处于高水平。而25级裸装备无技能时人马为最强英雄,因为力量成长太高了。
暂时还没有想到如果加入技能和装备等因素应该如何完成,是把他们另设置成接口么,光环接口?buff接口?希望同样喜欢dota和编程的人一起探讨。
想要我的源码的可以私聊我,想要一起打do开黑的也可以私聊哈哈哈哈,共勉!
|