highestStat = nil
highestStatVal = 0
stageMul = [2, 2, 2, 2, 2, 2, 2, 3, 4, 5, 6, 7, 8]
stageDiv = [8, 7, 6, 5, 4, 3, 2, 2, 2, 2, 2, 2, 2]
battler.plainStats.each do |stat, val| #plainStats就是指攻击、防御、特攻、特防、速度这几项。
stage = battler.stages[stat] + 6
realStat = (val.to_f * stageMul[stage] / stageDiv[stage]).floor #计算宝可梦能力的实际值。
if realStat > highestStatVal #选出最大值。
highestStatVal = realStat
highestStat = stat
end
end
碎碎念:感谢补充说明&拓展练习。这些练习题个人的预估难度是2.5~3星。解析:此题的关键一是“出场时”,二是“数值最高的能力”。
前者告诉我们,要使用OnSwitchIn这个Handler,后者则需要我们计算宝可梦的各项能力,这正是本题的难点所在。
TA改:请制作不考虑能力等级和考虑能力等级的两个版本。
1.不考虑能力等级。
请参考异兽提升。
2.考虑能力等级。# komeiji514
请参考古代活性/夸克充能。
Gen 9 pack中古代活性/夸克充能计算能力并比较的代码如下:
下面一步就是提高这项能力,相信这一步对读者来说无需赘述了。Ruby:highestStat = nil highestStatVal = 0 stageMul = [2, 2, 2, 2, 2, 2, 2, 3, 4, 5, 6, 7, 8] stageDiv = [8, 7, 6, 5, 4, 3, 2, 2, 2, 2, 2, 2, 2] battler.plainStats.each do |stat, val| #plainStats就是指攻击、防御、特攻、特防、速度这几项。 stage = battler.stages[stat] + 6 realStat = (val.to_f * stageMul[stage] / stageDiv[stage]).floor #计算宝可梦能力的实际值。 if realStat > highestStatVal #选出最大值。 highestStatVal = realStat highestStat = stat end end
额外作业:
如果你能独立完成以上两个版本的话,可以尝试做以下的额外作业。
①.当最高的能力有多项时,随机提高一项能力。(1和2两个版本请都完成)
②.当最高的能力有多项时,让玩家手动选择想要提高的那项能力。(1和2两个版本请都完成)
③.写一个用来获取最高的能力的方法,该方法必须兼容以上的所有版本,并用该方法重写/优化以上的各个版本。
④.任选一个版本,在③的基础上,添加上“一场战斗只能发动一次”的前置条件。
也就是说,最后应该有这么些版本——
1.不考虑能力等级;
2.考虑能力等级;
3.不考虑能力等级,随机最高项;
4.考虑能力等级,随机最高项;
5.不考虑能力等级,手选最高项;
6.考虑能力等级,手选最高项;
7-12,以上版本对应的方法重写优化版。
13.7-12的任一版本,一次性版。
玩得开心。
说实话此题并不值2星,因为只是两个简单效果的复合。では、次の問題を見ていきましょう。
2.Champion Belt(冠军黑带)预估难度:2~3星。
受到格斗属性宝可梦的伤害会减少33%。击倒格斗属性的宝可梦后,会恢复50%的HP。
感谢供题!姑且写个解析:3.Omnigrowth(无限潜能)预估难度:2.5-3星。 # TA留
此特性的精灵会无限成长,且渴望和强者战斗,随着打倒的对手变多,自身也变得更强。
和训练家对战时,每击败一只精灵,自身的双攻和速度增加0.5%,但是双防减少0.1%;同时,击倒对手的那个技能的威力增加0.5%。
个人解析:1.在Battle::Battler添加记录重生次数的attr_accessor;5.Second Chance(倒计时)预估难度:4星。 # TA留
此特性的精灵在濒死后经过4个回合就会复活,复活时回复50%的HP;这个特性一场战斗最多发动3次。
1.基于battler的变量在精灵换下场的时候就会被清除;个人解析:1.在Battle::Battler添加记录重生次数的attr_accessor;
2.添加针对于战斗中某位置的PBEffects;3.添加一个EOREffect计时器用于回复相应的宝可梦;4.利用OnSelfFainting的Handler为PBEffects赋值。
如有错漏欢迎指出。
应当是Battle变量;此处是指预知未来、祈愿等作用于站在某个位置上的宝可梦。1.基于battler的变量在精灵换下场的时候就会被清除;
2.不是很理解什么叫“战斗中某位置”;
3.这里的难点在于如何找到“相应的宝可梦”。
1.濒死
2.回合计数
3.复活“那只”精灵
4.特性发动计数
1.难点:基于Battle的变量具体如何实现;应当是Battle变量;此处是指预知未来、祈愿等作用于站在某个位置上的宝可梦。
非常好问题,使我大脑迅速发育。有一种用竞赛题锻炼解高考题的能力的美。(笑)1.难点:基于Battle的变量具体如何实现;
2.恐怕不行,因为位置指的是场上的位置,即精灵所站的地方,精灵濒死下场后,它已经不站在那个位置了。