gpt4 book ai didi

c# - c#中用于扫雷游戏的非重复随机数

转载 作者:行者123 更新时间:2023-11-30 21:07:40 26 4
gpt4 key购买 nike

我正在开发一个尺寸为 (8 x 8) 的扫雷游戏。难度级别会增加/减少网格上的地雷数量。

我使用随机类(设置了最小值、最大值;)来生成随机单元格编号。我面临的问题是,随机对象不断重复相同的数字。我试图通过维护本地列表来解决这个问题我存储生成的唯一随机数的地方。下次我调用 Next() 时,我会根据本地列表检查它,看看它是否已经存在。如果该数字已经存在,我将继续调用 Next() 直到我得到一个唯一且不存在于列表中的新数字。但这本身并不是一个好的解决方案,因为有时生成新列表需要花费大量时间。

有什么建议吗

最佳答案

即使您使用相同的随机数生成器,也可能出现重复值。

避免这种情况的一种方法是生成可能值的列表,并使用生成的随机数来访问此列表中的值(用作索引)并在找到放置地雷的位置时减少此列表。

对于 8 X 8 的例子,你有 64 个可能的位置

 List<int> possibleValues = new List<int>();
for (int i = 0; i < 64; i++)
{
possibleValues[i] = i;
}

List<int> result = new List<int>();

Random r = new Random();
int numberOfMines = 50; //say you want to put 50 mines there

for (int i = 0; i < numberOfMines; i++)
{
int indice = r.Next(possibleValues.Count);

int value = possibleValues[indice];

possibleValues.Remove(value);
result.Add(value);
}

关于c# - c#中用于扫雷游戏的非重复随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10246475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com