尝试在x的随机位置创建精灵,而在c中不重叠

时间:2018-09-06 23:45:50

标签: c sprite

因此,我尝试使用精灵创建一个级别的平台,每个平台都是在屏幕上的相同y位置随机创建的。虽然,我遇到的问题是,当它们随机创建时,它们会不断重叠,而我似乎找不到找到创建它们的方式,因此它们不会重叠。

我的程序当前在x的随机位置创建一个sprite,然后for循环创建指定数量的平台。我的问题是,是否要阻止它们重叠,是否需要在随机x规范期间或在创建多个sprite的for循环期间尝试进行约束。

c的新手,使它真正停留在这一逻辑上,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

(您将其作为数学/算法问题,所以我将提供数学答案,而不是现成的C程序:),请对其进行编码-并在此处提出问题,以解决问题)

简单地说,您想要生成一个范围为0..N-1的M个数字(在您的情况下为M个平台的x个位置)的列表,以便这些数字都不同。显然是M

对于第一个,您有N个可能的选择,对于第二个,您有N-1个选择(已被选择),对于第三个N-2,等等。

有很多方法可以做到这一点,但这是一个简单的方法:

在N个整数上填充一个数组,数字为0..N-1(因此a[i] == i用于i的所有值)。

现在,设置n = N-1并执行M次:

  • 取(0..n)范围内的随机数r,然后使用a [r]作为下一个选择
  • 通过将所有内容从a [r + 1]移到末尾一个位置,从数组中删除a [r]。
  • 减少n(n--

(每次循环都会从数量越来越少的列表中进行选择,而列表中的数字恰好是在被剔除之前被选中的)