随机化3x6表中5个元素的位置

Tal*_*ios 0 arrays delphi random

我有5个元素,我想分配到3行高,6列宽表没有重叠.

位置由[x,y]坐标指定.

这些元素的位置随着Timer组件的每个滴答而变化.

元素属于TImage类型.

我想过有一个点数组,如果在逐步分配每个元素的值的过程中选择了一个点,那么我不确定数组的工作方式.

Dav*_*nan 5

你要做的是从有限集中均匀地采样,而不是替换.

  1. 创建一个包含18个可能位置的数组.
  2. 执行Fisher-Yates随机播放.
  3. 在洗牌后占据前五个位置.

由于Fisher-Yates shuffle确定第一次迭代后的第一个值,第二个值和第二个迭代,依此类推,您可以在五次迭代后中止shuffle.这种变化被称为部分Fisher-Yates shuffle.从18中选择5时的性能提升并不是很好,但想象一下从更大的人口中选择.

对于您的18个位置,包含前18个整数的数组将执行.然后它是一个简单的使用divmod映射到行和列.