Spielstand Speichern und Laden

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Spielstand Speichern und Laden

    Hallo. Also erstmal: Ja ich weiß, es gibt schon viele Themen wie dieses. Mein Problem ist aber etwas anders. Ich bin dabei ein kleines Spiel zu programmieren (soll so sein wie bei dem DS Spiel Pheonix Wright). Ich muss hier dann eigentlich das gesamte Spiel speichern, sprich den Ort wo man gerade ist, den Satz den eventuell jemand sagt, einfach wie weit der Spieler schon ist. Ich muss dann ja irgendwie festlegen wie weit der Spieler dann ist.

    Wie könnte man das angehen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Xylon“ ()

    @Xylon: Mach zunächst eine Liste aller zu speichernder Properties.
    Wenn Du die in eine serialisierbare Klasse packen kannst, musst Du die entsprechende Instanz einfach speichern bzw. mit der Datei eine neue Instanz anlegen.
    Gugst Du hier.
    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!
    @RodFromGermany:
    Oh okay äh da muss ich mich erstmal reinhängen, danke schön. ^^ Und wie kann ich dann festlegen wie weit der Spieler ist (Möchte einen Savebutton anlegen).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Xylon“ ()

    Du nimmst einfach alle fortschrittrelevanten Variablen und serialisierst diese bzw. schreibst sie selber in eine Datei (bestenfalls natürlich verschlüsselt).
    Das könnte die Position des Spielers, die aktuellen Leben, die Items die er besitzt usw. sein (weiß ja nicht wie genau dein Spiel aufgebaut ist ;)).
    Irgdnwoher muss dein Programm ja auch während der Ausführung wissen, wie weit der Spieler ist, also einfach die Variablen speichern.
    @suscurtl: Hmm okay also es ist so das immer verschiedene Charaktere (Mit verschiedenen animierten Gifs) etwas sagen und man an verschiedenen Orten ist. Darüber hinaus hat man bestimmte Items. Man kann warscheinlich nicht durch klick auf den Button eine Art Speicherpunkt oder so etwas setzen?
    Schau dir sowas mal an.

    VB.NET-Quellcode

    1. Imports System.Xml.Serialization
    2. Imports System.IO
    3. Public Class Form1
    4. Shared Sub SaveXML(ByVal filename As String, ByVal player As Player)
    5. 'Um die Daten Speichern zu können muss das Objekt an den XMLSerializer übergeben werden.
    6. 'In diesem Fall die Instanz der Klasse ClassDresses
    7. Dim xml As New XmlSerializer(GetType(Player))
    8. Using fs As New FileStream(filename, FileMode.Create)
    9. xml.Serialize(fs, player)
    10. fs.Close()
    11. End Using
    12. End Sub
    13. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    14. Dim l As New List(Of String) From {"Schwert", "Rüstung"}
    15. Dim p As New Player()
    16. p.Name = "LaMiy"
    17. p.Items = l
    18. SaveXML("test.xml", p)
    19. End Sub
    20. End Class
    21. Public Class Player
    22. Public Property Name As String
    23. Public Property Items As New List(Of String)
    24. End Class


    Quelle.
    [VB.NET] Tutorial über das Speichern und Laden von XML-Dateien

    Ergebnis:

    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0"?>
    2. <Player xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    3. <Name>LaMiy</Name>
    4. <Items>
    5. <string>Schwert</string>
    6. <string>Rüstung</string>
    7. </Items>
    8. </Player>

    Xylon schrieb:

    immer verschiedene Charaktere
    Dann mach Dir eine übergeordnete Klasse, deren Member die Stände aller Charaktere sind. :rolleyes:
    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!

    Xylon schrieb:

    das ist noch etwas neu für mich
    Vielleicht stellst Du mal Dein Konzept insgesamt vor. Und bevor Du anfängst, was zu proggen, reden wir hier mal drüber.
    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!
    @RodFromGermany:
    Hmm nagut. Also vielleicht kennt ihr das Spiel Pheonix Wright ja sogar. Man spielt als Anwalt und muss dementsprechend nach dem Amerikanischen Rechtssystem Kreuzverhöre durchführen, personen befragen und dabei Beweise und Informationen sammeln. Ich hatte mir nun eine einzelne Windows-Forms Anwendung als Menü erstellt. Ein zweites soll dann das Spiel an sich werden. An sich ist das garnicht so schwer da ich ja nur ein Label habe was geändert werden muss bzw. die Beweise (Die ich mit PictureBoxen mache) und die Informationen die ich mit einfachen Booleans deklarieren kann. Wenn man dann ein Kreuzverhör durchführt setzte ich wieder Booleans ein ob man richtig liegt oder nicht. Das einzige Problem ist halt festzuhalten wo der Spieler gerade ist. So jetzt könnte man natürlich für jede Szene eine Forms Anwendung oder dll anlegen, aber erfahrene Benutzer könnten so ja einfach schon weitermachen.

    Das ist so mein Konzept. Ich werd mich mal die nächsten Wochen intensiver damit befassen.
    Die Frage, die sich mir beim Durchlesen stellt: Weißt du was eine Klasse ist, wie du sie einsetzt und kennst du dich allgemein in OOP aus? Wenn ja, solltest du schnell auf die Idee kommen, z.B. eine Klasse Namens "Stage" zu erstellen, die Eigenschaften für alle Informationen des aktuellen Falls / Stage / Szene bereitstellt. Davon kannst du dann für jeden Fall / Szene die du dir ausdenkst ein Objekt erstellen und wenn du das Spiel speichern möchtest, serilisierst du einfach den aktuellen Stage (also das aktuelle Object von Stage) und kannst dann beim nächsten Mal die Informationen wieder laden und von dort weiter machen. Es kann natürlich sein, dass dieses Modell für dein Spiel komplett unpassend ist, da ich das Spiel nicht gut genug kenne und ich nicht weiß wie du es umsetzen möchtest. Daher solltest du dich, falls nicht schon geschehen, intensiv mit OOP auseinandersetzen, da nunmal in Vb.net alles darauf aufbaut und du es immer brauchst.
    lg
    Suscurtl

    Xylon schrieb:

    Ich werd mich mal die nächsten Wochen intensiver damit befassen.
    Ohne Dich jetzt beleidigen zu wollen:
    Komm runter von Deiner Wolke und fang mit kleinen Brötchen an.
    Gugst Du hier.
    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!