0

当我单击一个按钮来滚动所有三个时,是否可以将顶部的这三个功能合二为一,但每个骰子仍然无法获得相同的随机 nr?清除功能适用于单击单个骰子时,底部的功能适用于我想同时滚动所有三个骰子时!所有这些都有效我的问题是只有用更少的代码才能完成?

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();    
}
4

5 回答 5

3

向函数添加一个参数,以便在调用时可以传入要设置的骰子。这假定dice1和是dice2全局dice3变量。

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

function rollDices() {
    rollDice(dice1);
    rollDice(dice2);
    rollDice(dice3);    
}
于 2013-03-24T19:55:32.930 回答
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";
    } 
}

用一个数组而不是三个单独的变量来代替dice1,dice2dice3(我在这里假设它们是全局变量)可能会更好。

于 2013-03-24T19:55:54.690 回答
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)将返回三个随机骰子。

于 2013-03-24T20:10:42.630 回答
0

我实际上更喜欢采用OO 方法;只需创建可以滚动的不同 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 示例

(注意它是不完整的;当骰子没有被掷出时,脸是undefined。您可能需要采取措施来防止这种状态)。

于 2013-03-24T20:03:04.270 回答
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]);

要掷四个骰子,您可以这样做:

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

ETC...

于 2016-02-25T19:19:51.013 回答