使用 QueryString 跟踪 Turn
Keeping track of Turn By Using QueryString
我正在尝试制作游戏;当我单击一个按钮时,我需要使用查询字符串转到另一个页面,我需要知道单击了哪个按钮 (Button1) 以及单击了多少次 (Turn)。这是我的代码:
int Turn = 0;
protected void Button1_Click(object sender, EventArgs e)
{
string clickedButton = "Button1";
Turn = Turn ++;
Response.Redirect(string.Format("TheGame.aspx?button={0}&turn={1}", clickedButton , Turn));
}
但问题是,我永远无法更改轮到,它始终保持为 0。我该怎么做?
两个原因。
首先,post-修复递增运算符 returns 递增之前的值,因此 Turn++
将 Turn
递增到 1,然后 return s 0。然后将该值赋回 Turn
,从而撤消增量。只需使用
Turn++
其次,Turn
正在 Page
-class 级别声明。每次加载页面时,都会构建此页面的一个新实例,并使用一个初始化为零的新 Turn
。
您需要在您的解决方案中添加某种回合跟踪服务 -class,以跟踪用户在游戏生命周期内的回合数。您还需要确定想法 "lifetime of the game" 如何映射到服务器端的抽象。
您可以像现在一样继续使用查询字符串,但您不应启动页面级变量,而应只使用局部变量、递增和 return 新查询的新值细绳。另一种选择是会话状态。
那是因为每当创建新页面时 Turn
都设置为 0。
您应该将 Turn
存储在 Session 中并像这样使用它:
public int Turn
{
get
{
if (Session["Turn"] == null)
Session["Turn"]= 0;
return (int)Session["Turn"];
}
set
{
Session["Turn"] = value;
}
}
“++”运算符递增它所附加的变量。当像这样用作后缀时,它会检索现有值,然后递增变量。当用作前缀时,它会递增变量,然后检索值。在这种情况下,它检索值“0”,然后将 Turn 递增到“1”。但是,赋值随后将 Turn 的值更改回“0”。
要么单独使用 Turn++
,要么使用我会做的赋值 Turn = Turn + 1
。
protected void Button1_Click(object sender, EventArgs e)
{
string clickedButton = "Button1";
Turn = Turn + 1;
Response.Redirect(string.Format("TheGame.aspx?button={0}&turn={1}",
clickedButton , Turn));
}
“++”运算符经常这样使用:
protected void Button1_Click(object sender, EventArgs e)
{
string clickedButton = "Button1";
Response.Redirect(string.Format("TheGame.aspx?button={0}&turn={1}",
clickedButton , ++Turn));
}
请注意,我使用“++”作为前缀,因此用于格式化字符串的值将是 post-增量值“1”,而不是预增量值“0” .
最简单的方法就是让变量变成静态的,
static int Turn = 0;
行了!
我正在尝试制作游戏;当我单击一个按钮时,我需要使用查询字符串转到另一个页面,我需要知道单击了哪个按钮 (Button1) 以及单击了多少次 (Turn)。这是我的代码:
int Turn = 0;
protected void Button1_Click(object sender, EventArgs e)
{
string clickedButton = "Button1";
Turn = Turn ++;
Response.Redirect(string.Format("TheGame.aspx?button={0}&turn={1}", clickedButton , Turn));
}
但问题是,我永远无法更改轮到,它始终保持为 0。我该怎么做?
两个原因。
首先,post-修复递增运算符 returns 递增之前的值,因此 Turn++
将 Turn
递增到 1,然后 return s 0。然后将该值赋回 Turn
,从而撤消增量。只需使用
Turn++
其次,Turn
正在 Page
-class 级别声明。每次加载页面时,都会构建此页面的一个新实例,并使用一个初始化为零的新 Turn
。
您需要在您的解决方案中添加某种回合跟踪服务 -class,以跟踪用户在游戏生命周期内的回合数。您还需要确定想法 "lifetime of the game" 如何映射到服务器端的抽象。
您可以像现在一样继续使用查询字符串,但您不应启动页面级变量,而应只使用局部变量、递增和 return 新查询的新值细绳。另一种选择是会话状态。
那是因为每当创建新页面时 Turn
都设置为 0。
您应该将 Turn
存储在 Session 中并像这样使用它:
public int Turn
{
get
{
if (Session["Turn"] == null)
Session["Turn"]= 0;
return (int)Session["Turn"];
}
set
{
Session["Turn"] = value;
}
}
“++”运算符递增它所附加的变量。当像这样用作后缀时,它会检索现有值,然后递增变量。当用作前缀时,它会递增变量,然后检索值。在这种情况下,它检索值“0”,然后将 Turn 递增到“1”。但是,赋值随后将 Turn 的值更改回“0”。
要么单独使用 Turn++
,要么使用我会做的赋值 Turn = Turn + 1
。
protected void Button1_Click(object sender, EventArgs e)
{
string clickedButton = "Button1";
Turn = Turn + 1;
Response.Redirect(string.Format("TheGame.aspx?button={0}&turn={1}",
clickedButton , Turn));
}
“++”运算符经常这样使用:
protected void Button1_Click(object sender, EventArgs e)
{
string clickedButton = "Button1";
Response.Redirect(string.Format("TheGame.aspx?button={0}&turn={1}",
clickedButton , ++Turn));
}
请注意,我使用“++”作为前缀,因此用于格式化字符串的值将是 post-增量值“1”,而不是预增量值“0” .
最简单的方法就是让变量变成静态的,
static int Turn = 0;
行了!