Page_Load上的随机数

本文关键字:随机数 Load Page | 更新日期: 2023-09-27 18:28:49

我正在创建一个简单的游戏,计算机生成随机数并将其相加。规则是,当两个随机数的相加是<17,生成另一个随机数并将其与先前生成的随机数相加。计算机还为用户生成一个随机数。但是,用户决定是否要生成更多。如果他愿意,新生成的数字会添加到以前的数字中。

我面临的问题是,生成他的随机数的计算机功能在Page_Load事件中。这导致了一个问题;这意味着当用户显示了他的随机数时,比如说他决定生成另一个。在Button_Click事件中,用户按下"生成"按钮并获得新的随机数。问题在于,每当按下按钮时,页面就会刷新,并且计算机随机数也会更改,因为该方法处于page_load事件中。

如何使计算机生成一个随机数并存储它,而不受页面上其他事件的影响。此外,我如何将用户新生成的随机数添加到以前生成的随机数来

这是代码:

int computer_first_number;
int computer_second_number;
int extra_number;
int computer_total;
int user_number1;
int user_number2;
int user_total;
private int randomNumber(int min, int max)
{
Random random = new Random(BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0));
return random.Next(min, max);
}
protected void Page_Load(object sender, EventArgs e)
{
       computer_first_number = randomNumber(1, 10);
       computer_second_number = randomNumber(1, 10);
       user_number1 = randomNumber(1, 10);
       computer_total = computer_first_number + computer_second_number;
       while (computer_total < 17)
       {
          try
          {
              extra_number = randomNumber(1, 10);
              computer_total = computer_first_number + computer_second_number + extra_number;
          }
          catch (Exception ex)
          {
              Console.Write(ex);
          }
       }
}
protected void Button1_Click1(object sender, EventArgs e)
{
       user_number2 = randomNumber(1, 10);
       user_total = user_number1 + user_number2;
       Label4.Text = Convert.ToString(user_total);
 }

Page_Load上的随机数

将random Number的值存储在ViewState中(如ViewState["RandNum"]=random Number。在页面加载中检查Page是否是回发的(如Page.IsPostback)。类似;

private int randomNumber(int min, int max)
    {
        Random random = new Random(BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0));
        return random.Next(min, max);
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            int number = randomNumber(1, 10) + randomNumber(1, 10);
            while (number < 17)
            {
                number += randomNumber(1, 10);
            }
            ViewState["RandNum"] = number;
        }
        Label4.Text = ViewState["RandNum"].ToString();
    }
    protected void Button1_Click1(object sender, EventArgs e)
    {
        int userNumber = randomNumber(1, 10);
        userNumber = int.Parse(ViewState["RandNum"].ToString()) + userNumber;
        ViewState["RandNum"] = userNumber;
        Label4.Text = Convert.ToString(userNumber);
    }

请用数字分隔你的问题,你需要这个环节。

Session["randomNumber"] = computer_first_number;
computer_first_number = (int)Session["randomNumber"];

您可以在会话中存储任何对象,因此可以使用"列表"或"队列"为用户存储多个数字。

编辑:就像daryal说的,总是存储数字,如果它来自Postback,你就知道数字是存储的。即使这样,会话也只持续20分钟(正常情况下),因此检查对象是否真的存在于会话中总是很好的。

存储数字。ASP.NET为在应用程序中持久化数据提供了几个选项。查看ASP.NET状态管理建议,特别是"服务器端状态管理选项"部分。

首先,您的Page_Load需要有一个IsPostback检查:

protected void Page_Load(object sender, EventArgs e)
{
       if(!IsPostback){
         computer_first_number = randomNumber(1, 10);
         computer_second_number = randomNumber(1, 10);
         user_number1 = randomNumber(1, 10);
         ...  //keep your normal processing
         //at the end, put your total in a hidden field
         hidFieldRandomTotal.Value = computer_total;
       } else {
         //here's where you'd add on a new random number
         int newRandomNumber = randomNumber(1,10);
         computer_total = Convert.ToInt32(hidFieldRandomTotal.Value);
         //add it to the total
         hidfieldRandomTotal.Value = newRandomNumber + computer_total;
       }
}

您需要一种方法来在最初加载页面和用户发布数据之间保持状态。有很多方法可以做到这一点。我在上面展示的内容非常简单,也不太优雅,但这只是一个开始。基本上,您必须知道最初加载页面的时间(IsPostback == false)和更新页面的日期(IsPostback == true)。