2

我是 C# 编程的初学者,我正在尝试随机按钮,当我按下按钮时会出现。(我正在制作一个鼹鼠游戏,但使用按钮作为鼹鼠,我想随机显示最多 2 个按钮)

private void Whack_A_Mole_Load(object sender, EventArgs e)
{
    button1.Visible = false;
    button2.Visible = false;
    button3.Visible = false;
    button4.Visible = false;
    button5.Visible = false;
    button6.Visible = false;
    button7.Visible = false;
    button8.Visible = false;
    button9.Visible = false;
}

private void button10_Click(object sender, EventArgs e)
{
    timer1.Enabled = true;
    timer2.Enabled = false;
    button10.Enabled = false;
    btnStop.Enabled = true;
    button1.Image =(Properties.Resources.Mole);
    Random random = new Random();
    var randombutton = random.Next(1, 2);
}

这就是我所做的

4

3 回答 3

5

处理此问题的一种简单方法是使用按钮列表。如果您将所有按钮放在一个列表中,则可以通过索引访问它们,从而无需大量 if else 或 switch case 语句。

在您的表单中声明 a Random,然后使用您的表单对其进行初始化。对按钮列表执行相同的操作,并将您的按钮添加到其中。这样,您只需几行代码即可更改所有按钮。这是一个例子:

Random r;
List<Button> buttons;   

private void Whack_A_Mole_Load(object sender, EventArgs e)
{
    r = new Random();

    buttons = new List<Button> 
    { 
        button1, 
        button2, 
        button3, 
        button4, 
        button5, 
        button6, 
        button7, 
        button8,
        button9 
    };

    foreach (Button button in buttons)
        button.Visible = false;
}

然后,要显示一个按钮,您可以使用以下内容:

private void DisplayButton()
{
    //Ensures that the button that becomes visible isn't the other one already displayed
    int index;
    do
    {
        index = r.Next(0,9);
    } while(buttons[index].Visible);
    buttons[index].Visible = true;
}

那里的循环将确保显示一个新按钮,但你应该小心它。它仅用于显示两个按钮。如果您在没有隐藏任何按钮的情况下多次调用 DisplayButton 并增加了游戏的大小,则效率可能会很低,因为它会选择一个已经更频繁地可见的按钮。它适用于您规定的条件,但我建议不要在显着扩大的情况下使用它。

于 2013-05-31T16:56:35.667 回答
0

改变

random.Next(1, 2);  // this will generate only random number 1

random.Next(1, 10);

用于生成 1 到 9 之间的随机数,然后使用条件(Switch 语句)来显示特定按钮。

并且可能是Control.ControlCollection.Find方法也将有助于(如果您已为模式中的按钮分配名称)找到要显示的确切控件而不是 switch 语句。

var randomValue = random.Next(1, 9);
Button btn = this.Controls.Find("button"+randomValue, true).FirstOrDefault() as Button;
btn.Visible=true; 
于 2013-05-31T16:50:59.897 回答
0

试试这个:

private void TriggerRandomButton()
{
    var randomButton = button1.Parent.Controls.Cast<Control>().FirstOrDefault(btn => btn.Name == "button" + new Random().Next(1, 10));

    //extra check to be sure we don't create an nullpointer exception.
    if (randomButton == null)
        return;

    randomButton.Visible = true;
}

它基本上从父控件中获取一个随机按钮button1button1.Parent理想情况下应该用实际的容器代替。

于 2013-05-31T17:06:49.950 回答