Javascript 多次运行的Switch语句

Javascript 多次运行的Switch语句,javascript,switch-statement,Javascript,Switch Statement,我又回来了,就像以前一样难堪。。。我对我的游戏有了进一步的了解,但回顾游戏的一部分,我会检查你是否有药剂,如果你有,并且你尝试使用它,它会计算当前的生命值和药剂的添加量是否超过玩家的最大生命值。如果是,它会告诉你不能喝,如果不是,它会让你喝。然后如果你没有任何药剂,你尝试使用它,它会告诉你你没有 我的问题是它运行了两次,我不知道为什么。下面是Switch语句的一个片段: while (currentarea == "Hero's Turn") { if (hTurn == true) {

我又回来了,就像以前一样难堪。。。我对我的游戏有了进一步的了解,但回顾游戏的一部分,我会检查你是否有药剂,如果你有,并且你尝试使用它,它会计算当前的生命值和药剂的添加量是否超过玩家的最大生命值。如果是,它会告诉你不能喝,如果不是,它会让你喝。然后如果你没有任何药剂,你尝试使用它,它会告诉你你没有

我的问题是它运行了两次,我不知道为什么。下面是Switch语句的一个片段:

while (currentarea == "Hero's Turn") {
    if (hTurn == true) {
        switch (classType) {
            case "Warrior":
            case "Archer":
                switch (input) {
                    case "punch":
                    case "p":
                        Punch();
                        break;
                    case "kick":
                    case "k":
                        Kick();
                        break;
                    case "attack":
                    case "a":
                        Attack();
                        break;
                    case "health potion":
                    case "h":
                        HealthPotion();
                        break;
                    default:
                }
            case "Mage":
                switch (input) {
                    case "fire":
                    case "f":
                        FireMagic();
                        break;
                    case "wind":
                    case "w":
                        WindMagic();
                        break;
                    case "frost":
                    case "c":
                        IceMagic();
                        break;
                    case "health potion":
                    case "h":
                        HealthPotion();
                        break;
                    case "mana potion":
                    case "m":
                        ManaPotion();
                        break;
                    default:
                }
            default:
        }
        return;
    }
}
我试着把弓箭手移到自己的路线上,结果它跑了三次。问题在于战士和弓箭手,法师只按预期推送一次信息

这是函数的代码:

function HealthPotion() {
    if (healthPotion.AmountOf < 1) {
        $("<p>Sorry, you don't have any more of those.</p>").hide().insertBefore("#placeholder").fadeIn(1000);
        checkH();
        return;
    }
    if (healthPotion.AmountOf != 0) {
        if(battleHealth + healthPotion.Health <= maxHealth) {
            $("<p>You regained some Health! You regained " + healthPotion.Health + " HP!</p>").hide().insertBefore("#placeholder").fadeIn(1000);
            battleHealth += healthPotion.Health;
            document.getElementById("battleHealth").innerHTML = battleHealth;
            healthPotion.AmountOf--;
            document.getElementById("healthPotion.AmountOf").innerHTML = healthPotion.AmountOf;
            checkE();
            return;
        }
        else {
            $("<p>Your health isn't damaged enough for that! It would be a waste to use that right now.<br />Press enter to carry on.</p>").hide().insertBefore("#placeholder").fadeIn(1000);
            checkH();
            return;
        }
    }
}
这是循环的方向(敌人和英雄检查):

函数检查(){
如果(电子健康>=1){
currentarea=“轮到敌人了”;
document.getElementById(“currentarea”).innerHTML=currentarea;
hTurn=false;
eTurn=true;
返回;
}
否则如果(eHealth=1){
currentarea=“战斗”;
document.getElementById(“currentarea”).innerHTML=currentarea;
eTurn=false;
hTurn=true;
返回;
}

否则,如果(战斗健康你突破了内部开关,那么这个突破对外部开关没有任何作用,所以当你有“战士”时,它会这样做,因为在它的级别上没有突破,它会转到“法师”

开关(类类型){
“勇士”案:
“阿切尔”案:
开关(输入){
案例“冲压”:
案例“p”:
冲压();
打破
案例“踢”:
案例“k”:
踢();
打破
“攻击”一案:
案例“a”:
攻击();
打破
案例“健康药水”:
案例“h”:
健康药水();
打破
违约:
}

打断;//你打断了内部开关,这个打断对外部开关没有任何作用,所以当你有“战士”时,它会这样做,因为在它的级别上没有打断,它会转到“法师”

开关(类类型){
“勇士”案:
“阿切尔”案:
开关(输入){
案例“冲压”:
案例“p”:
冲压();
打破
案例“踢”:
案例“k”:
踢();
打破
“攻击”一案:
案例“a”:
攻击();
打破
案例“健康药水”:
案例“h”:
健康药水();
打破
违约:
}

break;//你知道如何从开发工具中调试吗?你的外部
开关
缺少一些
break
sw循环条件在哪里变化?除非你调用的函数是change
currentarea
你有一个infiniate循环。你没有从第一个开关中断,只有嵌套的开关……因此它将进入下一个循环下一步…你知道如何从开发工具中调试吗?你的外部
开关
缺少一些
中断开关
循环条件在哪里变化?除非你调用的函数change
currentarea
你有一个infiniate循环。你没有中断第一个开关,只有嵌套的开关。因此它将进入下一个循环接下来…天哪…我不知道我需要在那里休息。谢谢。我以为我的代码中有其他嵌套的switch语句,但我错了。到目前为止,这是第一个。天哪…我不知道我需要在那里休息。谢谢。我以为我的代码中有其他嵌套的switch语句,但我错了。到目前为止,这是第一个。
var healthPotion = { //Recovers battle HP.
   Name: "Health Potion",
   Health: 20,
   AmountOf: 5,
   Value: 30,
}
function checkE() {
    if (eHealth >= 1) {
        currentarea = "Enemy's Turn";
        document.getElementById("currentarea").innerHTML = currentarea;
        hTurn = false;
        eTurn = true;
        return;
    }
    else if (eHealth <= 0) {
        eHealth = 0;
        document.getElementById("eHealth").innerHTML = eHealth;
        currentarea = "Death";
        win++;
        document.getElementById("win").innerHTML = win;
        hTurn = false;
        eTurn = false;
        return;
    }
}
function checkH() {
    if (battleHealth >= 1) {
        currentarea = "Battle";
        document.getElementById("currentarea").innerHTML = currentarea;
        eTurn = false;
        hTurn = true;
        return;
    }
    else if (battleHealth <= 0) {
        battleHealth = 0;
        document.getElementById("battleHealth").innerHTML = battleHealth;
        currentarea = "Death";
        document.getElementById("currentarea").innerHTML = currentarea;
        lose++;
        document.getElementById("lose").innerHTML = lose;
        return;
    }
}
switch (classType) {
  case "Warrior":
  case "Archer":
    switch (input) {
      case "punch":
      case "p":
        Punch();
        break;
      case "kick":
      case "k":
        Kick();
        break;
      case "attack":
      case "a":
        Attack();
        break;
      case "health potion":
      case "h":
        HealthPotion();
        break;
      default:
    }
    break; // <-- YOU NEED THIS HERE
  case "Mage":
    switch (input) {
      case "fire":
      case "f":
        FireMagic();
        break;
      case "wind":
      case "w":
        WindMagic();
        break;
      case "frost":
      case "c":
        IceMagic();
        break;
      case "health potion":
      case "h":
        HealthPotion();
        break;
      case "mana potion":
      case "m":
        ManaPotion();
        break;
      default:
    }
    break; // <-- YOU NEED THIS HERE IF YOU DO SOMETHING IN DEFAULT
  default:
}