2013-03-24 218 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]); 

等等...