Spielstand speichern
-
Ich bin dabei ein Konsolen spiel zu programmieren und meine frage ist jetzt
wie kann man Spielstände für einzelne Benutzer speichern?
Ich programmiere in in C++.
Das Spiel ist ein Textadventure.
ICh fang halt klein an.mfg.
Stefan
-
wenn du die dauerhaft speichern willst dann mach einen ordner auf der platte und da ein paar .txt files...in die kannst du die namen und anderen sachen reinschreiben (pkt und alles)
FILE *pointer =fopen(pfad,read oder write);kannst ja in der msdn schaun was du nehmen willst!
solltest aber schauen ob der pfad variabel sein soll...wenn einer das spiel z.b auf
statt auf C: haben will...
MfG Kuldren
-
Gutes altes Ansi C
-
Oder die fstream Sachen. ostream für Schreiben, istream zum Lesen.
Bye, TGGC
-
Danke für die schnellen antworten.
Also wie man eine datei liest und schreibt weiß ich aber wie mache ich
das im Programm? Also das er da startet wo der oder diejenige abgespeichert hat.mfg.
Stefan
-
Da ist die Frage, wie dein Textadventure aussieht.
Ich hab dafür immer ein Array mit switches benutzt. War ein switch gesetzt, war eine bestimmte handlungsrelevante Funktion durchgeführt worden. Wenn du es ähnlich gemacht hast, müsste dieser weggesichert werden.
Was dann noch fehlt sind Inventar und Position des Spielers.cYa
DjR
-
Stefan311 schrieb:
Also das er da startet wo der oder diejenige abgespeichert hat.
Indem du die POsition wo gespeichert wirst auf HD schreibst und beim Laden wieder ins RAM lädst.
Bye, TGGC
-
TGGC schrieb:
Stefan311 schrieb:
Also das er da startet wo der oder diejenige abgespeichert hat.
Indem du die POsition wo gespeichert wirst auf HD schreibst und beim Laden wieder ins RAM lädst.
Bye, TGGC
so langsam versteh ich deinen Humor..
-
DocJunioR schrieb:
TGGC schrieb:
Stefan311 schrieb:
Also das er da startet wo der oder diejenige abgespeichert hat.
Indem du die POsition wo gespeichert wirst auf HD schreibst und beim Laden wieder ins RAM lädst.
Bye, TGGC
so langsam versteh ich deinen Humor..
weil du auch so auf POs stehst wie er?
rapso->greets();
-
Du musst dir überlegen, welche Objekte den aktuellen Spielzustand beschreiben. Bei mir gibt es oft eine Klasse "Game", die nicht, wie man meinen könnte, irgendwie was globales darstellt, sondern Instanzen davon sind einzelne Spiele (die Dinger, die man startet und dann gewinnt oder verliert). In jedem Spiel gibt es bei einem RTS eine Karte, eine Liste aller Objekte, Spieler-Informationen (Kontostand). Bei einem Ego-Shooter wäre es nicht so viel anders: Eine Karte, Informationen über den Spielerzustand, alle Projektile die gerade durch die Luft sausen, alle Objekte auf der Karte, alle Deformierungen, abgeschlossene Teilmissionen...
Alles, was irgendwie den aktuellen Zustand von einem Spiel beschreibt, kann man hier reinpacken... muss man aber nicht. Man muss nur wissen, was man alles braucht und dann ist sowas vielleicht praktisch.Jetzt musst du dir für alle diese Entitäten eine Methode ausdenken, sie zu speichern und zu laden. Du könntest, wenn es Klassen sind, jede Klasse eine save(ostream&) Methode implementieren lassen. Naja, darüber habe ich mir nicht viel Gedanken gemacht, in C# jag ich alles nur durch einen Serializer. Im Grunde musst du halt Serialisierung selber implementieren, überlegen, wie du etwas so als Bytefolge darstellst, dass du es wieder sinnvoll laden kannst.
-
Also könnte ich ein array machen denn wert wo der spieler ist kann
gespeichert werden und wird geladen wenn man es will.Ginge es so?mfg.
Stefan
-
Warum soll es so nicht gehen?
-
ich hab noch nie sowas programmiert.
mfg.
Stefan
-
Stefan311 schrieb:
ich hab noch nie sowas programmiert.
Ich auch nicht.
Bye, TGGC
-
Aber ich geh mal davon aus das ihr mehr Erfahrungen habt ich
programmiere seit letztes jahr herbst ungefähr als Hobby Aber ich
hoffe natürlich das als ausbildung machen zu können.mfg.
Stefan
-
Bei einem einfachen Textadventure nutzt du am einfachsten ein Array für die Zustände.
Beispiel:
Pseudo:
if (Array[0] == 0) // Geld noch nicht genommen Text("Da liegt Geld rum"); if (SpielerNimmtGeld() && Array[0] == 0) { InsInventar("Geld"); Array[0] = 1; }
Wenn im Feld 0 eine 1 steht bedeutet das also das der Spieler das Geld eingesammelt hat. Speichern kannst du das dann am einfachsten als Text
a la0 = 1 1 = 0 2 = 0 3 = 0 4 = 1 5 = 0 usw...
...und überträgst die Werte beim laden wieder ins Array. Dann hast du genau den Zustand wieder den du erzeugt hast.
-
Danke.Daran hatte ich noch garnicht gedacht das mit zuspeichern.
Kann man Eigentlich daten sofort in einem integer einlesen?mfg.
Stefan
-
Jeap kannst sofort in nen Integer laden:
int integer; ifstream file("myfile.txt"); file >> integer; file.close();
Array aus datei laden kannst du vielleicht so machen:
int integers[100]; ifstream file("myfile.txt"); for(int i=0; i<100; i++) { file >> integers[i]; } file.close();
-
Danke und ich dachte immer man kann nur Strings aus der Datei lesen.
Ich hab jetzt etwas ungefähres:
Wenn man ein gespeichertes Spiel laden will gibt man den namen von dem Profil
an.Das Programm äffnet es liest die zahlen aus und fertig.Wenn man neu das spiel anfängt gibt man ein Profilnamen ein das Programm erstellt drei Dateien:
Wo man ist,
Was man hat,
Stärke,Zauber,leben,etc...Nochmals Danke jetzt weiß ich ungefähr wie ich das machen kann.
mfg.
Stefan
-
Stefan311 schrieb:
Nochmals Danke
np
Bye, TGGC