如何将值分配给数组中的随机位置?
Posted
技术标签:
【中文标题】如何将值分配给数组中的随机位置?【英文标题】:How do you assign a value to a random position in an array? 【发布时间】:2019-10-01 04:54:01 【问题描述】:我正在尝试制作扫雷游戏,我想在按钮阵列上随机放置炸弹
到目前为止,我的按钮数组代码如下所示:
我想要一组按钮,只需更改其中 10 个按钮的文本,随机选择以显示 B 或炸弹的背景图像。
int horizontal = 270;
int vertical = 150;
Button[] buttonArray = new Button[81];
for (int i = 0; i < buttonArray.Length; i++)
buttonArray[i] = new Button();
buttonArray[i].Size = new Size(20, 20);
buttonArray[i].Location = new Point(horizontal, vertical);
if ((i == 8) || (i == 17) || (i == 26) || (i == 35) || (i == 53) || (i == 62) || (i == 71))
vertical = 150;
horizontal = horizontal + 20;
else
vertical = vertical + 20;
this.Controls.Add(buttonArray[i]);
【问题讨论】:
作为一个想法:创建第二个数组(int[]
),其中包含按钮数组的所有索引。随机打乱第二个数组(Fisher-Yates 或其他)并获取前 10 个条目。使用这些条目的值作为按钮数组的索引。更改这些索引处的特定按钮。
你知道如何在一个范围内随机选择10个数字吗?
其他方法可能是:将所有索引设为List<int>
;随机选择一个条目并将其从列表中删除;重复直到你有 10 个。- 或者创建一个 HashSet<int>
并(尝试)插入随机数(在索引范围内)直到你有 10 个。
【参考方案1】:
这是一个带有错误Button
类的演示代码,现在你必须将它应用到你的代码中:
class Program
private static Random Random = new Random();
static void Main(string[] args)
Button[] buttons = new Button[81];
//Code to initialize Buttons
int[] indexes = GetNRandomIndexesBetweenInts(0, buttons.Length, 10);
foreach (int index in indexes)
buttons[index].Text = "B";
private static int[] GetNRandomIndexesBetweenInts(int min, int maxPlusOne, int nRandom)
List<int> indexes = Enumerable.Range(min, maxPlusOne).ToList();
List<int> pickedIndexes = new List<int>();
for (int i = 0; i < nRandom; i++)
int index = indexes[Random.Next(0, indexes.Count)];
pickedIndexes.Add(index);
indexes.Remove(index);
return pickedIndexes.ToArray();
public class Button
public string Text get; set;
【讨论】:
啊,这就是我所追求的。非常感谢您的帮助。 如果对您有帮助,请接受我的回答以上是关于如何将值分配给数组中的随机位置?的主要内容,如果未能解决你的问题,请参考以下文章