使用c#和ASP.NET的XO游戏

使用c#和ASP.NET的XO游戏,c#,asp.net,C#,Asp.net,我对C#(和编程都是新手),我正试图用ASP.NET编写一个“XO”游戏 在第一个玩家点击按钮后,我遇到了一个问题 旋转不会切换,第一次旋转后的任何单击都不会执行任何操作。我的代码有什么问题 public partial class GamePage : System.Web.UI.Page { Player player1 = new Player(); Player player2 = new Player(); int turn; protected vo

我对C#(和编程都是新手),我正试图用ASP.NET编写一个“XO”游戏 在第一个玩家点击按钮后,我遇到了一个问题

旋转不会切换,第一次旋转后的任何单击都不会执行任何操作。我的代码有什么问题

public partial class GamePage : System.Web.UI.Page
{
    Player player1 = new Player();
    Player player2 = new Player();
    int turn;

    protected void Page_Load(object sender, EventArgs e)
    {

        this.turn = 0;
        if (!IsPostBack)
        {
            Label1.Visible = true;
        }

        if (turn == 0)
        {
            Label1.Text = (Session["player1"] as Player).getname();
        }
        else
        {
            Label1.Text = (Session["player2"] as Player).getname();
        }

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Session["p1"] = player1;
        Session["p2"] = player2;
        player1.setsymbol("X");
        player2.setsymbol("O");

        if (Button1.Text == "")
        {
            if (turn == 0)
            {
                Button1.Text = player1.getsymbol();
                Label1.Text = (Session["player2"] as Player).getname();
                turn = 1;
            }
            else
            {
                Button1.Text = player2.getsymbol();
                Label1.Text = (Session["player1"] as Player).getname();
                turn = 0;
            }
        }
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        if (Button2.Text == "")
        {
            if (turn == 0)
            {
                Button2.Text = player1.getsymbol();
                Label1.Text = (Session["player2"] as Player).getname();
                turn = 1;
            }
            else
            {
                Button2.Text = player2.getsymbol();
                Label1.Text = (Session["player1"] as Player).getname();
                turn = 0;
            }
        }
    }

    protected void Button3_Click(object sender, EventArgs e)
    {
        if (Button3.Text == "")
        {
            if (turn == 0)
            {
                Button3.Text = player1.getsymbol();
                Label1.Text = (Session["player2"] as Player).getname();
                turn = 1;
            }
            else
            {
                Button3.Text = player2.getsymbol();
                Label1.Text = (Session["player1"] as Player).getname();
                turn = 0;
            }
        }
    }

//这是一个例子-我从按钮1到按钮9有相同的行。turn=0IsPostBack为false时,才应执行code>。如果在
页面加载中
将此行移到
内部

每次页面呈现时,您都将
页面加载中
设置为0。因为
Page\u Load
是在每次页面加载时执行的,所以不会得到任何其他值,这可能是这里的主要问题

要正确支持这些变量的生存期,这些变量应在连续请求时保持值,请将它们包装在简单属性中:

public int turn
{
    get
    {
        if ( Session["turn"] != null )
             return (int)Session["turn"];
        return 0; // default value if not set before
    }
    set
    {
        Session["turn"] = value;
    }
}

这样,每次您在代码中引用
turn
,将其设置为0或1或比较值为0或1时,您都会引用相同的值,可能是在以前的请求中存储的。

每次在页面加载时设置turn=0,这可能是问题?您的程序路径上存在“逻辑”问题,你需要一步一步地调试并解决它。im在每次加载页面时设置turn=0,因为我希望每个游戏都从player1(X)开始。它不起作用。。正如我所说的,第一次点击确实有效,我在按钮上得到一个x,玩家的名字变为第二个。这就是它停止工作的地方,谢谢!!您能告诉我,将“this.turn=0;”放在if(!ispostback)中的这个解决方案有什么区别吗??(当我这样做时,整个表都被X填满了,就像值总是=0)只要想想每次按下按钮时页面加载代码就会执行。从服务器的角度来看,每个请求都是新的、新的。如果你不做任何事情来保持状态(比如会话),状态完整的代码将无法工作。是的,一位朋友刚刚告诉了我确切的事情。谢谢你,威克托!