使用c#和ASP.NET的XO游戏
我对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
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=0仅当
IsPostBack
为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)只要想想每次按下按钮时页面加载代码就会执行。从服务器的角度来看,每个请求都是新的、新的。如果你不做任何事情来保持状态(比如会话),状态完整的代码将无法工作。是的,一位朋友刚刚告诉了我确切的事情。谢谢你,威克托!