我正在制作一款Super Tac Toe游戏(它基本上是一个3x3网格的tic tac toe board)
其中电路板由3x3按钮块组成,具有以下单击方法
private void buttonI_Click(object sender, EventArgs e)
{
if(jar == true)
{
buttonI.Text = "X";
}
if(jar == false)
{
buttonI.text = "O";
}
jar = !(jar)
}
其中jar是一个布尔变量,用于跟踪每个玩家的回合。我使用Python脚本批量生成1 <= I <= 81
的代码但是...只有我的按钮1-9具有正确的功能。这些按钮是使用Visual Studio IDE手动构建的(我只是双击它们来创建按钮单击方法)但我看到这些按钮和我批量生成代码的按钮之间的语法完全没有区别。
一些帮助和清晰的解释会很棒!
答案 0 :(得分:1)
避免“批量生成代码”...如果以后需要更改功能,则必须更改81种方法。那是不可维护的。
那么,该怎么办?
首先,我甚至不会手动将每个按钮放入窗口。我会让我的代码为我添加每个按钮。现在,您没有说明您是在做WinForms
还是WPF
。所以我假设WPF
,因为它更新,我认为好多了。
以编程方式添加按钮
使用名为Window
的{{1}}创建Grid
。然后绑定到窗口的gMain
事件:
Initialize
现在我们已经设置了private void handleWindowInitialized(object sender, EventArgs e)
{
// Add 3 rows and 3 columns.
for (int i = 0; i < 3; i++)
{
gMain.ColumnDefinitions.Add(new ColumnDefinition());
gMain.RowDefinitions.Add(new RowDefinition());
}
// Add button to each cell.
for(int row=0; row<3; row++)
for (int column = 0; column < 3; column++)
createButton(row, column);
}
,让我们看看方法gMain
。
构建按钮
createButton()
够简单吗?我们只需创建一个private void createButton(int row, int column)
{
var button = new Button();
// Add to gMain
gMain.Children.Add(button);
// Place the button in the correct cell.
Grid.SetRow(button, row);
Grid.SetColumn(button, column);
// Tie to the click event.
button.Click += handleButtonClick;
}
,将其添加到Button
,放入正确的单元格,然后绑定到gMain
事件。现在让我们看一下事件处理程序。
事件处理程序
Click
请注意,我们能够告诉列和行...从这里你应该能够做你需要的任何逻辑。这很好,因为那时你不需要一堆不同的方法。
答案 1 :(得分:0)
相反,您可以为按钮设置ID,并为所有按钮设置相同的onClick事件
定义9个按钮,每个按钮的ID为0..8 因此,每个按钮都会调用
private void anyButton_Click(object sender, EventArgs e)
{
// sender is your button! you can use it's .id or anything alike
if(jar == true)
{
buttonI.Text = "X";
}
if(jar == false)
{
buttonI.text = "O";
}
jar = !(jar)
}