首页 > 解决方案 > 尝试在随机 x 位置创建精灵而不在 c 中重叠

问题描述

所以我正在尝试使用精灵创建一个平台级别,它们中的每一个都是沿着屏幕在相同的 y 位置随机创建的。虽然,我遇到的问题是,当它们随机创建时,它们会不断重叠,我似乎无法找到一种方法来创建它们,以免它们重叠。

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

c 的新手,所以真的坚持这个逻辑,任何帮助将不胜感激。

标签: csprite

解决方案


(你把它作为一个数学/算法问题,所以我将提供一个数学答案,而不是一个现成的 C 程序 :),享受编码 - 如果你遇到困难,请在这里提问)

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

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

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

用数字 0..N-1 填充 N 个整数的数组(这样a[i] == i对于 的所有值i)。

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

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

(每次循环都会从一个数字越来越少的列表中进行选择,而这些数字正是在被排除之前被挑选出来的)


推荐阅读