如何在Visual Basic 2010中保存游戏进度?

时间:2013-10-03 11:36:49

标签: save vb.net-2010

我创建了一个隐藏的对象游戏,就像这个:http://www.shazaml.com/archives/creating-a-hidden-object-game-in-silverlight-3,玩家必须在图片中找到大约60个对象。有八个标签,每个标签都填充一个字符串,其中包含要查找的对象的名称。这取自pictureArray()。

 Sub pictureArray()

    Randomize()

    pictures.Add("Cat")
    pictures.Add("Spade")
    pictures.Add("Butterfly")
    pictures.Add("Shoes")
    pictures.Add("Radio")
    pictures.Add("Grasshopper")
    pictures.Add("Lamp")
    pictures.Add("Coconut")
    pictures.Add("Clock")
    pictures.Add("Lightbulb")
    pictures.Add("Binoculars")
    pictures.Add("Diamond")
    pictures.Add("Hammer")
    pictures.Add("Bell")
    pictures.Add("Snail")
    pictures.Add("Bag")
    pictures.Add("Camera")
    pictures.Add("Pencil")
    pictures.Add("Horseshoe")
    pictures.Add("Brush")
    pictures.Add("Gloves")
    pictures.Add("Ball")
    pictures.Add("Umbrella")
    pictures.Add("Gnome")
    pictures.Add("Mouse")
    pictures.Add("Crown")
    pictures.Add("Torch")
    pictures.Add("Paperclip")
    pictures.Add("Handprint")
    pictures.Add("Hat")
    pictures.Add("Car")
    pictures.Add("Star")
    pictures.Add("Wheel")
    pictures.Add("Book")
    pictures.Add("Triangle")
    pictures.Add("Die")
    pictures.Add("Glasses")
    pictures.Add("One")
    pictures.Add("Shell")
    pictures.Add("Apple")
    pictures.Add("Bowling Pin")
    pictures.Add("Spoon")
    pictures.Add("Magnifier")
    pictures.Add("Letter R")
    pictures.Add("Aeroplane")
    pictures.Add("Scissors")
    pictures.Add("Mask")
    pictures.Add("Bow")
    pictures.Add("Coin")
    pictures.Add("Frog")
    pictures.Add("Snake")
    pictures.Add("Key")
    pictures.Add("Rope")
    pictures.Add("Peg")
    pictures.Add("Bottle")
    pictures.Add("Belt")
    pictures.Add("Angel")
    pictures.Add("Pawprint")
    pictures.Add("Clover")
    pictures.Add("Phone")
    pictures.Add("Ring")

    lblOne.Text = (pictures(RandIndex))
    pictures.RemoveAt(RandIndex)
    RandIndex = RandGen.Next(0, pictures.Count)

    lblTwo.Text = (pictures(RandIndex))
    pictures.RemoveAt(RandIndex)
    RandIndex = RandGen.Next(0, pictures.Count)

    lblThree.Text = (pictures(RandIndex))
    pictures.RemoveAt(RandIndex)
    RandIndex = RandGen.Next(0, pictures.Count)

    lblFour.Text = (pictures(RandIndex))
    pictures.RemoveAt(RandIndex)
    RandIndex = RandGen.Next(0, pictures.Count)

    lblFive.Text = (pictures(RandIndex))
    pictures.RemoveAt(RandIndex)
    RandIndex = RandGen.Next(0, pictures.Count)

    lblSix.Text = (pictures(RandIndex))
    pictures.RemoveAt(RandIndex)
    RandIndex = RandGen.Next(0, pictures.Count)

    lblSeven.Text = (pictures(RandIndex))
    pictures.RemoveAt(RandIndex)
    RandIndex = RandGen.Next(0, pictures.Count)

    lblEight.Text = (pictures(RandIndex))
    pictures.RemoveAt(RandIndex)
    RandIndex = RandGen.Next(0, pictures.Count)

End Sub

由于要找到很多物品,玩家可能想退出游戏并在以后返回游戏,因此,我想知道什么是我能保存当前游戏进度的最佳方式,以便玩家可以从他们离开的地方接听?

我做过一些研究,试图找到一种在线方式,但是不了解它或者知道什么对这款游戏最好?

1 个答案:

答案 0 :(得分:1)

基本上你会创建一个CLASS来保存List(Of String)和标签中的每个八个当前值。然后使用XmlSerializer将该信息保存并加载到XML文件中。

这是一个非常简单的例子:

