Оценка сортировки XNA из массива - PullRequest
1 голос
/ 19 ноября 2011

Я хочу создать доску рекордов для своей игры.табло содержит 5 лучших результатов в текстовом файле

текстовый файл выглядит примерно так:

alpha, 3500
beta, 3600
gamma, 2200
delta, 3400
epsilon, 2000

и это мои коды:

    [Serializable]
    public struct HighScoreData
    {
        public string[] PlayerName;
        public int[] Score; 

        public int Count;

        public HighScoreData(int count)
        {
            PlayerName = new string[count];
            Score = new int[count];

            Count = count;
        }

    }

    static HighScoreData highScores;

это коды для чтения данных из текстового файла и уже добавления сортировки в нем: попробуйте {

            using (StreamReader sr = new StreamReader("highscore.txt"))
            {

                string line;
                int i = 0;
                //file = new StreamReader(filePath);

                while ((line = sr.ReadLine()) != null)

                {

                    string[] parts = line.Split(',');                       
                    highScores.PlayerName[i] = parts[0].Trim();
                    highScores.Score[i] = Int32.Parse(parts[1].Trim());                       
                    i++;
                    Array.Sort(highScores.Score);
                }


            }


        }

, вот как я это рисую:

        for (int i = 0; i < 5; i++)
        {
            spriteBatch.DrawString(spriteFont, i + 1 + ". " + highScores.PlayerName[i].ToString()
           , new Vector2(200, 150 + 50 * (i)), Color.Red);
            spriteBatch.DrawString(spriteFont, highScores.Score[i].ToString(),
                new Vector2(550, 150 + 50 * (i)), Color.Red);
        }

проблема в том, когда я запускаю игру, это только сортировка результатов, а не имя игрока.а также первая и вторая оценки в текстовом файле обозначены как «0».это выглядело так:

   alpha 0
   beta 0
   gamma 2000
   delta 2200
   epsilon 3400

что мне делать, чтобы программа могла сортировать все данные в текстовом файле, а не только счет ...?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2011

Еще один вариант без компараторов, использующих LINQ на основе образца Блау:

struct PlayerScore
{
    public string Player;
    public int Score;
    public int DataYouWant;
}

затем образец заполнения списка и его сортировки:

        List<PlayerScore> scores = new List<PlayerScore>();
        Random rand = new Random();
        for (int i = 0; i < 10; i++)
        {
            scores.Add(new PlayerScore()
            {
                Player = "Player" + i,
                Score = rand.Next(1,1000)
            });
        }
        scores = (from s in scores orderby s.Score descending select s).ToList();
        foreach (var score in scores)
        {
            Debug.WriteLine("Player: {0}, Score: {1}", score.Player, score.Score);
        }
0 голосов
/ 19 ноября 2011

Создайте структуру с именем PlayerScore

struct PlayerScore 
{
    public string Player;
    public int Score;
    public int DataYouWant;

    public static int Compare(PlayerScore A, PlayerScore B)
    {
        return A.Score - B.Score;
    }
}

и затем сортировать вызов только один раз (вне времени) для метода сортировки следующим образом:

Array.Sort<PlayerScore>( yourArray, PlayerScore.Compare );

Вам действительно нужно иметь больше, чем экземпляр HighScoreData? Я думаю, что нет .. поэтому вы храните свои рекорды таким образом:

static PlayerScore[] highScores = new PlayerScore[MaxHighScorePlayers];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...