【问题标题】:Tic Tac Toe game winforms井字游戏winforms
【发布时间】:2015-09-02 00:15:57
【问题描述】:

我知道这是可行的,但有更好的方法吗?

    Button clicked = (Button)sender;
        if (turn)
        {
            clicked.Text = player;
        }
        else {
            clicked.Text = cpu;
        }

        turn = !turn;

【问题讨论】:

  • 那些按钮永远不会添加到您的表单中,所以我不知道您单击的是哪个按钮,但它不是您数组中的按钮。你的 InitializeComponent() 方法发生了什么?

标签: c# winforms tic-tac-toe


【解决方案1】:

当您单击一个按钮时,它的单击事件处理程序将被执行。这将调用您的 tictactoe 函数。在那里,您的代码从上到下执行,它首先检查数组中第一个按钮的.Text 并对其进行调整。然后你的 If..Else 块结束。在下一次单击时重复此操作。这会导致这种行为。

相反,您应该将 sender 对象强制转换为 Button 并且只处理这个。不需要整个 If..Else 块。 Sender 是引发事件的对象(这里:被点击的按钮)。

public void tictactoe(object sender, EventArgs e)
{
    Button b = (Button)sender;
    if (string.IsNullOrEmpty(b.Text)) {
        b.Text = player;
    }
}

之后,您还需要将playerX 翻转为O,反之亦然,但我认为您会知道如何做到这一点。 :-)

【讨论】:

  • 我不确定这是如何工作的。我添加了这个并且它有效,但只有当我单击按钮时,从单击类型转换的发件人会更改文本,但如果单击,程序再次将 x 更改为 o
  • 我已经做出改变以进一步解释所说的内容
  • @june1992 如果您在 Click 事件中也将 .Enabled 属性设置为 False,则最好。此外,不要完全改变你原来的问题,否则答案就没有意义了。打开另一个问题,或在底部附加新数据。
  • @june1992 您还从我的答案中删除了string.IsNullOrEmpty(b.Text) 您的实施。这当然很重要。
【解决方案2】:

把tictactoe改成这样:

public void tictactoe(object sender, EventArgs e)
{
    var button = (Button)sender;
    if (button.Text == "")
        button.Text = player;
}

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 2015-01-08
    • 1970-01-01
    • 2014-04-12
    • 2015-12-06
    • 1970-01-01
    相关资源
    最近更新 更多