Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Visual Basic-在游戏中为我的高分设置上限 我是一名学生,我在路上的C级课程中,我的项目是在C。_Vb.net - Fatal编程技术网

Vb.net Visual Basic-在游戏中为我的高分设置上限 我是一名学生,我在路上的C级课程中,我的项目是在C。

Vb.net Visual Basic-在游戏中为我的高分设置上限 我是一名学生,我在路上的C级课程中,我的项目是在C。,vb.net,Vb.net,我在我的项目的最后,我已经编程了一个高分的游戏。highscore将分数保存在记事本中,以便在重新启动游戏时再次读取旧的highscore 问题是,每当一个新的高分出现时,它就会不断地添加一个新的高分。所以,如果我打了100场比赛,就有100个高分,我不希望这样。我想限制我的高分。我想大概15岁 我有两个想法。第一个想法是程序只读取前15个高分。 第二个想法是,我创建一个子系统读取旧的highscorelist,然后将其与新的highscore进行比较,并检查旧的highscorelist是否需

我在我的项目的最后,我已经编程了一个高分的游戏。highscore将分数保存在记事本中,以便在重新启动游戏时再次读取旧的highscore

问题是,每当一个新的高分出现时,它就会不断地添加一个新的高分。所以,如果我打了100场比赛,就有100个高分,我不希望这样。我想限制我的高分。我想大概15岁

我有两个想法。第一个想法是程序只读取前15个高分。 第二个想法是,我创建一个子系统读取旧的highscorelist,然后将其与新的highscore进行比较,并检查旧的highscorelist是否需要更新

但问题是,我在编程时遇到了很大的困难。。我现在将上传我的高分潜艇,并向你寻求帮助

这是我写高分榜的地方

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-highscoreboardskriv()
'在与游戏相同的位置创建文件
'append:=False表示覆盖而不是回复
fileWriter=My.Computer.FileSystem.OpenTextFileWriter(“HighScore.txt”,append:=False)
对于i,整数=1到UBound(高分级别)
“在每一行中,名字在前20个空格处,分数在第22个空格处
'示例:“玩家1:2”
如果(HighscoreNavn(i)不是空)和(HighscoreNavn(i).Trim“”)那么
'如果用户名为空,则不会写入高分列表。使用此方法可以删除高分。
FileLine=HighscoreNavn(i).PadRight(20)和“&HighscoreLevel(i).ToString.PadLeft(5)
fileWriter.WriteLine(文件行)
如果结束
接下来我
fileWriter.Close()
端接头
这是我显示高分列表的地方

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
Private次高分()
'现在,我们再次从文件中读取这两个信息
Dim HighScoreText As String=“”
“逐行高分榜
对于i,整数=1到UBound(高分级别)
'获取数组中的所有空格(我们不使用第一行)
如果(HighscoreNavn(i)不是空)和(HighscoreNavn(i).Trim“”)那么
如果是(HighScoreText“”),则
“除了第一行之外,每一个高分都会有新的一行
HighScoreText=HighScoreText&vbNewLine
如果结束
'第1行示例:“播放器1:230”
HighScoreText=HighScoreText和HighscoreNavn(i).PadRight(20)和“:”和HighscoreLevel(i).ToString.PadLeft(5)
如果结束
接下来我
'向用户显示高分列表
MsgBox(高分文本,标题:=“高分列表”)
端接头
这是我在记事本上阅读高分列表的地方:

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
Public Sub-highscoreboardlæs()
公共HighscoreNavn(0)作为字符串
公共HighscoreLevel(0)为整数
公共级别为整数=0
作为System.IO.StreamReader的公共文件读取器
作为字符串的公共文件行
尝试
fileReader=My.Computer.FileSystem.OpenTextFileReader(“HighScore.txt”)
FileLine=fileReader.ReadLine()
而(文件行“)”的循环是指在fåalle highscores med
'用额外的一行扩展数组
重读保存HighscoreNavn(UBound(HighscoreNavn)+1)
重播保留HighscoreLevel(UBound(HighscoreLevel)+1)
HighscoreNavn(UBound(HighscoreNavn))=Mid(文件线,1,20)
HighscoreLevel(UBound(HighscoreLevel))=Val(Mid(文件行,22,5))
'从文件中读取下一行
FileLine=fileReader.ReadLine()
结束时
fileReader.Close()
抓住
“我使用try方法,否则如果没有高分列表,它将崩溃
结束尝试
'MsgBox(“高分:&vbNewLine&fileReader.ReadLine()&vbNewLine&fileReader.ReadLine()&vbNewLine&fileReader.ReadLine())
端接头

如果您只想在文件中保留15个分数,您可以将所有分数读入一个数组,对其进行排序,然后将最高的15个分数写回文件中。 如果你有较长的分数列表,我不建议这样做,因为你将所有分数加载到内存中,这可能会给你一个较大列表的OOM(内存不足)异常,但在你的情况下,这是完全好的

Sub AddScore(score%, filePath$)
    Dim Scores As New List(Of Integer)

    ' Loads all the scores into our list
    Using Sr As New IO.StreamReader(filePath)
        Do Until Sr.EndOfStream
            Scores.Add(Sr.ReadLine)
        Loop
    End Using

    Scores.Sort() ' Sort it
    Scores.Reverse() ' Reverse it, as the the highest scores is at the bottom. You would property want to just read trough the last 15 items in the list rather than reversing it, but I'm just being lazy.

    ' Write the first 15
    Using Sw As New IO.StreamWriter(filePath, False)
        For i = 0 To Math.Min(Scores.Count - 1, 14)
            Sw.WriteLine(Scores(i))
        Next
    End Using
End Sub

哦,顺便说一句,你的瑞典语对吗?我对瑞典的编程学校很感兴趣,请你给我发一个下午好吗?

你能把你的代码注释翻译成英语吗……公平地说,我认为每个代码片段上面用粗体写的注释提供了足够的信息嗨,我是新到这个网站的,一个朋友推荐它:)我马上试试那段代码,谢谢:)顺便说一句,我来自丹麦,我还没弄清楚你是怎么给人打pm的。。我用谷歌搜索一下。。洛莉把我的评论翻译成英语,谢谢你没有早点这么做。。我在使用你的代码BlackCap时遇到了问题,我不确定我如何链接到该sub。分数%会是HighscoreLevel(i)吗?文件路径$会是我游戏的路径吗?再次感谢you@Slebo-我不认为有PM功能。您可以在评论中交换电子邮件地址。如果您不想永久显示您的电子邮件,只需在对方确认后删除评论即可。顺便说一句,关于你的第一个问题,你写得很好,并且给出了你所做的和你想做的。祝你在学校好运:)谢谢你先生:)我还有12个小时的最后期限,所以我会尽我所能把它弄清楚;)“Score”是要添加的分数,“filePath”是高分文件的路径。%是“As Integer”的缩写“$是“As String”的缩写。请随意在Skype上添加我,这比在这里写评论要快一些。Skype:“BlackCapCoder”