【问题标题】:Select random number in a series选择序列中的随机数
【发布时间】: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 =&gt; RNG.Next()).Take(6).ToArray() 我认为。有点难以说出你在问什么
  • 感谢大家的快速重播,我用迄今为止尝试过的内容编辑了问题,但它似乎可以工作,但会产生开销和性能损失......
  • 添加了我为什么要这样做的原因......任何改进的建议都会很高兴听到

标签: c# math random logic


【解决方案1】:

这很简单。你需要三个链:

  1. 在 0 到 2 之间选择两个随机数
  2. 在 3 到 5 之间选择两个随机数
  3. 在 6 到 8 之间选择两个随机数

您可以查看这篇文章以查看代码示例: How do I generate a random int number in C#?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2015-07-01
    • 2020-10-13
    • 2016-03-26
    • 2021-12-15
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多