【发布时间】:2016-03-17 13:21:17
【问题描述】:
我想知道如何选择任意随机数之间的逻辑,最多 6 个 0 到 8 如果 (0,1) 或 (1,2) 或 (0,2) 被选中,则不应再次选择 0 到 2 中剩余的一个数字 如果 (3, 5) 或 (3,4) 或 (4,5) 被选中,那么剩余的一个数字将不会被选中。
例如,在系列 0 到 8 中,六个数字可以是 (0,1,3,5,6,8) 或 (1,2,4,5,7,8) 或 (0,1,3)或 (4,6) 等
这些点是一种生成点,所以如果所有 0-2 点都被填满,那么路径将被阻止让玩家继续前进。
这就是我所做的,这是一种工作,但我认为它可以在灵活性和性能方面进行改进,
public static int[] getPointsToSpawn(int howManyToSpawn, int tillWhereToSpawn) {
int[] howMany = new int[howManyToSpawn];
List<int> randomCOllected = new List<int>();
for (int i = 0; i < howManyToSpawn; i++) {
int randomPoint = generateUniqueRandomNumber(0, tillWhereToSpawn, randomCOllected);
randomCOllected.Add(randomPoint);
if (randomCOllected.Contains(0) && randomCOllected.Contains(1) ||
randomCOllected.Contains(0) && randomCOllected.Contains(2)
|| randomCOllected.Contains(1) && randomCOllected.Contains(2)
) {
randomCOllected.Add(0);
randomCOllected.Add(1);
randomCOllected.Add(2);
} else if (randomCOllected.Contains(3) && randomCOllected.Contains(4) ||
randomCOllected.Contains(3) && randomCOllected.Contains(5)
|| randomCOllected.Contains(4) && randomCOllected.Contains(5)
) {
randomCOllected.Add(3);
randomCOllected.Add(4);
randomCOllected.Add(5);
} else if (randomCOllected.Contains(6) && randomCOllected.Contains(7) ||
randomCOllected.Contains(7) && randomCOllected.Contains(8)
|| randomCOllected.Contains(6) && randomCOllected.Contains(8)
) {
randomCOllected.Add(6);
randomCOllected.Add(7);
randomCOllected.Add(8);
}
howMany[i] = randomPoint;
}
return howMany;
}
基本上我不想在 0 到 2 或 3 到 5 或 6 到 8 范围之间生成超过 2 个数字。
【问题讨论】:
-
嗯,你可以选择6个不重复的数字,然后排序。
-
您是在问如何在不重复的范围内生成随机数?
-
picks = Enumerable.Range(0,8).OrderBy( r => RNG.Next()).Take(6).ToArray()我认为。有点难以说出你在问什么 -
感谢大家的快速重播,我用迄今为止尝试过的内容编辑了问题,但它似乎可以工作,但会产生开销和性能损失......
-
添加了我为什么要这样做的原因......任何改进的建议都会很高兴听到