Saya membuat aplikasi kuis untuk kursus komputasi saya dan saya sedang mengerjakan layar akhir dan di layar akhir saya memiliki metode yang disebut savescore()

Savescore() dimaksudkan untuk menyimpan nama pengguna, skor, dan waktu pengguna ke dalam file teks. metode savescore() menyimpan detail pengguna ke dalam file teks yang disebut skor dengan sempurna tetapi masalah saya adalah ketika saya menulis detail pengguna ke dalam file teks saya ingin data ditulis ke dalam file teks skor dalam urutan skor menurun dan saya tidak tahu bagaimana melakukan itu.

 private void SaveScore()
    {
        string file = @"..\..\textfiles\scores.txt";

        try
        {
            //
            // Create file if not exists
            //
            if (!File.Exists(file))
            {
                File.Create(file).Dispose();
            }

            //
            // Create DataTable
            //
            DataColumn nameColumn = new DataColumn("name", typeof(String));
            DataColumn scoreColumn = new DataColumn("score", typeof(int));
            DataColumn timeColumn = new DataColumn("time", typeof(long));



            DataTable scores = new DataTable();
            scores.Columns.Add(nameColumn);
            scores.Columns.Add(scoreColumn);
            scores.Columns.Add(timeColumn);


            //
            // Read CSV and populate DataTable
            //
            using (StreamReader streamReader = new StreamReader(file))
            {
                streamReader.ReadLine();

                while (!streamReader.EndOfStream)
                {
                    String[] row = streamReader.ReadLine().Split(',');
                    scores.Rows.Add(row);
                }
            }

            Boolean scoreFound = false;

            //
            // If user exists and new score is higher, update 
            //
            foreach (DataRow score in scores.Rows)
            {
                if ((String)score["name"] == player.Name)
                {
                    if ((int)score["score"] < player.Score)
                    {
                        score["score"] = player.Score;
                        score["time"] = elapsedtime;

                    }

                    scoreFound = true;
                    break;
                }
            }

            //
            // If user doesn't exist then add user/score
            //
            if (!scoreFound)
            {
                scores.Rows.Add(player.Name, player.Score, elapsedtime);
            }

            //
            // Write changes to CSV (empty then rewrite)
            //
            File.WriteAllText(file, string.Empty);

            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.AppendLine("name,score,time");

            foreach (DataRow score in scores.Rows)
            {
                stringBuilder.AppendLine(score["name"] + "," + score["score"] + "," + score["time"]);
            }

            File.WriteAllText(file, stringBuilder.ToString());
        }

        catch (Exception ex)
        {
            MessageBox.Show("Error saving high score:\n\n" + ex.ToString(), "Error");
        }

    }

Jadi saya seseorang dapat mengedit kode saya saat ini untuk menyimpan detail pengguna dalam urutan menurun dalam hal skor yang akan fantastis dan terima kasih sebelumnya.

0
james 30 Maret 2019, 23:48

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan DataTable.Pilih metode untuk mencapainya. Dengan metode pilih Anda dapat memfilter dan mengurutkan baris dalam tabel. Berikut adalah pernyataan foreach yang diubah yang menggunakan metode untuk mengurutkan data.

foreach (DataRow score in scores.Select(null, "score DESC"))
{
   stringBuilder.AppendLine(score["name"] + "," + score["score"] + "," + score["time"]);
}
1
AlesD 30 Maret 2019, 22:45