VB Highscore/Listbox Problem

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Pavianpopo.

    VB Highscore/Listbox Problem

    Hallo

    ich habe ein Problem und zwar:

    Ich habe ein kleines Spiel programmiert und ich habe eine Highscore in einer listbox. Wenn das spiel vorbei ist wird der aktuelle Score von einer textbox mit den Scores(einträge in der listbox) verglichen. Das klappt auch super nur wen der erst 9 Punkte hat und dann kommt wer mit 10 wird er darunter ein sortiert weil nur die erste Ziffer verglichen wird! Wie schaffe ich das die ganze zahl verglichen wird?!
    (ich habe bestimmt irgendein Anfängerfehler drinn da ich noch nicht so lange dabei bin)

    so habe ich das gemacht wenn wer dafür eine bessere lösung hat bitte auch melden denn das ist für jede der Highscoreeinträge sehr lang!


    Score = Textbox
    Highscore = Listbox

    VB.NET-Quellcode

    1. Sub HighScoreBerechnung()
    2. Highscore.Visible = True
    3. If Score.Text > Highscore.Items.Item(1) Then
    4. Highscore.Items.Item(10) = Highscore.Items.Item(9)
    5. Highscore.Items.Item(9) = Highscore.Items.Item(8)
    6. Highscore.Items.Item(8) = Highscore.Items.Item(7)
    7. Highscore.Items.Item(7) = Highscore.Items.Item(6)
    8. Highscore.Items.Item(6) = Highscore.Items.Item(5)
    9. Highscore.Items.Item(5) = Highscore.Items.Item(4)
    10. Highscore.Items.Item(4) = Highscore.Items.Item(3)
    11. Highscore.Items.Item(3) = Highscore.Items.Item(2)
    12. Highscore.Items.Item(2) = Highscore.Items.Item(1)
    13. Highscore.Items.Item(1) = Score.Text & Player.Text
    14. Else
    15. ...


    Danke für die hilfe

    Pavianpopo
    Willkommen im Forum. :thumbup:

    Pavianpopo schrieb:

    VB.NET-Quellcode

    1. If Score.Text > Highscore.Items.Item(1) Then
    Da stehen doch ganz bestimmt Zahlen drin.
    Was Du hier vergleichst, ist die alphabetische Reihenfolge.
    Also:
    Option Strict On,
    konvertiere die zu vergleichenden Inhalte zunächst in ein Integer, z.B.:

    VB.NET-Quellcode

    1. If CInt(Score.Text) > CInt(Highscore.Items.Item(1)) Then
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für dioe antwort habe es dierkt mal versucht! Das Programm öffnet noch ganz normal aber wenn man dann zu der stelle kommt stopt das programm und es kommt eine fehler meldung!

    InvalidCastExeption wurde nicht behandelt

    Ungültige Konvertierung von der Zeichenfolge . in Integer.

    ...
    Hoffe du oder jemand anderes kann mir hier weiterhelfen!

    Danke

    Pavianpopo
    Ähm ich kopiere mal das was der mir zum kopieren gibt hier rein ich kann damit nicht so viel anfangen aber vieleicht ihr?!

    Quellcode

    1. System.InvalidCastException wurde nicht behandelt.
    2. Message=Ungültige Konvertierung von der Zeichenfolge . in Typ Integer.
    3. Source=Microsoft.VisualBasic
    4. StackTrace:
    5. bei Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
    6. bei Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(Object Value)
    7. bei WindowsApplication1.Form1.HighScoreBerechnung() in C:\Users\Flo\Desktop\Programm\Snake2\Snake2\Form1.vb:Zeile 85.
    8. bei WindowsApplication1.Form1.Ticker_Tick(Object sender, EventArgs e) in C:\Users\Flo\Desktop\Programm\Snake2\Snake2\Form1.vb:Zeile 53.
    9. bei System.Windows.Forms.Timer.OnTick(EventArgs e)
    10. bei System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
    11. bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    12. bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    13. bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    14. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    15. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    16. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    17. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    18. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    19. bei WindowsApplication1.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
    20. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    21. bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    22. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    23. bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    24. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
    25. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    26. bei System.Threading.ThreadHelper.ThreadStart()
    27. InnerException: System.FormatException
    28. Message=Die Eingabezeichenfolge hat das falsche Format.
    29. Source=Microsoft.VisualBasic
    30. StackTrace:
    31. bei Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
    32. bei Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
    33. InnerException:


    und wie schon gesagt Ungültige Konvertierung der Zeichenfolge . in Integer.
    Meine Schuld, unklare Frage.
    Auf welchen Text wendest Du die Operation CInt() an?
    Dies hier geht schief:

    VB.NET-Quellcode

    1. Dim txt As String = "Roulade mit Klößen" ' das, was bei Dir hier steht
    2. Dim ii As Integer = CInt(txt)
    Bilder
    • CInt.jpg

      17,67 kB, 487×118, 147 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ah

    einmal auf Score.text das ist einfach nur eine Zahl das habe ich gar nicht als Variabel! Und auf das Highscore Item was aus einer Zahl und einem Namen besteht aber das ist auch keine Variabel bei mir!
    also bei mir wende ich das nicht auf Variabeln an sondern einfach nur auf die Texte!
    Na fein. Dann schaffst Du den Rest wohl allein. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!