2014-04-06 101 views
0

我正在製作一款搖滾紙剪刀遊戲,並且我希望發出警報以確定誰選擇了誰,誰贏了,但警報不會彈出。我發現多個錯誤回來並修復它們,再次檢查了所有內容,甚至給出了三重檢查,但警報仍然不會彈出?警報不從if語句打開

這三項功能(他們都是相似的)一個:

function rock() { 
    var computerChoice = Math.random(); 
    if (computerChoice < 0.34) { 
    computerChoice = "rock"; 
    } else if (computerChoice < 0.67) { 
    computerChoice = "paper"; 
    } else { 
    computerChoice = "scissors"; 
    } 
} 
if (computerChoice === "rock") { 
    alert("Link and Computer both chose Rock! It's a Tie!"); 
} else if (computerChoice === "scissors") { 
    alert("Link chose Rock and Computer chose Scissors! Computer took a heart of damage!"); 
} else { 
    alert("Link chose Rock and Computer chose Paper! Link took a heart of damage!"); 
} 
} 
+0

在您的Javascript控制檯中設置一個斷點你的瀏覽器。例如,對於Chrome在Windows上使用F12或在OS X上使用alt-cmd-I打開它,請轉到Sources選項卡。找到你的功能的第一行,點擊左邊(行號所在)來設置一個斷點,並觸發你的功能。 –

+0

當我重新格式化你的代碼時,這是因爲它明顯存在語法錯誤。最後一個額外的'}'。 務必確保您檢查錯誤控制檯。 –

回答

0

我認爲這個問題是上線表示:

function rock() { 
    var computerChoice = Math.random(); 
    if (computerChoice < 0.34) { 
    computerChoice = "rock"; 
    } else if (computerChoice < 0.67) { 
    computerChoice = "paper"; 
    } else { 
    computerChoice = "scissors"; 
    } 
} // <-- I don't think you want this closing brace here 
if (computerChoice === "rock") { 
    alert("Link and Computer both chose Rock! It's a Tie!"); 
} else if (computerChoice === "scissors") { 
    alert("Link chose Rock and Computer chose Scissors! Computer took a heart of damage!"); 
} else { 
    alert("Link chose Rock and Computer chose Paper! Link took a heart of damage!"); 
} 
} 

右括號我指出帶給結束功能rock()。就目前而言,rock()函數實際上並沒有做任何事情;它隨機地將一個值"rock","paper""scissors"賦值給一個局部變量,但該函數在沒有使用該變量的情況下結束,所以該值將丟失。

當JavaScript首次加載到瀏覽器中時,其餘代碼將運行一次。此時,computerChoice將爲undefined,因此您將收到JavaScript錯誤。

如果我們刪除錯誤的梅開二度,並重新格式化代碼,我們得到如下:

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

    if (computerChoice === "rock") { 
    alert("Link and Computer both chose Rock! It's a Tie!"); 
    } else if (computerChoice === "scissors") { 
    alert("Link chose Rock and Computer chose Scissors! Computer took a heart of damage!"); 
    } else { 
    alert("Link chose Rock and Computer chose Paper! Link took a heart of damage!"); 
    } 
} 

我跑這個函數幾次。每次它隨機提醒三條消息中的一條。

+0

這確實做到了!我花時間閱讀你的整個回答,以確保我做對了,你的解釋類型要我自己面對。我應該仔細看看我輸入的內容。謝謝您的幫助! –

0

您不能返回警報。警報是一種方法調用。刪除警報前面的回報,警報將打開:

if(computerChoice === "rock"){ 
    alert("Link and Computer both chose Rock! It's a Tie!"); 
} 
+0

感謝您提供有用的提示,我將不得不在未來記住這一點。可悲的是,我刪除了返回語句,但它仍然沒有給我一個警告消息。雖然我感謝你的幫助。 –

0

您不需要返回。因此,改變這種:

if(computerChoice === "rock"){ 
    return alert("Link and Computer both chose Rock! It's a Tie!"); 
} 

這樣:

if(computerChoice === "rock"){ 
    alert("Link and Computer both chose Rock! It's a Tie!"); 
} 
+0

我刪除了像你所說的返回語句,但它仍然沒有給我一個警告消息。雖然我感謝你的幫助。 –

0

這工作,並使用少走彎路去那裏:)

function rock() { 
    var replies = new Array(
    'Link and Computer both chose Rock! It\'s a Tie!', 
    'Link chose Rock and Computer chose Scissors! Computer took a heart of damage!', 
    'Link chose Rock and Computer chose Paper! Link took a heart of damage!'); 
    alert(replies[Math.floor(replies.length * Math.random())]); 
} 

澄清: 的Math.random()返回範圍[0..1>
replies.length *數學的浮動。 random()返回範圍[0..3>
Math.floor(回覆長度* Math.random())返回0,1或2的浮點數。