<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
</Root>
Public Class Form1
'Random to fake a score
Dim rnd As New Random
Dim userName As String
Dim scoresDoc As XDocument
Dim userData As XElement
Dim highScore As Integer = 0
Private Sub btnStartGame_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartGame.Click
userName = txtUserName.Text
scoresDoc = XDocument.Load("C:\Temp\HighScores.xml")
'Load User
userData = (From node In scoresDoc.Descendants("User")
Where node.Attribute("name").Value = userName
Select node).FirstOrDefault
'Set High Score if User is returning
If userData IsNot Nothing Then
highScore = CInt(userData.<HighScore>.Value)
lblHighScore.Text = highScore
End If
End Sub
Private Sub btnEndGame_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEndGame.Click
Dim currentScore = rnd.Next(1, 1001)
'Check if User exists
If userData IsNot Nothing Then
If currentScore > highScore Then
'Update HighScore element
userData.SetElementValue("HighScore", currentScore)
MessageBox.Show("New High Score of " & currentScore.ToString() & "!")
highScore = currentScore
lblHighScore.Text = highScore
End If
Else
'Create a user
Dim newUser = <User name=<%= userName %>>
<HighScore><%= currentScore %></HighScore>
</User>
scoresDoc.Element("Root").Add(newUser)
End If
scoresDoc.Save("C:\Temp\HighScores.xml")
End Sub
End Class
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
<User name="MattP">
<HighScore>694</HighScore>
</User>
<User name="JaneD">
<HighScore>912</HighScore>
</User>
<User name="BillyB">
<HighScore>481</HighScore>
</User>
</Root>
Public Class User
Private _userName As String
Public Property UserName() As String
Get
Return _userName
End Get
Set(ByVal value As String)
_userName = value
End Set
End Property
Private _highScore As Integer
Public Property HighScore() As Integer
Get
Return _highScore
End Get
Set(ByVal value As Integer)
_highScore = value
End Set
End Property
End Class
Public Class Form1
Dim rnd As New Random
Dim highScore As Integer = 0
Dim users As List(Of User)
Dim curUser As User
Const scoresFile As String = "C:\Temp\userScores.csv"
Private Sub LoadUsersFromFile(ByVal filePath As String)
Dim tfp As New FileIO.TextFieldParser(filePath)
tfp.TextFieldType = FileIO.FieldType.Delimited
tfp.Delimiters = {","}
users = New List(Of User)
While Not tfp.EndOfData
Dim fields() = tfp.ReadFields
users.Add(New User With {.UserName = fields(0), .HighScore = CInt(fields(1))})
End While
End Sub
Private Sub SaveHighScoreData(ByVal filePath As String)
Using sw As New IO.StreamWriter(filePath)
For Each User In users
sw.WriteLine(String.Join(",", {User.UserName, User.HighScore.ToString}))
Next
End Using
End Sub
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
LoadUsersFromFile(scoresFile)
curUser = (From cu In users _
Where cu.UserName = txtCurUser.Text
Select cu).FirstOrDefault
If curUser IsNot Nothing Then
lblHighScore.Text = curUser.HighScore
Else
curUser = New User With {.UserName = txtCurUser.Text, .HighScore = 0}
users.Add(curUser)
lblHighScore.Text = 0
End If
End Sub
Private Sub btnEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnd.Click
'Fake score for game
highScore = rnd.Next(1, 1001)
MessageBox.Show(highScore)
If highScore > curUser.HighScore Then
lblHighScore.Text = highScore
curUser.HighScore = highScore
SaveHighScoreData(scoresFile)
End If
End Sub
End Class
BillyB,893
JoeS,827
MattP,746