使用 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;

行了!