0

ボタンをクリックして3つすべてを振ったときに、上部にあるこれら3つの関数を1つにまとめても、各サイコロで同じランダムなnrを取得できない可能性はありますか?機能を明確にするために、私が1つのサイコロをクリックしたときのためのものであり、下部の機能は、3つすべてのattを同時に転がしたいときのためのものです!それはすべてうまくいきます私の質問はそれがより少ないコードでできる場合にのみですか?

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

ループすることができ、外部関数を3回呼び出す必要はありません:

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、、およびの3つの個別の変数の代わりに配列を使用する方がよい場合がありますdice2dice3ここでは、それらはグローバル変数であると想定しました)。

于 2013-03-24T19:55:54.690 に答える
0

私は実際にはOOアプローチを採用したいと思います。ロールできるさまざまなサイコロオブジェクトを作成しただけです。

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(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)3つのランダムなダイスを返します。

于 2013-03-24T20:10:42.630 に答える
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配列に渡すことができることです。

1つのサイコロを振るには、次のようにします。

rollDice(dice1);

ただし、これを行うこともできます:

rollDices([dice1]);

2つのサイコロを振るには、次のようにします。

rollDices([dice1, dice2]);

3つのサイコロを振るには、次のようにします。

rollDices([dice1, dice2, dice3]);

4つのダイスを転がすには、次のようにします。

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

等...

于 2016-02-25T19:19:51.013 に答える