Как сохранить средний балл и высокий балл в классе? - PullRequest
0 голосов
/ 21 апреля 2019

Я не знаю, как сохранить средний балл игрока, высокий балл и среднее время для завершения игры в моем классе 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;
        }
    }

Мне также нужно показать имя пользователя, имя пользователя, высокий балл, средний балл и время в ярлыках.

Формат должен быть двойной / float.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2019

Вы не можете хранить среднюю оценку из-за способа работы средних. В то время как вы можете считать игры, в которые играет пользователь, просто увеличивая счетчик на единицу каждый раз, когда игра заканчивается, нет аналитической формы для повышения среднего.

Однако, если вы сохранили общее количество игр и общее количество очков, вы сможете получить все необходимые метрики.

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;
    }
}
0 голосов
/ 21 апреля 2019

Вы можете сохранить среднее значение и затем пересчитать после завершения игры.Таким образом, вам не нужно хранить значение (totalscore), которое вызовет проблемы переполнения (рано или поздно).

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;
    }
}
...