2012-02-25 46 views
0

我正在寫一個JavaScript岩石紙剪刀應用程序,但我從來沒有寫過應用程序。誰能幫我嗎?對於Rock來說,它總是爲Paper輸出一個平局, ,它總是爲Scissors輸出一個損失 ,它總是輸出一個勝利。我的搖滾紙剪刀有什麼問題?

<script type="text/javascript"> 
var Rock; 
var Paper; 
var Scissors; 
var choice = prompt("Specify your choice of 'Rock', 'Paper', or 'Scissors'."); 
var game = [Rock, Paper, Scissors]; 

document.write("Rock."); 
document.write("Paper.."); 
document.write("Scissors..."); 

var result = game[Math.floor(Math.random() * game.length)]; 

if (result === Rock) { 
if (choice === "Rock") { 
document.write("It's a draw! Try again."); 
} 
else if (choice === "Paper") { 
document.write("You lose! Unlucky."); 
} 
else if (choice === "Scissors") { 
document.write("You win! Nice."); 
}} 

else if (result === Paper) { 
if (choice === "Rock") { 
document.write("You win! Nice."); 
} 
else if (choice === "Paper") { 
document.write("It's a draw! Try again."); 
} 
else if (choice === "Scissors") { 
document.write("You lose! Unlucky."); 
}} 

else if (result === Scissors) { 
if (choice === "Rock") { 
document.write("You lose! Unlucky."); 
} 
else if (choice === "Paper") { 
document.write("You win! Nice."); 
} 
else if (choice === "Scissors") { 
document.write("It's a draw! Try again."); 
}} 
</script> 

回答

4

RockPaperScissorsundefined,所以他們永遠是平等的。把它們設置爲任何東西,它應該工作。

var Rock = 'Rock'; 
var Paper = 'Paper'; 
var Scissors = 'Scissors'; 
3

game陣列實際上是3個相等的值的數組:var Rock相同var Papervar Scissors:它們都是未定義的,即沒有任何價值。

如果您剛剛爲它們中的每一個指定了一個值,例如var Rock=1,var Paper=2var Scissors=3,那麼您的程序應該可以工作。話雖如此,你可能只是在這裏使用字符串,你陣列應該只是["Rock", "Paper", "Scissors"]。然後,您可以再次對字符串進行測試,因爲您的變量爲choice

編輯:

只是爲了好玩,這裏就是我在下面的評論的事情用數字是容易的意思是:

var words = ['rock', 'paper', 'scissors']; 
var played = words.indexOf(choice); 
// if played is -1 here, your player typed in something other than the 3 words you accept 

var result = Math.floor(Math.random() * game.length); 
var outcome = (played - result + 2) % 3; 
var message 
if (outcome == 2) { 
    message = "It's a draw! Try again."; 
} else if (outcome == 1) { 
    message = "You lose! Unlucky."; 
} else { 
    message = "You win! Nice."); 
} 
document.write(message); 
+0

非常感謝,非常有幫助 – loucidity 2012-02-25 19:22:49

+0

只要我們希望用戶在提示中輸入整個字符串,最好使用「字符串數組」方式,而不是數字。 – raina77ow 2012-02-25 20:13:20

+0

好,不錯。如果我必須寫出上述邏輯,我會扭轉這種說法:如果我們處理數字,邏輯將會簡單得多。 – 2012-02-25 20:57:41

1

總之,這是因爲你混合字符串和未分配的變量在你的應用程序。這是相當簡單的修復:把引號的岩石,紙和剪刀,像:

var game = ['Rock', 'Paper', 'Scissors']; 

...並得到完全擺脫變量,不是在需要的時候。 )

發生了什麼事是:

1)聲明三個變量 - 岩石,紙和剪刀,但不要任何值分配給他們,讓他們留undefined。然後你從它們的值中創建一個數組 - 實質上是一個由三個相同元素組成的數組,未定義。

2)然後您嘗試生成一些隨機值,但最終爲undefined,因爲該數組中沒有其他值。所以你的result總是undefined

3)那麼第一個if檢查成功,因爲undefined(結果)嚴格等於undefined(Rock)。現在結果是顯而易見的:「紙」(一個字符串)獲勝,「剪刀」(又是一個字符串)失去了,'搖滾'(我提到這是一個字符串?)繪製。

最終編輯:永遠不要混淆undefined'undefined'(字符串)。這些也不同:例如,前者是麻痹的,而後者則不是。

相關問題