如何将值分配给数组中的随机位置?

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&lt;int&gt;;随机选择一个条目并将其从列表中删除;重复直到你有 10 个。- 或者创建一个 HashSet&lt;int&gt; 并(尝试)插入随机数(在索引范围内)直到你有 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; 

【讨论】:

啊,这就是我所追求的。非常感谢您的帮助。 如果对您有帮助,请接受我的回答

以上是关于如何将值分配给数组中的随机位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组中的类随机分配给for循环中创建的元素

如何将数组中的类随机分配给for循环中创建的元素

如何将值向量分配给R中igraph中的顶点标签?

将字符串中的值分配给变量数组

如何正确地将值分配给数组(结构类型)元素?

熊猫,我怎样才能避免使用 iterrow (如何根据来自另一个数据帧的值将值分配给数据帧中的新列)