【问题标题】:I'm making a tic tac toe game but it just puts X我正在制作井字游戏,但它只是让 X
【发布时间】:2021-03-15 12:51:14
【问题描述】:

我在做一个井字游戏,但它只是放 X。我在网络表单上做它而不使用母版页

 bool turn = true;
        int turn_count = 0;
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void bclick(object sender, EventArgs e)
        {
            Button b = (Button)sender;
            if (turn)
            {
                b.Text = "X";
            }
            else
            {
                b.Text = "O";
            }
            turn = !turn;
            b.Enabled = false;
        }
    }
}  

【问题讨论】:

  • 提交时您的页面正在回发。它创建了一个新的页面实例,turn 将始终为true,因为它是一个新实例(页面是一个类)。您需要在回发中存储turn,就像在 Session 变量中一样。而且,网络表单已经死了。
  • 我明白谢谢。这是我的作业。我必须使用网络表单。 @Crowcoder
  • 是的,我也明白。 WebForms 是一种常见的教学方式,对学生来说是一种极大的伤害。
  • 顺便说一句,我写了一个井字游戏引擎,以防你发现它有什么用处。它是为演示而构建的,并没有完全打磨,但here it is
  • 我还没有找到解决问题的方法。有没有人可以帮忙

标签: c# webforms tic-tac-toe


【解决方案1】:

类似的东西。将turn 存储在会话中。请注意,turn_count 也会有同样的问题。我真的不明白你用布尔值去哪里。如果您希望两个不同的玩家在两个浏览器上玩这个游戏,那么您需要做更多的工作来跟踪游戏状态以及哪些玩家在哪些游戏实例中处于活动状态。

protected void bclick(object sender, EventArgs e)
{
    string whosTurn = "X";

    if (!string.IsNullOrEmpty(Session["turn"] as string))
    {
        whosTurn = Session["turn"].ToString();
    }

    if(whosTurn == "X")
    {
        Session["turn"] = "O";
    }
    else
    {
        Session["turn"] = "X";
    }

    Button b = (Button)sender;
    
    b.Text = whosTurn;

    b.Enabled = false;
}

【讨论】:

  • 非常感谢我明白怎么解决了
  • 如果你已经实现了我的代码,你可能会遇到异常,因为turn 在我的示例中不是布尔值。
【解决方案2】:

您的代码的问题是您的页面正在回发,并且它的初始化每次都变为 true。 你应该为此使用会话。例如里面的Page_Load方法使用:

Session["Turn"] = true;

内部按钮相应地设置为真或假。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2019-11-24
    相关资源
    最近更新 更多