好的,我正在WinForms中编写一个Minesweeper应用程序.这是我的第一个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)'
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎是一个需要解决的简单问题,但我无法理解我的生活.
示例代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
注意:如果位置数量很大,您可以使用位向量优化空间算法.我会留下这个练习.
| 归档时间: |
|
| 查看次数: |
821 次 |
| 最近记录: |