0

我不知道如何在我的 user.cs 类中存储玩家的平均分、高分和完成游戏的平均时间。每当玩家完成我的一轮游戏时,他们的标签中的平均分和最高分以及平均时间都必须每次更新。

我尝试过使用数组和数组列表,但我仍然不确定,因为它们似乎都不起作用。

这是我的 user.cs 类:

public class User
    {
        public string fname { get; set; } = "";
        public string lname { get; set; } = "";
        public string username { get; set; } = "";
        public string password { get; set; } = "";

        public User() { }

        public User (string fname, string lname, string username, string password)
        {
            this.fname = fname;
            this.lname = lname;
            this.username = username;
            this.password = password;
        }
    }

我还需要在标签中显示用户名、用户名、高分、平均分和时间。

格式应该是双/浮点数。

4

2 回答 2

2

由于平均值的工作方式,您无法存储平均分数。虽然您可以通过在每次游戏结束时简单地将计数器增加 1 来计算用户玩过的游戏,但没有分析形式来提高平均值。

但是,如果您存储了游戏总数和总分,那么您将能够推进您需要的所有指标。

class User
{
    public int HighScore { get; private set; } = 0;

    public double AverageScore => 
        this.GamesPlayed > 0 ? this.TotalScore / (double)this.GamesPlayed : 0;

    private int GamesPlayed { get; set; } = 0;
    private int TotalScore { get; set; } = 0;

    public void GameOver(int score)
    {
        this.HighScore = Math.Max(this.HighScore, score);
        this.GamesPlayed += 1;
        this.TotalScore += score;
    }
}
于 2019-04-21T16:36:22.100 回答
0

您可以存储平均值,然后在游戏结束后重新计算。这样您就不需要存储会导致溢出问题(迟早)的值(总分)。

class User
{
    public int HighScore { get; private set; } = 0;

    public double AverageScore { get; private set; } = 0;

    private int GamesPlayed { get; set; } = 0;

    public void GameOver(int score)
    {
        this.HighScore = Math.Max(this.HighScore, score);
        // get the prev total score then increase with the current score and get the new average in the end (also increase the GamesPlayed)
        this.AverageScore = ((this.AverageScore * this.GamesPlayed) + score) / ++this.GamesPlayed;
    }
}
于 2019-04-21T20:20:26.907 回答