我正在学习Javascript。这是我的代码。这是一个用户与龙战斗的简单程序,但是我添加了一个额外的位,如果龙将用户的健康状况降低到0,则代码结束。但是,每当我运行此代码时,一旦龙开始降低用户的健康状况,就会发生这种情况。用户无法与龙进行交易。我做错了什么?
q
答案 0 :(得分:0)
youHit
只计算一次。因此,一旦龙对你的玩家造成伤害,它就会继续造成伤害。
您可以将计算包装在一个函数中,然后激活它们:
function fightDragon() {
var userHealth = 5;
var youHit = function() {
return Math.floor(Math.random() * 2);
};
var damageThisRound = function() {
return Math.floor(Math.random() * 5 + 1);
}
var totalDamage = 0;
var dragonDamage = function() {
return Math.floor(Math.random() * 2);
}
while (userHealth > 0) {
var damage = youHit();
if (damage) {
console.log("You hit the dragon!");
totalDamage += damageThisRound();
console.log("Total damage dealt: " + totalDamage + "!");
if (totalDamage >= 4) {
console.log('You slew the dragon!');
break;
}
} else {
console.log('The dragon has dealt damage to you!');
userHealth -= dragonDamage();
console.log('Your health is now: ' + userHealth + '!')
}
}
}
答案 1 :(得分:0)
在您的龙码中添加一个数学回合:
var userHealth = 5;
var youHit = Math.floor(Math.random() * 2);
var damageThisRound = Math.floor(Math.random()*5 + 1);
var totalDamage = 0;
var dragonDamage = Math.floor(Math.random() * 2);
while (userHealth > 0) {
if (youHit) {
console.log("You hit the dragon!");
totalDamage += damageThisRound;
console.log("Total damage dealt: " + totalDamage + "!");
if (totalDamage >= 4) {
console.log("You slew the dragon!");
userHealth = 0;
}
else {
youHit = Math.floor(Math.random() * 2);
}
}
else {
console.log("The dragon has dealt damage to you!");
userHealth -= dragonDamage;
youHit = Math.floor(Math.random() * 2);
dragonDamage = Math.floor(Math.random() * 2);
console.log("Your health is now: " + userHealth + "!");
}
}
答案 2 :(得分:0)
在您的情况下,while循环外的所有变量只计算一次。
if (totalDamage >= 4) {
userHealth = 0;
} else {
youHit = Math.floor(Math.random() * 2);
}
上面的代码不会被执行,因为如果龙杀了你,游戏就结束了,循环结束了!
我还添加了这个:if(!! dragonDamage)条件来检查龙的生成伤害是否为零。另一种方法是将dragonDamage calculate =)
的结果加1var userHealth = 5,
totalDamage = 0;
while (userHealth > 0) {
var youHit = Math.floor(Math.random() * 2),
yourDamage = Math.floor(Math.random()*5 + 1),
dragonDamage = Math.floor(Math.random() * 2);
if (youHit) {
console.log("You hit the dragon for " + yourDamage);
totalDamage += yourDamage;
if (totalDamage >= 4) {
console.log("You slew the dragon!");
userHealth = 0;
}
} else {
if (!!dragonDamage) {
console.log("The dragon has dealt damage to you!");
userHealth -= dragonDamage;
console.log("Your health is now: " + userHealth + "!");
}
}
}
答案 3 :(得分:0)
夫妻俩:
1)你想要为你重新计算一个随机值你龙已经对你造成伤害"部分:
youHit = Math.floor(Math.random() * 2);
否则,如果玩家的第一次击中为0,它将始终保持为0并且龙将赢得每次交换。
2)在"你击中龙"你要将玩家的生命值设置为0以退出while循环,即使玩家的生命值实际上不应为0.如果你打算显示玩家,这是一个问题&# 39;整场比赛的健康状况。我建议在while循环中添加一个标志:
var dragonSlain = false;
while (userHealth > 0 && !dragonSlain)
{
...
if (totalDamage >= 4) {
console.log("You slew the dragon!");
//userHealth = 0;
dragonSlain = true;
}
...
}