hallo,
ich hab hier mal eine Klasse geschrieben, die Highscores verwaltet und sichert.
Die idee dazu kam von Tobikubi.
Dafür brauchen wir eine Klasse. In dieser werden die Highscores verwaltet.
Code für die Klasse:
und eine Form. Diese dient zur Anzeige und Eingabe der Highscores
Für die Form brauchen wir einen Button, zwei Textboxen und ein ListView
Kommentare erwünscht.
gruss
mikeb69
ich hab hier mal eine Klasse geschrieben, die Highscores verwaltet und sichert.
Die idee dazu kam von Tobikubi.
Dafür brauchen wir eine Klasse. In dieser werden die Highscores verwaltet.
Code für die Klasse:
VB.NET-Quellcode
- Imports System
- Imports System.IO
- Imports System.Runtime
- Imports System.Runtime.Serialization
- Imports System.Runtime.Serialization.Formatters.Binary
- <Serializable()> Public Class ClassHighscore
- 'highscore structur
- <Serializable()> Public Structure highscore
- Public Sub New(ByVal n As String, ByVal s As Integer)
- Name = n
- Score = s
- End Sub
- Public Name As String
- Public Score As Integer
- End Structure
- 'liste aller highscores
- Private HighScores As List(Of highscore)
- 'Event welches ausgelöst wird, wenn die Highscore Liste aktualisiert wurde.
- Public Event HighscoreListUpdated()
- Private _maxcount As Integer = 10 'maximale anzahl an highscore einträgen
- ''' <summary>Neue Instanz der ClassHighscore.</summary>
- Public Sub New(ByVal maxcount As Integer)
- _maxcount = maxcount
- HighScores = New List(Of highscore)
- End Sub
- ''' <summary>Fügt einen neuen Eintrag zur Highscore Liste hinzu,
- ''' wenn dieser größer als der aktuell kleinste Eintrag ist.</summary>
- ''' <param name="name">Name des Spielers.</param>
- ''' <param name="score">Punkte (Score).</param>
- ''' <returns>True wenn eingetragen werden konnte - sonst False.</returns>
- ''' <remarks></remarks>
- Public Function AddItem(ByVal name As String, ByVal score As Integer) As Boolean
- Dim hs As New highscore(name, score)
- Return additemtolist(hs)
- End Function
- ''' <summary>Fügt einen neuen Eintrag zur Highscore Liste hinzu,
- ''' wenn dieser größer als der aktuell kleinste Eintrag ist.</summary>
- ''' <param name="hs">Highscore als Strukture Highscore.</param>
- ''' <returns>True wenn eingetragen werden konnte - sonst False.</returns>
- ''' <remarks></remarks>
- Public Function AddItem(ByVal hs As highscore) As Boolean
- Return additemtolist(hs)
- End Function
- ''' <summary>Gemeinsame Funktion zum Hinzufügen von Einträgen zur Highscore Liste.</summary>
- Private Function additemtolist(ByVal hs As highscore) As Boolean
- 'zur liste hinzufügen
- HighScores.Add(hs)
- 'sortieren
- HighScores.Sort(AddressOf sort_highscores)
- 'prüfen ob mehr einträge zur verfügung stehen als erwünscht.
- If HighScores.Count > _maxcount Then
- HighScores.RemoveAt(_maxcount)
- End If
- 'event auslösen
- RaiseEvent HighscoreListUpdated()
- End Function
- ''' <summary>Sortiert die Highscore Liste nach Punkten (Score).</summary>
- ''' <remarks></remarks>
- Private Function sort_highscores(ByVal hs1 As highscore, ByVal hs2 As highscore) As Boolean
- If hs1.Score > hs2.Score Then
- Return True
- Else
- Return False
- End If
- End Function
- #Region "Properties"
- ''' <summary>Gibt die Highscore Liste zurück.</summary>
- ''' <remarks></remarks>
- Public ReadOnly Property GetHighscoreList() As List(Of highscore)
- Get
- Return HighScores
- End Get
- End Property
- #End Region
- #Region "Save and Load"
- ''' <summary>Lädt die Highscores.</summary>
- ''' <param name="filename">Highscoredatei mit Pfad.</param>
- ''' <remarks></remarks>
- Public Sub Load(ByVal filename As String)
- 'datei existiert nicht
- If File.Exists(filename) = False Then
- Throw New Exception("File not Found")
- End If
- 'datei laden
- Dim fs As New FileStream(filename, FileMode.Open)
- Dim formatter As New BinaryFormatter
- HighScores = DirectCast(formatter.Deserialize(fs), List(Of highscore))
- fs.Close()
- 'event auslösen
- RaiseEvent HighscoreListUpdated()
- End Sub
- ''' <summary>Speichert die Highscores.</summary>
- ''' <param name="filename">Dateiname (mit Pfad) unter welchem die Highscores gespeichert werden sollen.</param>
- ''' <remarks></remarks>
- Public Sub Save(ByVal filename As String)
- 'datei speichern
- Dim fs As New FileStream(filename, FileMode.Create)
- Dim formatter As New BinaryFormatter
- formatter.Serialize(fs, HighScores)
- fs.Close()
- End Sub
- #End Region
- End Class
und eine Form. Diese dient zur Anzeige und Eingabe der Highscores
Für die Form brauchen wir einen Button, zwei Textboxen und ein ListView
VB.NET-Quellcode
- Public Class Form1
- Private WithEvents cs As New ClassHighscore(10) 'Klasse mit der Anzahl der maximalen Einträge Instanzieren
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Me.ListView1.View = View.Details
- Me.ListView1.Columns.Add("Name")
- Me.ListView1.Columns.Add("Score")
- cs.Load("test.dat")
- End Sub
- Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
- cs.Save("test.dat")
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- cs.AddItem(Me.TextBox1.Text, CInt(Me.TextBox2.Text))
- Me.TextBox1.Text = ""
- Me.TextBox2.Text = ""
- End Sub
- Private Sub cs_HighscoreListUpdated() Handles cs.HighscoreListUpdated
- Me.ListView1.Items.Clear()
- For i As Integer = 0 To cs.GetHighscoreList.Count - 1
- Me.ListView1.Items.Add(cs.GetHighscoreList(i).Name).SubItems.Add(cs.GetHighscoreList(i).Score)
- Next
- End Sub
- End Class
Kommentare erwünscht.
gruss
mikeb69