从列表中删除随机项C#

时间:2015-02-13 11:04:10

标签: c# list matching

我在这里的第一个问题。 我正在尝试使用按钮和列表制作匹配游戏。我使用列表用字母表示图像,当使用字母时,它应该从列表中删除该字母,减少列表中的项目数。但是我得到错误索引超出范围。任何帮助将不胜感激。 提前致谢, 里斯

 Random random = new Random();

    List<string> icons = new List<string>() 
{ 
    "!", "!", "N", "N", ",", ",", "k", "k",
    "b", "b", "v", "v", "w", "w", "z", "z"
};


    Button[,] btn = new Button[4, 4];
    //Random r = new Random();            // Random variable
    public GameWindow()
    {
        InitializeComponent();

        for (int x = 0; x < 4; x++)
        {

            for (int y = 0; y < 4; y++)
            {

                btn[x, y] = new Button();
                btn[x, y].SetBounds(80 * x, 80 * y, 80, 80);
                btn[x, y].FlatAppearance.BorderSize = 1;
                btn[x, y].Click += new EventHandler(this.btnEvent_Click);
                btn[x, y].BackColor = System.Drawing.ColorTranslator.FromHtml("#35014F");
                Controls.Add(btn[x, y]);
                btn[x, y].Font = new Font("Webdings", 50, FontStyle.Regular);
                AssignIconsToButtons(btn[x, y]);




            }
        }

    }


    void AssignIconsToButtons(Button ButtonToAssign)
    {
        foreach (Button control in this.Controls)
        {

            Button iconButton = control as Button;

            if (iconButton != null)
            {


                int randomNumber = random.Next(icons.Count);
                //MessageBox.Show(Convert.ToString(randomNumber));
                iconButton.Text = icons[randomNumber];
                //iconButton.ForeColor = iconButton.BackColor;
                icons.RemoveAt(randomNumber);

            }

3 个答案:

答案 0 :(得分:1)

您的随机数生成应该是:

int randomNumber = random.Next(icons.Count-1);

这是因为你的数组从0开始,count会告诉你列表中的对象数。

答案 1 :(得分:1)

尝试这样:(Random.Next(Int32, Int32)

if (iconButton != null && icons.Count > 0)
{
    int randomNumber = random.Next(0, icons.Count);
    //MessageBox.Show(Convert.ToString(randomNumber));
    iconButton.Text = icons[randomNumber];
    //iconButton.ForeColor = iconButton.BackColor;
    icons.RemoveAt(randomNumber)
}

答案 2 :(得分:0)

感谢NeverHopeless工作,现在我只有四张图片显示在我身上 编码的乐趣,而不是16,谢谢你的帮助。

  if (iconButton != null && icons.Count > 0)
     {


int randomNumber = random.Next(0, icons.Count-1);
//MessageBox.Show(Convert.ToString(randomNumber));
iconButton.Text = icons[randomNumber];
//iconButton.ForeColor = iconButton.BackColor;
icons.RemoveAt(randomNumber)
  }