Попытка создать спрайты в случайном x месте без наложения в c - PullRequest
0 голосов
/ 07 сентября 2018

Поэтому я пытаюсь создать уровень платформ, используя спрайты, каждая из которых создается случайным образом вдоль экрана в одном и том же месте у. Хотя проблема, с которой я сталкиваюсь, заключается в том, что, когда они создаются случайным образом, они постоянно перекрываются, и я не могу найти способ создать их так, чтобы они не могли перекрываться.

Моя программа в настоящее время создает спрайт в случайном месте x, затем цикл for создает указанное количество платформ. Мой вопрос заключается в том, что если бы я хотел, чтобы они перекрывали друг друга, мне нужно попытаться установить ограничение во время произвольной спецификации x или во время цикла for, который создает несколько спрайтов.

Новичок в c, так что он действительно застрял на логике этого, любая помощь будет оценена.

1 Ответ

0 голосов
/ 07 сентября 2018

(вы задали это как вопрос по математике / алгоритму, поэтому я дам математический ответ, а не готовую программу на C :), наслаждайтесь кодированием - и задайте здесь вопрос, если вы застряли)

Проще говоря, вы хотите сгенерировать список из M чисел (x позиций для M платформ, в вашем случае) в диапазоне 0..N-1, чтобы все эти числа были разными. Очевидно, М <Н. </p>

Для первого у вас есть N возможных вариантов, для второго у вас есть N-1 выбор (один из которых взят), для третьего N-2 и т. Д.

Есть много способов сделать это, но вот простой:

заполнить массив из N целых чисел числами 0..N-1 (чтобы a[i] == i для всех значений i).

Теперь установите n = N-1 и сделайте это M раз:

  • взять случайное число r в диапазоне (0..n) и использовать [r] в качестве следующего выбора
  • удалить [r] из массива, сдвинув все от [r + 1] до конца на одну позицию.
  • декрет n (n--)

(каждый раз цикл будет выбирать из списка, в котором все меньше и меньше чисел, причем именно те, которые были выбраны до исключения)

...