我是C#编程的初学者,我正在尝试随机的按钮,当我按下一个按钮时就会显示出来。(我正在制作一个whack a mole游戏,但使用按钮作为mole,我想随机最多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);
}这就是我要做的
发布于 2013-06-01 00:56:36
处理此问题的一种简单方法是使用按钮列表。如果您将所有按钮放在一个列表中,则可以按索引访问它们,从而消除了对大量if else或switch case语句的需要。
在窗体中声明一个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-06-01 00:51:00
变化
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-06-01 01:06:50
试试这个:
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;
}它基本上从父控件button1中随机获得一个按钮。理想情况下,button1.Parent应该被实际的容器所取代。
https://stackoverflow.com/questions/16862098
复制相似问题