我正在尝试使用Javascript解决this kata on Codewars。
此数据包要求您将“威武英雄”和“魔法2”游戏中的2种怪物相互对峙,彼此轮流互相攻击,直到获得胜利为止。
大多数测试现在都成功了,但是我仍然收到一些错误,这些错误与预期结果不符。例如:
“预计:'5头野猪获胜',而不是:'4头野猪获胜'
“预计:'赢得了1个骷髅”,而获得了:'赢得了2个骷髅'
错误通常仅出现1或2,并且似乎是双向的(我的结果太高或太低)。
我一直在摆弄我的代码,似乎找不到解决方法。
示例怪物包括:
{ "type": "Roc", "hitpoints": 40, "number": 6, "damage":8 }
{ "type": "Unicorn", "hitpoints": 40, "number": 4, "damage":13}
{ "type": "Titan", "hitpoints": 300,"number": 1, "damage":50}
{ "type": "Battle Dwarf","hitpoints": 20, "number": 25, "damage":4 }
{ "type": "Paladin", "hitpoints": 50, "number": 8 , "damage":20}
{ "type": "Skeleton", "hitpoints": 4 , "number": 100,"damage":3 }
不幸的是,我看不到测试失败的怪物的统计信息,因此要弄清楚我哪里可能出了错是很棘手的。有人能帮忙吗? (P.S.我知道代码可能比较整洁,对不起)
function whoWouldWin(mon1, mon2) {
var hitpoints1 = mon1.hitpoints * mon1.number;
var hitpoints2 = mon2.hitpoints * mon2.number;
function attack() {
damage1 = (mon1.number * mon1.damage);
hitpoints2 -= damage1;
if (hitpoints2 < ((mon2.number - 1) * mon2.hitpoints)) {
mon2.number = Math.ceil(hitpoints2 / mon2.hitpoints);
}
if (mon2.number <= 0) {
return (mon1.number + " " + mon1.type + "(s) won");
} else {
damage2 = (mon2.number * mon2.damage);
hitpoints1 -= damage2;
if (hitpoints1 < ((mon1.number - 1) * mon1.hitpoints)) {
mon1.number = Math.ceil(hitpoints1 / mon1.hitpoints);
}
}
if (mon1.number <= 0) {
return (mon2.number + " " + mon2.type + "(s) won");
} else {
return (attack());
}
}
return (attack());
}
答案 0 :(得分:0)
hitpoints2 < ((mon2.number - 1) * mon2.hitpoints)) {
这是说:如果hitpoints2小于(每个怪物剩下的-1个怪物的数量)乘以每个怪物的全部命中点,则计算剩余的怪物数量。
但是最后一个怪物在战斗后没有完整的生命值。