javascript - 尝试退出循环,但目前仅继续循环 100 次

标签 javascript loops

我试图做到这一点,当生命骰子滚到 0 时, Angular 色上的 100 次命中循环退出循环。目前的情况是全部循环 100 次。我不太确定我需要如何解决这个问题,任何提示都会有帮助。我的代码如下。

function addChar(fname, lname, speed, agility, wep, outfit, mood) {
    this.fname = fname;
    this.lname = lname;
    this.speed = speed;
    this.agility = agility;
    this.wep = wep;
    this.outfit = outfit;
    this.mood = mood;

    this.special = function(specialMove) {
        specialMove();

    }

    this.jumpKick = function() {
        var jmpkckTimes = Math.floor(Math.random() * (100 - 33 + 1)) + 33;

        document.write("He jumpkicks " + jmpkckTimes + " times. ");
        if (jmpkckTimes > 70) {
            document.write("He enters rage mode! ");
        } else {
            document.write("He does not have enough kicks for rage mode. ");
        }
    }

    this.hits = function() {
        var allHits = Math.floor(Math.random() * (100 - 33 + 1)) + 33;
        document.write(" He gets attacked for " + allHits + " HP.");
    }
    this.lifes = function() {
        var life = Math.floor(Math.random() * (3 - 0 + 1)) + 0;
        if (life > 0) {
            document.write(" The life dice rolls a " + life + ". You have survived! For now...");


        } else {
            document.write(" The life dice rolls a " + life + ". You have died!");

        }
    }
}
var myChar = new addChar('Johhny', 'Kicker', 10, 7, 'Ancient Greataxe', 'Barrows', 'angry');

document.write(myChar.fname + " " + myChar.lname + "'s speed is " + myChar.speed + "<br>");
document.write(myChar.fname + " " + myChar.lname + "'s agility is " + myChar.agility + "<br>");
document.write(myChar.fname + " " + myChar.lname + "'s weapon of choice is: " + myChar.wep + "<br>");
document.write(myChar.fname + " " + myChar.lname + " feels " + myChar.mood + "<br>");
document.write(myChar.fname + " " + myChar.lname + " attempts his special: ");
myChar.special(myChar.jumpKick)

for (i = 1; i < 101; i++) {
    myChar.hits(myChar.allHits)
    myChar.lifes(myChar.lifes)
}

function myOutfit() {
    document.getElementById("demo").innerHTML = ("He is wearing " + myChar.outfit)

}
var start = Date.now();
var response = prompt("Do you think my character has what it takes?", "");
var end = Date.now();
var elapsed = (end - start) / 1000;
console.log("You took " + elapsed + " seconds" + " to type: " + response);

最佳答案

您需要有一种方法可以在对象外部以及对象内部发生的情况进行通信。

例如,当函数中发生某些事情时,例如 lifes() 或 hit(),您应该为对象上的变量分配一个值以保留状态。这样您就可以从 for 循环访问状态。

示例:

this.isAlive = true; // starting condition

this.lifes = function() {
    var life = Math.floor(Math.random() * (3 - 0 + 1)) + 0;
    this.isAlive = (life > 0);
    if (this.alive) {
        document.write('you survived');
    } else {
        document.write('you died');
    }

现在在 for 循环中,您可以访问 isAlive:

// loop until 100 attempts or you die, which ever comes first
for (i = 1; i < 101 && myChar.isAlive; i++) {
    myChar.hits(myChar.allHits)
    myChar.lifes(myChar.lifes)
}

关于javascript - 尝试退出循环,但目前仅继续循环 100 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36844426/

相关文章:

javascript - Meteor {{#each}} – 每个项目的条件格式

javascript - amCharts 中的值为零时显示图表标签

javascript - 从头像获取图片地址

ruby - 优化这个ruby循环结构

java - For 和 While 循环

swift - 用map重写for in 0...n循环

javascript - URL 重写和获取参数未按预期工作

javascript - 带有(过滤依据)来自 json 数据的数据表

php - 使用数组将 mysql dayofweek 整数转换为 while 循环中的工作日名称?

c++ - 如何将基于迭代器的 for 循环重写为基于范围的循环 (C++11)