Public Class Form1

    Private RandGen As New Random
    Private Pictures As New List(Of String)
    Private DataFile As String = System.IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData, "GameState.xml")

    Sub pictureArray()
        Pictures.Clear()
        pictures.Add("Cat")
        pictures.Add("Spade")
        pictures.Add("Butterfly")
        pictures.Add("Shoes")
        pictures.Add("Radio")
        pictures.Add("Grasshopper")
        pictures.Add("Lamp")
        pictures.Add("Coconut")
        pictures.Add("Clock")
        pictures.Add("Lightbulb")
        pictures.Add("Binoculars")
        pictures.Add("Diamond")
        pictures.Add("Hammer")
        pictures.Add("Bell")
        pictures.Add("Snail")
        pictures.Add("Bag")
        pictures.Add("Camera")
        pictures.Add("Pencil")
        pictures.Add("Horseshoe")
        pictures.Add("Brush")
        pictures.Add("Gloves")
        pictures.Add("Ball")
        pictures.Add("Umbrella")
        pictures.Add("Gnome")
        pictures.Add("Mouse")
        pictures.Add("Crown")
        pictures.Add("Torch")
        pictures.Add("Paperclip")
        pictures.Add("Handprint")
        pictures.Add("Hat")
        pictures.Add("Car")
        pictures.Add("Star")
        pictures.Add("Wheel")
        pictures.Add("Book")
        pictures.Add("Triangle")
        pictures.Add("Die")
        pictures.Add("Glasses")
        pictures.Add("One")
        pictures.Add("Shell")
        pictures.Add("Apple")
        pictures.Add("Bowling Pin")
        pictures.Add("Spoon")
        pictures.Add("Magnifier")
        pictures.Add("Letter R")
        pictures.Add("Aeroplane")
        pictures.Add("Scissors")
        pictures.Add("Mask")
        pictures.Add("Bow")
        pictures.Add("Coin")
        pictures.Add("Frog")
        pictures.Add("Snake")
        pictures.Add("Key")
        pictures.Add("Rope")
        pictures.Add("Peg")
        pictures.Add("Bottle")
        pictures.Add("Belt")
        pictures.Add("Angel")
        pictures.Add("Pawprint")
        pictures.Add("Clover")
        pictures.Add("Phone")
        pictures.Add("Ring")

        Dim RandIndex As Integer
        lblOne.Text = (pictures(RandIndex))
        pictures.RemoveAt(RandIndex)
        RandIndex = RandGen.Next(0, pictures.Count)

        lblTwo.Text = (pictures(RandIndex))
        pictures.RemoveAt(RandIndex)
        RandIndex = RandGen.Next(0, pictures.Count)

        lblThree.Text = (pictures(RandIndex))
        pictures.RemoveAt(RandIndex)
        RandIndex = RandGen.Next(0, pictures.Count)

        lblFour.Text = (pictures(RandIndex))
        pictures.RemoveAt(RandIndex)
        RandIndex = RandGen.Next(0, pictures.Count)

        lblFive.Text = (pictures(RandIndex))
        pictures.RemoveAt(RandIndex)
        RandIndex = RandGen.Next(0, pictures.Count)

        lblSix.Text = (pictures(RandIndex))
        pictures.RemoveAt(RandIndex)
        RandIndex = RandGen.Next(0, pictures.Count)

        lblSeven.Text = (pictures(RandIndex))
        pictures.RemoveAt(RandIndex)
        RandIndex = RandGen.Next(0, pictures.Count)

        lblEight.Text = (pictures(RandIndex))
        pictures.RemoveAt(RandIndex)
        RandIndex = RandGen.Next(0, pictures.Count)
    End Sub

    Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
        Dim gs As New GameState
        gs.Pictures = Pictures
        gs.lblOne = lblOne.Text
        gs.lblTwo = lblTwo.Text
        gs.lblThree = lblThree.Text
        gs.lblFour = lblFour.Text
        gs.lblFive = lblFive.Text
        gs.lblSix = lblSix.Text
        gs.lblSeven = lblSeven.Text
        gs.lblEight = lblEight.Text

        Try
            Dim xml As New System.Xml.Serialization.XmlSerializer(gs.GetType)
            Using fs As New System.IO.FileStream(DataFile, IO.FileMode.OpenOrCreate, IO.FileAccess.Write)
                xml.Serialize(fs, gs)
            End Using
            MessageBox.Show("Game Saved!")
        Catch ex As Exception
            MessageBox.Show(ex.ToString, "Error Saving Game")
        End Try
    End Sub

    Private Sub btnLoad_Click(sender As System.Object, e As System.EventArgs) Handles btnLoad.Click
        If System.IO.File.Exists(DataFile) Then
            Try
                Dim gs As GameState
                Dim xml As New System.Xml.Serialization.XmlSerializer(GetType(GameState))
                Using fs As New System.IO.FileStream(DataFile, IO.FileMode.Open, IO.FileAccess.Read)
                    gs = DirectCast(xml.Deserialize(fs), GameState)
                    Pictures = gs.Pictures
                    lblOne.Text = gs.lblOne
                    lblTwo.Text = gs.lblTwo
                    lblThree.Text = gs.lblThree
                    lblFour.Text = gs.lblFour
                    lblFive.Text = gs.lblFive
                    lblSix.Text = gs.lblSix
                    lblSeven.Text = gs.lblSeven
                    lblEight.Text = gs.lblEight
                    MessageBox.Show("Game Loaded!")
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.ToString, "Error Loading Game")
            End Try
        Else
            MessageBox.Show("No Saved Game Found")
        End If
    End Sub

End Class

<Serializable()> _
Public Class GameState
    Public Pictures As New List(Of String)
    Public lblOne As String
    Public lblTwo As String
    Public lblThree As String
    Public lblFour As String
    Public lblFive As String
    Public lblSix As String
    Public lblSeven As String
    Public lblEight As String
End Class