【发布时间】:2014-06-06 17:09:54
【问题描述】:
我正在练习循环,我想我会用一个简单的战斗模拟来让它变得有趣。我不知道为什么,但是 doBattle 循环只调用 BattleMenu 而不会提醒其他任何东西。我错过了什么/误解了什么?欢迎任何关于改进代码的建议。
doBattle(player, goblin_01);
function battleMenu(){
selection = prompt("\n Battle menu\n1: Attack\n2: Defend\n3: Abilities\n4: Status\n5: Enemy Status\n Enter a choice: ");
// Checks for valid input
while (selection > 5 || selection < 1){
selection = prompt("Invalid choice.\n Enter a choice(1-5)");
}
}
function doBattle(x,y){
do { battleMenu();
switch(selection){
case 1: // do stuff
break;
case 2: // do other stuff
break;
case 3: // alternative stuff
break;
case 4: // not stuff but things
break;
case 5: // something irrelevant to the topic
break;
} // End of Selection Switch
} while // condition that became false
}
编辑:正如 Ian 在 OP 中首次评论的那样,问题是我传递了一个字符串但测试整数。我忘了转换类型,偶数是作为字符串输入的。这些案例使代码错综复杂,我假设这就是它被搁置的原因。但希望现在它可以派上用场了。
【问题讨论】:
-
我认为你应该尝试重构这个大循环。
-
selection包含一个字符串,而您将case与 数字 一起使用。将您的开关/大小写更改为使用字符串,或将prompt返回值转换为数字 -
在你的
prompts 前面放一个+可以“修复”它:jsfiddle.net/3m9Qb - 尽管代码还有很多工作要做 -
谢谢伊恩!就是这样。我完全忘记了将字符串转换为数字!
标签: javascript loops infinite-loop do-while