私は学生で、レベル C のプログラミングの試験プロジェクトを提出しようとしています。
私はプロジェクトの最後にいます。ハイスコアのゲームをプログラムしました。ハイスコアはスコアをメモ帳に保存するので、ゲームを再起動したときに古いハイスコアを再度読み取ることができます。
問題は、新しいハイスコアが来るたびに、新しいハイスコアを追加し続けることです。したがって、100 ゲームをプレイした場合、100 のハイスコアがあり、それは望ましくありません。ハイスコアに制限を設けたい。15くらいで考えています。
私には2つの考えがあります。最初のアイデアは、プログラムが最初の 15 のハイスコアのみを読み取るというものです。2 番目のアイデアは、古いハイスコア リストを読み取るサブを作成し、それを新しいハイスコアと比較して、古いハイスコア リストを更新する必要があるかどうかを確認することです。
しかし、問題は、私はそれをプログラミングするのに大きな問題を抱えているということです.. ハイスコアのサブスクをアップロードして、助けを求めます.
ここにハイスコアリストを書きます
Private Sub skrivhighscore()
ReDim Preserve HighscoreNavn(UBound(HighscoreNavn) + 1)
ReDim Preserve HighscoreLevel(UBound(HighscoreLevel) + 1)
'insets the new highscore on the right place so that level is on top
For i As Integer = 1 To UBound(HighscoreLevel)
If (level > HighscoreLevel(i)) Then
'the new highscore is bigger than highscorecount(i). inset the new here but first move the others
For j As Integer = UBound(HighscoreLevel) To i + 1 Step -1
'kopier array(j-1) til array(j)
HighscoreNavn(j) = HighscoreNavn(j - 1)
HighscoreLevel(j) = HighscoreLevel(j - 1)
Next j
HighscoreNavn(i) = brugernavn
' sets highscore name to username. brugernavn = username
HighscoreLevel(i) = level
'set shighscorelvel(I) to the level the user died on.
Exit For
End If
Next i
'clear username and change level to 0
brugernavn = ""
level = 0
'writes highscore to a file so it can be read next time
highscoreboardskriv()
End Sub
これは、ハイスコアリストをメモ帳に保存する場所です
Private Sub highscoreboardskriv()
' create a file at the same place as the game
'append:=False means overwrite and not repleace
fileWriter = My.Computer.FileSystem.OpenTextFileWriter("HighScore.txt", append:=False)
For i As Integer = 1 To UBound(HighscoreLevel)
' In every line the name is on the first 20 spaces and the score is from space 22
'example: "Player1 : 2"
If (HighscoreNavn(i) IsNot Nothing) AndAlso (HighscoreNavn(i).Trim <> "") Then
' If username is empty, it will not be written in the highscorelist. by using this method a highscore can be removed.
FileLine = HighscoreNavn(i).PadRight(20) & ":" & HighscoreLevel(i).ToString.PadLeft(5)
fileWriter.WriteLine(FileLine)
End If
Next i
fileWriter.Close()
End Sub
これは私のハイスコアリストを表示する場所です
Private Sub Highscore()
'Now we read both information again from the file
Dim HighScoreText As String = ""
'highscorelist line by line
For i As Integer = 1 To UBound(HighscoreLevel)
'takes every spaces in an array (we dont use the first line)
If (HighscoreNavn(i) IsNot Nothing) AndAlso (HighscoreNavn(i).Trim <> "") Then
If (HighScoreText <> "") Then
'new line by every highscore except the first line
HighScoreText = HighScoreText & vbNewLine
End If
'line 1 example: "player1 : 230"
HighScoreText = HighScoreText & HighscoreNavn(i).PadRight(20) & ":" & HighscoreLevel(i).ToString.PadLeft(5)
End If
Next i
'show highscorelist to user
MsgBox(HighScoreText, Title:="Highscore list")
End Sub
これは、メモ帳からハイスコアリストを読んだ場所です。
Public Sub highscoreboardlæs()
Public HighscoreNavn(0) As String
Public HighscoreLevel(0) As Integer
Public level As Integer = 0
Public fileReader As System.IO.StreamReader
Public FileLine As String
Try
fileReader = My.Computer.FileSystem.OpenTextFileReader("HighScore.txt")
FileLine = fileReader.ReadLine()
While (FileLine <> "") 'loop så længe der er linjer i filen, for at få alle highscores med
'extend array with 1 extra line
ReDim Preserve HighscoreNavn(UBound(HighscoreNavn) + 1)
ReDim Preserve HighscoreLevel(UBound(HighscoreLevel) + 1)
HighscoreNavn(UBound(HighscoreNavn)) = Mid(FileLine, 1, 20)
HighscoreLevel(UBound(HighscoreLevel)) = Val(Mid(FileLine, 22, 5))
'read next line from the file
FileLine = fileReader.ReadLine()
End While
fileReader.Close()
Catch
'i use try method, else it will crash if there arent any highscorelist
End Try
'MsgBox("Highscore: " & vbNewLine & fileReader.ReadLine() & vbNewLine & fileReader.ReadLine() & vbNewLine & fileReader.ReadLine())
End Sub