2017-10-07 22 views
0

该代码的目的是允许用户随意玩游戏。我继续陷入无限循环,我不知道为什么。附:我需要坚持转换语句。开关嵌套在while循环中以允许用户再次玩 - Javascript

var color1 = prompt('Pick a color'); 

    while (true){ 

    switch (color1) { 
     case (color1 = 'blue'): 
      document.write("nope"); 
      break; 
     case (color1 = 'yellow'): 
      document.write("nope"); 
      break; 
     case (color1 = 'white'): 
      document.write("nope"); 
      break; 
     case (color1 = 'gray'): 
      document.write("nope"); 
      break; 
     case (color1 = 'green'): 
      document.write("yes"); 
      break; 
     case (color1 = 'pink'): 
      document.write("nope"); 
      break; 
     case(color1 = 'purple'): 
      document.write("nope"); 
      break; 
     case (color1 = 'orange'): 
      document.write("nope"); 
      break; 
     case (color1 = 'green'): 
      document.write("nope"); 
      break; 
     case (color1 = 'magenta'): 
      document.write("nope"); 
      break; 
     case (color1 = 'red'): 
      document.write("nope"); 
      break; 
    } 

    if(color1 = false) 
    alert('Thanks') 

    } 
+0

所有游戏逻辑必须在循环中,如果你打算让他们再次发挥。而且,给他们一种退出再玩的方式会很有帮助。 – mrogers

+0

另外,您应该使用double equals ==来测试是否相等而不是赋值'='。所以'color1 = ...'应该是'color1 == ...' – mrogers

回答

3

有在你的代码的几个问题:

  • =符不分配,你需要=====进行比较。

  • 您没有使用case在您switch正确:你只是需要把你要匹配color1的价值,不要试图做一个比较,就好像它是一个if条件。所以,你需要这样的东西:

    switch (color1) { 
        case 'red': 
         document.write("nope"); 
         break; 
    
  • 它没有意义列出一大堆不同case期不同颜色不正确,因为即使抛开一个事实,即用户可以在列表中没有输入值,真正的逻辑应该是“是绿色的吗?”是/否。一个if声明将使更多的意义比switch,但既然你说你必须使用switch,那么你应该有一个正确的答案一个case然后用default捕获所有其他值:

    switch (color1) { 
        case 'green': 
         document.write("yes"); 
         break; 
        default: 
         document.write("nope"); 
         break; 
    } 
    

    或者在您需要的合法列出几个值,但有他们这样做,你应该使用的“砸锅”像这样一回事一个假设的例子:

    switch (color1) { 
        case 'blue': 
        case 'yellow': 
        case 'white': 
         document.write("nope"); 
         break; 
        case 'green': 
         document.write("yes"); 
         break; 
    } 
    
  • 最后if需要break OU t的while循环当条件为真 - 目前它所做的就是显示警报,因此是无限循环。

  • 测试if (color1 === false)没有意义,因为color1将永远不会成为false(固定操作后):如果用户点击prompt()取消按钮则该值将null,因此测试了点。你也可以测试一个空字符串。除了可以将该逻辑移入case而不是在switch语句后面有if。而不是while(true),使用while(!finished)并添加一个finished变量,您设置为true当用户单击取消按钮。

  • prompt()需求是循环,否则用户将只能使用一次循环开始前提示和循环将不断重复一遍又一遍的测试相同的值。

  • 使用document.write()是不是一个很好的计划,但我声明了这个问题超出范围了这个问题。与此同时,你至少应该输出<p>元素或其他东西,以便每个“nope”和“yes”都出现在它自己的行上。

把所有在一起:

var finished = false; 
 

 
while (!finished) { 
 
    var color1 = prompt('Pick a color'); 
 

 
    switch (color1) { 
 
    case null: 
 
    case '': 
 
     alert('Thanks'); 
 
     finished = true; 
 
     break; 
 
    case 'green': 
 
     document.write("<p>yes</p>"); 
 
     break; 
 
    default: 
 
     document.write("<p>nope</p>"); 
 
     break; 
 
    } 
 
}