2015-12-04 38 views
0

我剛剛在codecademy上完成了一個rps遊戲,並且還有一些額外的任務,包括如果用戶輸入錯誤的信息會產生結果。基本上,如果你不寫一個「搖滾」,「紙」或「剪刀」的輸入,它會再次問你,直到你把它放在正確的一個。岩石紙,剪刀遊戲

我怎麼能調用userChoice變量,直到它得到正確的答案。我試過這樣,但它只是問了2次,然後發佈你寫的任何東西。

var userChoice = prompt("Do you choose rock, paper or scissors?"); 

if (userChoice != "rock", "paper", "scissors") { 
    userChoice = prompt("Do you choose rock, paper or scissors?"); 
} 

var computerChoice = Math.random(); 
if (computerChoice < 0.34) { 
    computerChoice = "rock"; 
} else if(computerChoice <= 0.67) { 
    computerChoice = "paper"; 
} else { 
    computerChoice = "scissors"; 
} 

var compare = function (choice1, choice2) { 
    if (choice1 === choice2) { 
    return "The result is a tie!"; 
    } 
    else if(choice1 === "rock") { 
     if (choice2 === "scissors") { 
      return "rock wins"; 
     } 
     else { 
      return "paper wins"; 
     } 
    } 
    else if(choice1 === "paper") { 
     if(choice2 === "rock") { 
      return "paper wins"; 
     } 
     else { 
      return "scissors wins"; 
     } 
    } 
    else if(choice1 === "scissors") { 
     if(choice2 === "rock") { 
      return "rock wins"; 
     } 
     else { 
      return "scissors wins";  
     } 
    } 
} 

console.log("Human: " + userChoice); 
console.log("Computer: " + computerChoice); 
compare(userChoice, computerChoice); 
+0

使用做... while循環 – Robert

+0

你可以大量簡化這一點 - 我有一個小樂趣。看看這個,我已經添加了評論來解釋快捷鍵:http://jsfiddle.net/svArtist/12nLz7nb/ –

+0

明天我會研究它,謝謝你的建議 –

回答

2

使用引用自身的函數:

var userChoice = function() { 
    var choice = prompt("Do you choose rock, paper or scissors?"); 

    if (choice !== "rock" && choice !== "paper" && choice !== "scissors") { 
    return userChoice(); 
    } else { 
    return choice; 
    } 
}; 

This fiddle有整個事情的工作。

+1

是的,就像@TAGraves寫道的一樣。由於它在一行之後執行代碼行,算法沒有理由運行兩次以上。而且,如果您第一次輸入錯誤的答案,您的安全檢查將會被觸發,並且會再次提示用戶。但是,如果他們輸入另一個不正確的答案,則代碼將繼續。這就是爲什麼你需要包含上面的代碼 - 它會檢查條件,如果它不正確,函數將再次運行。在運行代碼方面,想象一下玩棋盤遊戲,每次擲出6時回退3步。這也是一樣的。 – lmenus

+0

我明白這是如何起作用的,但它卻沒有。這最終發生:http://s23.postimg.org/e6hz8swhn/Capture.png –

+0

問題是,您沒有在整個代碼中更改對userChoice的引用。看看我的小提琴。請注意,在聲明函數之後,我做了一個變量'var choice = userChoice();',然後在'userChoice'之前的任何位置使用'choice'。 – TAGraves

0

使用以下

do { 
    userChoice = prompt("Do you choose rock, paper or scissors?"); 
} while (userChoice != "rock", "paper", "scissors") 
+0

這個解決方案和我的一樣。請注意'userChoice!=「rock」,「paper」,「scissors」'不起作用 - 您需要將它更改爲與&&結合的多個語句,就像我一樣。 – TAGraves