C # Система начисления баллов - PullRequest
0 голосов
/ 14 марта 2019

У меня проблемы с сортировкой системы подсчета очков для моей игры. Проблема возникает, когда я сортирую массив «HighScoresPointsLevel1», потому что, несмотря на отображение массива в правильном порядке, он не имеет связи с «HighScoresNameLevel1». Другими словами, высокий балл за игру присваивается случайному имени игрока.

Возможное решение? Я думал, что если бы мне удалось передать два параметра (HighScoresPointsLevel1, HighScoresNameLevel1) внутри array.sort / array.reverse, но проблема в том, что array.reverse dosent принимает два параметра. Причина, по которой я думал, что это сработает, заключается в том, что при вызове array.sort я впервые смог установить связь между массивами «HighScoresLevel1», «HighScoresNameLevel1».

Есть ли возможные варианты решения этой проблемы. Любая помощь будет оценена. Спасибо.

     string PlayersName = "Player's Name";
     float[] HighScoresLevel1 = new float[5];
     float[] HighScoresPointsLevel1 = new float[5];
     string[] HighScoresNameLevel1 = new string[5];

     public static void addLastScoreLevel1(
       float newScore,
       float newPoints, 
       float[] HighScoresLevel1,
       float[] HighScoresPointsLevel1, 
       string[] HighScoresNameLevel1, 
       string PlayersName)
     {
        if (newScore < HighScoresLevel1[4])
        {
            HighScoresLevel1[4] = newScore;
            HighScoresPointsLevel1[4] = newPoints;
            HighScoresNameLevel1[4] = PlayersName;
            Array.Sort(HighScoresLevel1, HighScoresNameLevel1);
            Array.Sort(HighScoresPointsLevel1);
            Array.Reverse(HighScoresPointsLevel1);
        }
     }

Редактировать: Посмотрев на отзывы от "Kieran Devlin", я внес изменения и пока все хорошо, но у меня проблемы с печатью списка. Поэтому в моей другой форме при попытке отобразить содержимое списка игроков в поле списка в списке отображается только Game.Player.

public partial class MainMenu : Form
{

    public static List<Player> GetPlayers(float newScore, float newPoints, 
    string PlayersName)
    {
        var players = new List<Player>();
        var newPlayer = new Player
        {
            Name = PlayersName,
            Points = newPoints,
            Timer = newScore
        };
        players.Add(newPlayer);

        var TopTenLevel1 = players.OrderByDescending(x => x.Timer).Take(10);
        return players;
    }
 }

public partial class HighScoresMenu : Form
{
        foreach (var Player in MainMenu.GetPlayers(newScore, newPoints, 
        PlayersName))
        {
            ListBoxLevel1.Items.Add(Player);
        }
}

1 Ответ

1 голос
/ 14 марта 2019

Используйте объекты для группировки данных, которые дадут вам больше контекста

public class Player {
    public string Name { get; set; }
    public int Points { get; set; }
    public int Level { get; set; }
}

Тогда вы можете использовать это так:

var players = new List<Player>();
var newPlayer = new Player {
    Name = "Some name",
    Points = 10,
    Level = 3
};
highscore.Add(newPlayer);

И если вы хотите получить десятку лучших игроковпо полю:

var topTenByLevel = players
                   .OrderByDecending(x => x.Level)
                   .Take(10);
...