gpt4 book ai didi

c# - 如何生成两个随机数 X 和 Y,并确保它们永不重复?

转载 作者:太空狗 更新时间:2023-10-30 00:19:05 27 4
gpt4 key购买 nike

好的,所以我正在 WinForms 中编写扫雷应用程序。这是我的第一个 C# 应用程序,所以这是一个巨大的学习过程。我想随机生成两个数字以放入两个单独的数组 mineX 和 mineY。这两个数组是所有地雷在棋盘上放置位置的坐标。

这就是问题所在,我想确保当它随机生成这些数字时,X、Y 永远不会相同。我做过研究,知道如何生成一个数字并使每个数字都独一无二。我的问题是我希望两个随机数的组合是唯一的。

这是我的 placeMines 方法代码。

    private void placeMines()
{
Random rnd = new Random();

for (int i = 0; i < MINE_COUNT; i++)
{
bombX[i] = rnd.Next(0, BOARD_X);
bombY[i] = rnd.Next(0, BOARD_Y)'
}
}

这似乎是一个解决起来很简单的问题,但我一辈子都弄不明白。

最佳答案

  1. 创建可能的地雷位置列表。
  2. 从列表中随机选择一个项目,删除该项目。
  3. 重复 2 直到有足够的地雷。

示例代码:

const int BOARD_X = 10;
const int BOARD_Y = 6;
const int MINE_COUNT = 30;

List<int> positions = Enumerable.Range(0, BOARD_X * BOARD_Y).ToList();
var rnd = new Random();
for (int i = 0; i < MINE_COUNT; i++) {
int index = rnd.Next(positions.Count);
int pos = positions[index];
positions.RemoveAt(index);
int x = pos % BOARD_X, y = pos / BOARD_X;
Console.WriteLine("({0}, {1})", x, y);
}

注意:如果位置数很大,可以使用位向量优化空间算法。我将把它留作练习。

关于c# - 如何生成两个随机数 X 和 Y,并确保它们永不重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25203320/

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