1

我对visual basic很陌生,我正在为我的业余时间的一个小项目制作一个基于文本的游戏。游戏将有一个评分系统,在游戏结束时,用户的分数将存储在一个文本文件中。尽管我确定附加文本并不困难,但我还没有编写写入文件的代码。我遇到的问题是显示高分;我可以阅读它们,我可以使用 Split(","),我什至将结果显示在一个漂亮的表格中。我遇到的问题是按实际分数的顺序显示高分。这是我必须构建分数表的代码。(注意。Pad() 是我制作的一个函数,用于将空格填充到字符串的末尾,这样它们就可以正确地放入表中。语法:Pad(字符串,长度输出))

    Dim FStrm As FileStream
    Dim StrmR As StreamReader
    FStrm = New FileStream("HighScores.txt", FileMode.Open)
    StrmR = New StreamReader(FStrm)
    Dim highScores As New List(Of String)

    While StrmR.Peek <> -1
        highScores.Add(StrmR.ReadLine)
    End While

    FStrm.Close()

    Console.WriteLine("       __________________________________________________________________ ")
    Console.WriteLine("      |       Score       |       Name                                   |")
    Console.WriteLine("      |-------------------|----------------------------------------------|")
    Dim Scores() As String
    For Each score As String In highScores
        Scores = score.Split(",")
        Console.WriteLine("      |  {0}  |  {1}    |", Pad(Scores(0), 15), Pad(Scores(1), 40))
    Next
    Console.WriteLine("      |___________________|______________________________________________| ")

以下是文本文件的示例。

2,Zak
10000,Charlie
9999,Shane
90019,Rebecca

有人可以帮我找到一种按分数对线条进行排序的方法,也许我需要采取完全不同的方法?非常感谢你!

-查理

4

1 回答 1

0

我是 C# 人,但这里有:

Dim scores As List(Of UserScore)
Dim lines As String()
'Read in all lines in one hit.
lines = File.ReadAllLines("HighScores.txt")
scores = New List(Of UserScore)

For Each line As String In lines
    Dim tokens As String()
    'Split each line on the comma character.
    tokens = line.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)

    'Create a new UserScore class and assign the properties.
    Dim userScore As UserScore
    userScore = New UserScore()
    userScore.Name = tokens(1)
    userScore.Score = Int32.Parse(tokens(0))

    'Add to the list of UserScore objects.
    scores.Add(userScore)
Next

'Sort them by descending order of score. To sort in the other
'direction, remove the Descending keyword.
scores = (From s In scores Order By s.Score Descending).ToList()

你需要这个类来保存这些值。我假设 theScore总是一个整数 - 如果它是其他东西,那么这个字段和Int32.Parse调用将需要调整以适应。

Class UserScore
    Property Name As String
    Property Score As Int32
End Class

根据这需要有多健壮,您可能还需要检查文件是否成功打开、Int32.Parse调用是否有效(TryParse在这种情况下该方法会更好)以及line.Split调用是否返回一个包含两个值的数组。否则,这应该可以解决问题。

于 2012-10-15T01:07:03.773 回答