伤害似乎不适用于物体?

时间:2016-07-28 00:22:51

标签: javascript

我正在尝试创建一个基本的文本冒险游戏,似乎已经卡住对我的角色应用伤害。我能够得到损坏数字但由于某种原因它似乎没有影响他们的健康,有没有人有任何建议?

function Person(firstName, lastName, hp, concious, str, def, agi, frc ) {
    this.firstName = firstName;
    this.lastName  = lastName;
    this.hp        = hp;
    this.concious  = concious;
    this.str       = str;
    this.def       = def;
    this.agi       = agi;
    this.frc       = frc;

    var sayName = function(p) {
        console.log(p.firstName);
    }

    this.attack = function(Person) {
        var attPow = Math.floor(Math.random() * this.str);
        var attSpe = Math.floor(Math.random() * this.agi);
        var defAtt = Math.floor(Math.random() * Person.def);
        var defAgi = Math.floor(Math.random() * Person.agi);
        console.log(attPow, attSpe, defAtt, defAgi);

        if (attPow > defAtt && attSpe > defAgi){
            return Person.hp -= attPow + attSpe - defAtt;
            console.log(Person.hp);
        } if(attPow < defAtt && attSpe < defAgi) {
            alert("You missed");
        } if (attPow < defAtt) {
            alert("He blocked you're attack");
        } if (attSpe < defAgi) {
            alert("He dodged you're attack");
        }
    }
};

var Angelo = new Person("Angelo", " ", 75, 50, 5, 5, 5, 5);
var boy    = new Person("boy","dead", 75,50,5,2,5,5);
Angelo.attack(boy);

2 个答案:

答案 0 :(得分:0)

如果不详细查看,您的代码无法正常工作的一个明显原因是您的代码的以下部分是错误的:

if (attPow > defAtt && attSpe > defAgi){
    return Person.hp -= attPow + attSpe - defAtt;
    console.log(Person.hp);
} if(attPow < defAtt && attSpe < defAgi) {
    alert("You missed");
} if (attPow < defAtt) {
    alert("He blocked you're attack");
} if (attSpe < defAgi) {
    alert("He dodged you're attack");
}

要创建完整的检查,您必须使用以下格式链接这些 if 语句:

if (attPow > defAtt && attSpe > defAgi){
    return Person.hp -= attPow + attSpe - defAtt;
    console.log(Person.hp);
} else if(attPow < defAtt && attSpe < defAgi) {
    alert("You missed");
} else if (attPow < defAtt) {
    alert("He blocked you're attack");
} else if (attSpe < defAgi) {
    alert("He dodged you're attack");
}

答案 1 :(得分:0)

正如&#34; Angel Politis的答案所指出的那样#34;对于您的方案,您应该使用if关键字将所有else-if语句捆绑到一个块中。

您的代码很好,但它只能间歇性地工作。原因是因为您错过了if区块中您不适合的特定案例。在条件检查中添加else时,您会注意到它。

if (attPow > defAtt && attSpe > defAgi){
  console.log("ATTACK!");
  return Person.hp -= attPow + attSpe - defAtt;
} else if(attPow < defAtt && attSpe < defAgi) {
  console.log("You missed");
} else if (attPow < defAtt) {
  console.log("He blocked you're attack");
} else if (attSpe < defAgi) {
  console.log("He dodged you're attack");
}
else {
  console.log("????");
}

var Angelo = new Person("Angelo", " ", 75, 50, 5, 5, 5, 5);
var boy    = new Person("boy","dead", 75,50,5,2,5,5);
console.log("before HP:" + boy.hp);
Angelo.attack(boy);
console.log("after HP:" + boy.hp);

发生在男孩的HP不受影响的情况下。你会看到这个;

<强>输出:

  惠普之前

:75   0 1 0 1
  ????
  惠普之后:75

注意console.log("????")是如何触发的?这意味着你错过了一个你没有处理的场景。建议您转储attPow子句的defAttattSpedefAgielse变量的值,并查看您缺少的内容。