Snake game - генератор случайных чисел для плитки еды - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь сделать игру Snake со светодиодом 16x16, используя Arduino (C ++). Мне нужно назначить случайный индекс сетки для следующей плитки еды. У меня есть список индексов, которые заняты змеей (snakeSquares).

Итак, я подумал, что мне нужно составить список потенциальных foodSquares. Затем я могу выбрать случайный индекс из этого списка и использовать его значение для моего следующего квадрата еды.

У меня есть некоторые идеи для этого, но они кажутся немного неуклюжими, поэтому я искал обратную связь. Я использую библиотеку Arduino LinkedList.h для своих списков вместо stdio.h (и random () вместо rand ()):

  1. Создайте список (foodSquares), содержащий целые числа [0, 255], чтобы индексы соответствовали значениям в списке (я не знаю быстрого способа сделать это, возможно, потребуется использовать цикл a).

  2. При создании списка snakeSquares установите foodSquares [i] = -1. После этого переберите foodSquares и удалите все элементы, равные -1. ​​

  3. Затем сгенерируйте случайное число randNum из [0, foodSquares.size () - 1] и сделайте следующий квадрат пищи, равный foodSquares [randNum].

Так что я думаю, мой вопрос, будет ли этот подход работать, и есть ли лучший способ сделать это?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Я не мог полностью понять ваш вопрос, поскольку некоторые из этих моментов являются довольно пустой тратой процессорного времени (, т.е. , пункты 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. Это одна из змей-квадратов? Если это так, вернемся к одному, а к третьему.
  3. Это то же самое, что и ваша третья точка, используйте это случайное число , чтобы установить положение пищи в food_square (food_square[random_number] = some_value).
0 голосов
/ 06 мая 2018

Потенциальный подход, который не требует больше списков:

  • Рассчитать случайное целое число, представляющее количество шагов.
  • Возьмите в качестве стартовой плитки голову или хвост.
  • За каждый шаг перемещайтесь случайным образом в свободную соседнюю клетку.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...