Javascript中的骰子滚动计数器

时间:2017-09-27 03:04:46

标签: javascript arrays

我正在尝试在Javascript中制作一个骰子滚动计数器,但我似乎无法让它工作。 我需要代码掷骰子25次。我需要生成一个“一”,“二”,“三”,“四”,“五”,“六”的随机数组。我还需要计算每个数字的滚动次数。 这就是我所拥有的:

function rnd(dice){
var number=Math.floor(Math.random(dice)*25);
}

var dice = ["One" , "Two" , "Three" , "Four" , "Five" , "Six"];

length = dice.length;
console.log(length);

for (var i = 0; i < dice.length; i++) {
console.log("i:" + i + "" + dice[i]);
}

3 个答案:

答案 0 :(得分:3)

最好将此问题分解为几个部分。

首先,确保你可以掷一个骰子。

const sides = ["One" , "Two" , "Three" , "Four" , "Five" , "Six"];
const roll = () => sides[Math.floor(Math.random() * 6)]

然后多次掷骰子以获得一系列n卷。

const rolls = (n) => {
    const result = [];
    for (let i = 0; i < n; i++) {
        result.push(roll());
    }
    return result;
};

最后,计算给定滚动出现的次数。

const count = (rolls) => {
    const result = new Map();
    for (const roll of rolls) {
        result.set(
            roll,
            1 + (result.get(roll) || 0));
    }
    return result;
}

答案 1 :(得分:2)

你似乎订阅了#34;弗兰肯斯坦的怪物&#34;计算机编程学院,它要求从某个地方获取身体部位(代码片段),将它们缝合在一起,然后希望它们开始作为一个人(或者在这种情况下,作为一个计算机程序)。

从另一端开始 - 自上而下思考。用简单的英语写下你希望你的程序会做什么。实际上,你已经做了很多这样的事情:

  

我需要代码才能掷骰子25次。

在您做其他任何事情之前,请以伪代码的形式写下问题的这一部分,例如:

repeat 25 times
  roll die

然后你的问题陈述说:

  

我需要生成一个“一”,“二”,“三”,“四”,“五”,“六”的随机数组。

在这里,你需要更仔细地思考你想要做什么。看看句子中的每个单词。我不认为你真的是指&#34;随机阵列&#34;。我认为你的意思是来自数组的随机值。我们在伪代码中包含它,所以它现在看起来像

repeat 25 times
  roll die

to roll die
  generate random value from array of "one" to "six"

最后,

  

我还需要计算每个数字的滚动次数。这就是我所拥有的:

我们可以解决这两种方式。一种是添加一个单独的步骤,可以称为&#34; count rolls&#34;。另一个是我们继续计算卷数。后者似乎有点简单。所以现在我们的伪代码看起来像这样:

initialize counts

loop from 1 to 25
  roll die
  update counts

to roll die
  generate random value from array of "one" to "six"

以这种方式编写内容的好处是,我们可以清楚地看到它是否会按照我们想要的方式执行,而不会混淆JavaScript语法细节。我们可以通过它来使用&#34;橡皮鸭和#34;战略。我们也可以将其交给其他人实施。或者,我们甚至可以用其他语言实现它。

但是,我们将在JavaScript中实现它。然而,在我们这样做之前,我们将更多地充实它。它仍然是伪代码,但更详细一点。我们还需要添加一些逻辑来保存我们的结果,因此我们可以稍后打印出来。

define counts as an array of six numbers, with each value initialized to zero
define results as an empty array

loop from 1 to 25
  roll die, getting a result
  update counts based on result
  add results to array

printout results
printout counts

to roll die
  generate random value from array of "one" to "six"
  return that value 

现在,只有现在我们才能自信地编写一个JavaScript程序来实现它。我们的想法是做某事&#34;我们将实现为JavaScript 功能

function rollDie() {
  return Math.floor(Math.random() * 6); 
}

var counts = [0, 0, 0, 0, 0, 0];

var results = [];

for (var i = 0; i < 25; i++) {
  var result = rollDie();
  counts[result] = counts[result] + 1;
  results.push(result);
}

console.log(results);  
console.log(counts);    

为简单起见,此代码使用从0到5的数字而不是来自&#34; One&#34;到&#34;六&#34;,但概念是一样的。

答案 2 :(得分:0)

我非常不愿意回答这个问题,但我确实如此 首先看一下OP代码中的错误。

function rnd(dice){//the function is never used
var number=Math.floor(Math.random(dice)*25);//
}

var dice = ["One" , "Two" , "Three" , "Four" , "Five" , "Six"];

length = dice.length;
console.log(length);//good idea to count

for (var i = 0; i < dice.length; i++) {
console.log("i:" + i + "" + dice[i]);//what do you mean
}

没有尝试解决OP中的问题。解决方案来自OP。

&#13;
&#13;
var dice = ["One", "Two", "Three", "Four", "Five", "Six"];//here is a list of names
var stat = {};//here we will collect statistics of dice roll count
for (var i = 0; i < 25; ++i) {//"magic" 25 is the number of rolls
  var rand = Math.floor(Math.random() * 6);//roll to have random [0,5]; if "dice" has more sides then use dice.length instead of "magic" 6
  stat[dice[rand]] = (stat[dice[rand]] || 0) + 1;//now count hits
}
console.log(stat);
&#13;
&#13;
&#13;

我希望你能解释一下你的家庭作业是如何完成的。