蛇游戏 - 食物瓷砖的随机数发生器

时间:2018-05-05 20:48:24

标签: c++ arduino

我正在尝试使用Arduino(C ++)制作一个16x16 LED Snake游戏。 我需要为下一个食物块分配一个随机网格索引。 我所拥有的是蛇占据的指数列表(snakeSquares)。

所以,我的想法是我需要生成一个潜在的foodSquares列表。然后我可以从该列表中选择一个随机索引,并将其中的值用于我的下一个食物广场。

我对此有一些想法,但它们看起来很笨重,所以我一直在寻找一些反馈。我使用Arduino LinkedList.h库代替stdio.h(和random()代替rand()):

  1. 生成一个包含整数[0,255]的列表(foodSquares),以便索引对应列表中的值(我不知道快速执行此操作的方法,可能需要使用一个for循环)。

  2. 生成snakeSquares列表时,设置foodSquares [i] = -1。然后,遍历foodSquares并删除所有等于-1的元素。

  3. 然后,从[0,foodSquares.size() - 1]生成一个随机数randNum,并使下一个食物平方指数等于foodSquares [randNum]。

  4. 所以我想我的问题是,这种方法是否有效,是否有更好的方法呢?

    感谢。

2 个答案:

答案 0 :(得分:1)

不需要更多列表的潜在方法:

  • 计算表示步数的随机整数。
  • 将头部或尾部作为起始瓷砖。
  • 每个步骤随机移动相邻的瓷砖。

答案 1 :(得分:0)

我无法完全理解你的问题,因为其中一些点非常浪费处理器时间(第1点和第2点)。但是,第一点可以很容易地在n比例复杂度中解决如下:

for (uint8_t i = 0; i < 256; i++) {
    // assuming there is a list of food_squares
    food_squares[i] = i;
}

然后到第二点,你必须将每个food_square设置为-1,为了什么?无论如何。你可以实现这一点的方法就像VTT所说的那样,我将进一步描述它:

  1. [0..255]之间取一个随机数。
  2. 是不是一个snake_squares?如果是这样,回到一个,否则,转到三个。
  3. 这与您的第三点相同,使用此随机数food_squarefood_square[random_number] = some_value)中设置食物的位置。