2013-03-24 195 views
0

是否有可能將這三個函數在頂部合併爲一個,並且在每個骰子上仍然不會獲得相同的隨機nr,當我單擊一個按鈕來滾動所有三個時,當我點擊單個骰子時,清除這些功能是有用的,而底部的功能是當我想同時擲出三個att時!所有這一切工作我的問題是,只有它可以用更少的代碼完成?隨機骰子nr,javascript

function rollDice1(){ 
    var randomDice = Math.floor(6*Math.random())+1; 
    dice1.src = "dice/" + randomDice + ".jpg"; 
} 

function rollDice2(){ 
    var randomDice = Math.floor(6*Math.random())+1; 
    dice2.src = "dice/" + randomDice + ".jpg"; 
} 

function rollDice3(){ 
    var randomDice = Math.floor(6*Math.random())+1; 
    dice3.src = "dice/" + randomDice + ".jpg"; 
} 

function rollDices() { 
    rollDice1(); 
    rollDice2(); 
    rollDice3();  
} 
+0

你如何初始化'dice1','dice2'和'dice3'? – 2013-03-24 19:57:12

+0

*並且每個骰子仍然沒有相同的隨機nr * - 您的代碼不能保證骰子是唯一的。 – dfsq 2013-03-24 19:57:13

回答

1

添加一個參數到函數中,所以當被調用時,你可以傳入要設置的骰子。假定dice1,dice2dice3是全局變量。

function rollDice(di){ 
    var randomDice = Math.floor(6*Math.random())+1; 
    di.src = "dice/" + randomDice + ".jpg"; 
} 

function rollDices() { 
    rollDice(dice1); 
    rollDice(dice2); 
    rollDice(dice3);  
} 
+0

然後它說無法將src的roperty設置爲undefined – spovell 2013-03-24 20:01:16

+0

所有三個調用都應該是rollDice(),而不是rollDice1()等。 – 2013-03-24 20:06:34

+0

但是隻有當我點擊一個單獨的骰子時,爲什麼會這樣呢?當我按下按鈕滾動所有三個工作正常? – spovell 2013-03-24 20:07:08

1

您可以循環,沒有必要要求三倍的外部函數:

function rollDices() { 
    for (var i=1; i<=3; i++) { 
     var randomDice = Math.floor(6*Math.random())+1; 
     window['dice'+i].src = "dice/" + randomDice + ".jpg"; 
    } 
} 

它可能是由具有陣列,而不是爲dice1dice2dice3三個獨立的變量更好的(我這裏假設他們是全局變量)。

0

我實際上更喜歡用OO-approach;只需創建可滾動的不同Dice對象。

function Dice() { 

    var self = this; 

    this.face; 

    this.roll = function() { 
     var randomDice = Math.floor(6*Math.random())+1; 
     self.face = "dice/" + randomDice + ".jpg"; 
     return randomDice; 
    }; 

}; 

var dice1 = new Dice(), 
    dice2 = new Dice(), 
    dice3 = new Dice(); 

dice1.roll(); 
dice2.roll(); 
dice3.roll(); 

console.log(dice1.face); 
console.log(dice2.face); 
console.log(dice3.face); 

JSFiddle example

(注意它是不完整的;當骰子沒有被滾動時,臉部是undefined。您可能想要採取措施以防止該狀態)。

+0

OOP方法應用於簡單的事情的問題是,它使簡單的問題變得冗長而不靈活。 – 2013-03-24 20:06:14

0

我的做法是:

function rollDice(times){ 
    var randomDices = []; 
    while (randomDices.length < times) { 
     var rand = Math.floor(6*Math.random())+1; 
     if(randomDices.indexOf(rand) > -1 == false) 
      randomDices.push(rand); 
    } 
    return randomDices 
} 

上面的代碼返回的數組,其中長度指定隨機骰子的。例如 rollDice(3)將返回三個隨機骰子。

0

這是我在接受答案的變化:

function rollDice(di) { 
    var randomDice = Math.floor(6*Math.random())+1; 
    di.src = "dice/" + randomDice + ".jpg"; 
} 

function rollDices(arr) { 
    for (i = 0; i < arr.length; i++) { 
     rollDice(arr[i]); 
    }  
} 

這種實現方式的優點是,可以使用任意數量的骰子,並沿圖像變量數組傳遞給rollDices

推出一個骰子,你可以這樣做:

rollDice(dice1); 

但是,你也可以這樣做:

rollDices([dice1]); 

要投擲兩個骰子,你可以這樣做:

rollDices([dice1, dice2]); 

要滾動三個骰子,您可以這樣做:

rollDices([dice1, dice2, dice3]); 

推出4個骰子,你可以這樣做:

rollDices([dice1, dice2, dice3, dice4]); 

等等...