2013-12-10 32 views
-3

我想登錄到控制檯的消息說:格拉茨!你獲得了5分!'之後你將兩個相同的號碼相互對齊。我的代碼有什麼問題? - 骰子滾動

有人能解釋我的代碼有什麼問題嗎?

<script> 


var d1 = Math.floor(Math.random()*6) +1; 

    var diceRolls = []; 


function rollDice() { 
      var die1 = document.getElementById("die1"); 
      var status = document.getElementById("status");    
      var d1 = Math.floor(Math.random()*6) +1; 
      console.log("You rolled "+d1+"."); 
      diceRolls.push(d1); 


    } 
    if(diceRolls[diceRolls.length - 1] === d1) { 
     console.log("You won 5 points!"); 
    }  
    </script> 
+8

那麼,它是做什麼的?它什麼都不做?發生錯誤?崩潰你的電腦?讓飛行的猴子從天上墜落?給你免費的華夫餅?請澄清。 – Doorknob

+4

@EisaAdil這是一個笑話嗎? (我希望如此:P) – Doorknob

+0

@Eisa Adil - 你的建議不適用於純粹的(或幾乎純粹的)算法,就像他在這裏嘗試的那樣 –

回答

2

你永遠不會循環結果,並且你給一個隨機數分配d1,但是什麼都不做。

你需要滾動骰子,每次循環數組以找出2個數字是否相同,此時你不循環,所以沒有辦法知道2個數字是否相等。

+0

沒有必要循環。你只需要數組的最後兩個元素。 – TGO

+2

在陣列中循環不是必需的,事實上,如果意圖是僅獎勵兩個*順序*相同的卷,則結果會錯誤。 (如果要獎勵滾動已經滾動過的東西*,一個普通的對象 - 或一個包含6個元素的數組 - 將會更好地跟蹤它。) – cHao

4

您的代碼存在的問題是您在函數外部檢查,並且條件不正確。首先你需要確保骰子至少滾動兩次,然後比較兩個最後的值。正如@Bergi指出的那樣,你也需要調用這個函數,儘管我猜你已經這麼做了。下面是正確的解決方案:

var diceRolls = []; 
var totalDiceRolls = 0; 
// you set this to whatever you want the limit to be 
var maxDiceRolls = 10; 

function rollDice() { 
     if (++totalDiceRolls > maxDiceRolls) 
     { 
      alert(maxDiceRolls + " dice rolls allowed at max!"); 
      return; 
     } 
     var die1 = document.getElementById("die1"); 
     var status = document.getElementById("status");    
     var d1 = Math.floor(Math.random()*6) +1; 
     console.log("You rolled "+d1+"."); 
     diceRolls.push(d1); 



     if(diceRolls.length > 1 && diceRolls[diceRolls.length - 2] == d1) { 
      console.log("You won 5 points!"); 
     } 
} 
+1

還應該指出,您需要實際上調用函數的地方然後:-) – Bergi

+0

@Bergi是的,你是對的:-) – TGO

+0

你能否請用簡單的語言解釋我這句話的意思? :if(diceRolls.length> 1 && diceRolls [diceRolls.length - 2] == d1){ – Youssef