我正在尝试制作游戏;当我单击一个按钮时,我需要使用查询字符串转到另一个页面,我需要知道单击了哪个按钮(Button1),以及单击了多少次(转动)。这是我的代码:
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.我怎么能这样做?
答案 0 :(得分:2)
这是因为无论何时创建新页面Turn
都设置为0。
您应该在会话中存储Turn
并使用它:
public int Turn
{
get
{
if (Session["Turn"] == null)
Session["Turn"]= 0;
return (int)Session["Turn"];
}
set
{
Session["Turn"] = value;
}
}
答案 1 :(得分:1)
最简单的方法是使变量变为静态,
static int Turn = 0;
那就行!
答案 2 :(得分:0)
有两个原因。
首先,post-fix increment运算符在递增之前返回值,因此Turn++
将Turn
递增为1,然后返回0.然后将该值赋值回Turn
,从而撤消你的增量。只需使用
Turn++
其次,Turn
正在Page
- 级别声明。每次加载页面时,都会构建此页面的新实例,并将新的Turn
初始化为零。
您需要在解决方案中添加某种转弯跟踪服务等级,以跟踪用户在游戏生命周期中的转换。您还需要确定游戏的概念"游戏的生命周期"映射到服务器端的抽象。
您可以继续使用查询字符串,但不是启动页面级变量,而应使用局部变量,递增,并使用新查询字符串返回新值。另一种选择是会话状态。
答案 3 :(得分:0)
" ++"运算符递增它所附加的变量。当用作这样的后缀时,它会检索现有值,然后递增变量。当用作前缀时,它会递增变量,然后检索该值。在这种情况下,它检索值" 0",然后递增转到" 1"。但是,分配然后将转回的值改为" 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));
}
请注意,我使用了" ++"作为前缀,以便用于格式化字符串的值将是后增量值" 1"而不是预增量值" 0"。