随机骰子nr,javascript

时间:2013-03-24 19:53:38

标签: javascript

当我点击一个按钮滚动所有三个时,是否有可能将这三个功能放在一个并且仍然没有在每个骰子上得到相同的随机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();    
}

5 个答案:

答案 0 :(得分:1)

向函数添加一个参数,以便在调用时可以传入要设置的模具。这假设dice1dice2dice3是全局变量。

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

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

答案 1 :(得分: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设置一个数组而不是三个单独的变量可能会更好(我在这里假设它们是全局变量)。

答案 2 :(得分: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。你可能想采取措施以防止这种状态。)

答案 3 :(得分: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)将返回三个随机骰子。

答案 4 :(得分: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]);

等等...