骰子滚动在JavaScript中

时间:2013-12-20 10:32:05

标签: javascript

function rolldice() {
    var x = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    var y = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    var dicetotal = x + y;
    var double = 0;
    $('.dice1').attr('id', "dice" + x);
    $('.dice2').attr('id', "dice" + y);
    if (x == y) { //<----checking if there is a double
        var double = double++; //<---increment double count
        //Now reroll the dice, but if you hit 3 doubles in a row, you get message go to jail.
    }
};

我想知道我是否需要一些循环...请帮助我。这是垄断游戏的一部分。我需要在代码中添加什么,以便在有双重时循环。

7 个答案:

答案 0 :(得分:1)

您只需要进行递归调用:

var dbl = 0;
function rolldice() {
    var x = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    var y = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    var dicetotal = x + y;
    $('.dice1').attr('id', "dice" + x);
    $('.dice2').attr('id', "dice" + y);
    if (x == y) { //<----checking if there is a double
        dbl++; //<---increment double count
        if(dbl%3==0) $('.out').attr('id', "jail");
        //Now reroll the dice, but if you hit 3 doubles in a row, you get message go to jail.
        rolldice();
    }
};

答案 1 :(得分:0)

我认为你需要创建这样的东西:

var double = 0;

function rolldice(){

    var x = Math.floor(Math.random() * ((6-1)+1) + 1);
    var y = Math.floor(Math.random() * ((6-1)+1) + 1);

    var dicetotal = x + y;
    $('.dice1').attr('id',  "dice" + x);
    $('.dice2').attr('id', "dice" +y);

    if(x==y) {
       if (double < 3) {
          double++; // increase dobule
          rolldice(); // Call rolldice again...
       } else {
          // Here there is 3 in a row....
       }
    }
}

答案 2 :(得分:0)

这有一些并发症。当玩家更改时,您需要重置变量的值以检查双掷。

执行以下操作:

var dblRolls;
function userChange(){//call this on change of user
    dblRolls=0;
    rollDice();
}
function rolldice() {
    var x = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    var y = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    var dicetotal = x + y;
    var double = 0;
    $('.dice1').attr('id', "dice" + x);
    $('.dice2').attr('id', "dice" + y);
    if (x == y) { //<----checking if there is a double
        dblRoll++; //<---increment double count
        if(dblRoll==3)
        //jail
        else
            rollDice();
    }

};

答案 3 :(得分:0)

不要使用循环。

而是将双精度计数器添加为rolldice()函数的参数,并从内部调用函数:

function rolldice(doubleCount) {
    var x = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    var y = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    var dicetotal = x + y;
    $('.dice1').attr('id', "dice" + x);
    $('.dice2').attr('id', "dice" + y);
    if (x == y) { //<----checking if there is a double
       doubleCount++;
       if (doubleCount == 3)
       {
           //go to jail
       }
       else
       {
           rolldice(doubleCount);
       }
    }
};

玩家第一次掷骰的初始调用看起来像rolldice(0);

答案 4 :(得分:0)

好的,除了这已经超过两个小时并且已经有4个答案,我想加2美分。

你声明你想要制作一个大富翁游戏。在大多数情况下,如果不是全部,骰子滚动,玩家必须做出决定。这意味着在每次滚动后,您等待用户输入(例如,按下某些按钮)。

所有其他答案都建议以某种方式使用递归调用。相反,我建议在一些全局变量中存储双精度数和当前玩家的数量。你不使用循环,而是使用:

var doubleCount = 0;

function rolldice() {
    var x = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    var y = Math.floor(Math.random() * ((6 - 1) + 1) + 1);
    var dicetotal = x + y;
    $('.dice1').attr('id', "dice" + x);
    $('.dice2').attr('id', "dice" + y);
    if (x == y) { //<----checking if there is a double
        doubleCount++; //<---increment double count
        if (doubleCount > 2) {
          // Got to Jail
        }
    }
    // Proceed as usual and come back to this, when the user presses the "Roll" Button again
};

答案 5 :(得分:0)

这是一种可能的解决方案。

function rolldice(dbl=0){
var x = Math.floor(Math.random()*((6-1)+1) + 1);
var y = Math.floor(Math.random()*((6-1)+1) + 1);
if(x===y){
   if(dbl!==3){
      dbl++;
      rolldice(dbl);
   }else{
      //goto jail
   }
}else{
    //no double
    dbl=0;
}
}

function rolldice(dbl=0){
var x = Math.floor(Math.random()*((6-1)+1) + 1);
var y = Math.floor(Math.random()*((6-1)+1) + 1);
if(x===y&&dbl!==3)
    dbl++;
    rolldice(dbl);
}else if(x===y&&dbl===3){
    //goto jail
}else{
    //no double
    dbl=0;
}
}

答案 6 :(得分:-1)

此脚本有效:

function rollDice(){
   var dice1 = document.getElementById("dice1");
   var dice2 = document.getElementById("dice2");
   var status = document.getElementById("status");
   var d1 = Math.floor(Math.random() * 6) + 1;
   var d2 = Math.floor(Math.random() * 6) + 1;
   var diceTotal = d1 + d2;
   dice1.innerHTML = d1;
   dice2.innerHTML = d2;
   status.innerHTML = "You rolled "+diceTotal+".";
   if(d1 == d2){
      status.innerHTML += "<br />DOUBLES! You get a free turn!!";
   }
}