Highscore speichern
-
hallo
ich hab mal ne frage und zwar habe ich ein spiel geschieben (somindest bin gerade dabei) das eine highscore-liste hat.
so ich spiele das spiel, zack punkte bekommen und auf platz 1 gelandet im highscore, so ich gehe zurück ins menü und schaue wer alles auf der liste steht.
so dann 2 stunden gespiel
und keine lust mehr und beende das spiel.
beim nächsten start des spieles (nicht über den compiler sonder über die anwendungs datei) ist der highscore weg und ich muss alles von neu machen.ich denke mein problem ist jetzt anschaulich erklährt
hier habe ich jetzt mal fix ein programm geschieben (das andere will ich net posten da es ja jetzt schon mehr als 10.000 zeile hat)
#include <iostream> #include <string> using namespace std; //variable char name[30]; int Hp; int maxHp = 100; int Geld=40; int Trank=1; int multi=10; //prototypen void name2(); void optionen(); void start(); void nimmTrank(); void kaufTrank(); void wald(); void checkgeldfortrank(); int main() { char Menü; do { cout<<string (8,'\n'); cout<<string (3,'\t')<<"Hallo "<<name << " !" <<endl; cout<<string (3,'\t')<< "<S>piel Starten" <<endl; cout<<string (3,'\t')<< "<N>ame aendern" <<endl; cout<<string (3,'\t')<< "<B>eenden des Spieles" <<endl; cin>>Menü; switch (Menü) { case ('s'): case ('S'): { start(); }break; case ('N'): case ('n'): { getchar(); //warum muss das da Rein? name2(); } break; case ('B'): case ('b'): { cout<<"Spiel Beendet jetzt"; }break; default: { }break; } }while ( Menü != 'b' && Menü != 'B'); system("pause"); return 0; } void name2 () { char ch=0; do { system("cls"); cout <<string(7,'\n'); cout <<string(3,'\t'); cout<<"Wie lautet dein Name?\n"<<string(3,'\t'); cin.get (name,30); cout <<string(2,'\n'); cout <<string(3,'\t'); cout<<"ist dein name \n\n"<<string(3,'\t')<<name<< " ? \n\n " <<string(3,'\t') << "<J>a oder <N>nein"<<endl; cin.get(ch); cin.clear(); cin.get(ch); }while (ch != 'j' && ch != 'J'); system("cls"); } void start() { cout <<"das spiel startet jetzt"; }So das ist zwar jetzt nicht das spiel was ich programmiert habe aber das hier
macht es auch.was soll es machen:
und zwar ich startet das program über die anwendungsdatei oder ne besser ich nehme das mit zu nem kumpel auf dem pc (der kein c++ hat) und und starte es dort
beim ersten start sollte da stehn Hallo ! (2 leerzeichen)
so dann gebe ich den name ein meinetwegen Karl
dann komme ich wieder ins menü und da steht Hallo Karl !
so wenn ich das programm schließe und wieder staret kommt nur Hallo ! sonder Hallo Karl !
bis beispielsweis Max kommt und den name zu max ändertso ich denke so das prinzip sollte verständlich sein (wenn nicht bitte fragen)
so nun meine frage wie verklickere ich den compiler das er die namen (bzw. die daten) speichern soll
-
Indem du eine separate Highscore-Datei erstellst?
-
1. Das ist hier C++. Da nimmt man für Strings Google: std::string
2. Zu deinem Problem: Wie wäre es mit einer Datei, die du öffnest und wo du dann die Daten reinschreibst?
3. Rücke deinen Code mal besser ein
4. Wozu die ganzen globalen Variablen? Viele davon könnte man lokal machen durch einige Anpassungen.
-
Du hast 10.000 Zeilen C++ geschrieben, ohne jemals von den Dateistreams gehört zu haben?

Die heißen ifstream (Eingabe), ofstream (Ausgabe) und fstream (beides), kommen aus dem Header fstream und verhalten sich genau wie die ganzen anderen Streams (du kennst vermutlich den ofstream cout und den ifstream cin, hast diese aber noch nicht als Objekte einer Klasse erkannt), bloß dass sie noch im Konstruktor einen Dateinamen nehmen und noch ein paar weitere dateirelevante Methoden haben (wobei man letztere fast nie braucht).
Und 10.000 Zeilen C++ mit globalen Variablen, rohen Arrays und rein prozedural? Du solltest dringend mal ein bisschen mehr und besseres C++ lernen, dann ist das mit einem Mal auch nur noch 1500 Zeilen lang, viel robuster, vermutlich schneller, viel übersichtlicher und in der Regel auch viel einfacher zu programmieren.
-
pyhax schrieb:
1. Das ist hier C++. Da nimmt man für Strings Google: std::string
2. Zu deinem Problem: Wie wäre es mit einer Datei, die du öffnest und wo du dann die Daten reinschreibst?
3. Rücke deinen Code mal besser ein
4. Wozu die ganzen globalen Variablen? Viele davon könnte man lokal machen durch einige Anpassungen.1. danke für den link
2.eine .cpp datei die ich dann bei quelldatein speichere ich hab da kein plan wie ich das machen soll (frage zwar nur ungern aber kann mir jemand mal ne lösung geben wie gesagt nach der lösung frage ich nur ungern)
3. und 4. ist mir beides durchaus bewusst den code habe ich jetzt mal in 10-15 min HINGEKLATSCHT
-
Maldikus schrieb:
3. und 4. ist mir beides durchaus bewusst den code habe ich jetzt mal in 10-15 min HINGEKLATSCHT
Kein Grund uns sowas unleserliches und unästhetisches vorzusetzen. Je weniger Mühe du dir beim Stellen der Frage gibst, desto weniger Mühe geben die Leute sich beim Antworten.
-
Keine .cpp datei. Nimm einfach eine ganz normal .txt datei die das Program beim starten erstellt und wo es dann die Daten reinschreibt.
-
pumuckl schrieb:
Maldikus schrieb:
3. und 4. ist mir beides durchaus bewusst den code habe ich jetzt mal in 10-15 min HINGEKLATSCHT
Kein Grund uns sowas unleserliches und unästhetisches vorzusetzen. Je weniger Mühe du dir beim Stellen der Frage gibst, desto weniger Mühe geben die Leute sich beim Antworten.
Ja ist mir durchaus Klar. Ich schreibe ja auch in anderen Foren und in den Fall war ich so genervt, dass ich einfach nur die Frage Online stellen wollte.
Wenn man Wochenlang mit einem Problem zu tun hat das einfach net weggeht, ist man einfach nenervtaber das mit ne neuen Datei ist mir noch gar net in den Sinn gekommen da ich bei google na nem Befehl gesucht habe. Kein wunder das ich nichts gefunden habe
ja, sry noch mal dafür ich hoffe ihr helft mir trotzdem
-
Teste mal das(is nur ein schema):
ofstream write; write.open("xy.txt", ios::out | ios::app); write << sNeueHighstore;Du musst halt noh uf error sprüfen,
Aber das is das schema
10000 Zeilen ohne Dateistreams
OMG ... OMG ... OMG 
Ich hoffe, ich konnte helfen

-
Teste mal das(is nur ein schema):
ofstream write; write.open("xy.txt", ios::out | ios::app); write << sNeueHighstore;Du musst halt noh uf error sprüfen,
Aber das is das schema
10000 Zeilen ohne Dateistreams
OMG ... OMG ... OMG 
Ich hoffe, ich konnte helfen

-
ofstream cout
Na, vielleicht geht
std::ifstream stream("SeppJs Tagebuch.txt"); std::cin.rdbuf( stream.rdbuf() );aber du meinst dann doch wohl
ostream
ja, sry noch mal dafür ich hoffe ihr helft mir trotzdem
Du hast *so* wenig Grundwissen in C++, dass du dir erstmal einfach ein gutes Buch holen solltest (siehe Buchlink in Sepps Signatur).
-
Warum ostream??
Is es nicht oFstream?
Und was meinste mit mit dem ifstream?
Er wills doch erstmal nur speichern, oder?
-
virusscript24 schrieb:
Warum ostream??
Is es nicht oFstream?
N3337 27.4.1 schrieb:
Header <iostream> synopsis
#include <ios> #include <streambuf> #include <istream> #include <ostream> namespace std { extern istream cin; extern ostream cout; //......
-
Ja für Dateien ist es dann aber ifstream bzw. ofstream, soweit ich weiss, steht das f für "file"
Hier mal ein Beispielprogramm, vielleicht hilft es ja jemandem, habs nicht getestet, aber müsste richtig sein
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ofstream file_out; file_out.open("Datei.txt",ios_base::out); file_out << "Text"; file_out.close(); string myStr; ifstream file_in; file_in.open("Datei.txt",ios_base::in); file_in >> myStr; file_in.close(); cout << myStr; cin.get(); return 0; }
-
10000 Zeilen sind doch nicht viel, da kann man locker ohne Filestreams auskommen...
Und ios::out sowie ios::in sind bei ofstream und ifstream sowieso schon standardmäßig gesetzt, die kann man sich also sparen. Genau so, wie man open in den ctor schieben kann und damit aus zwei Zeilen eine macht. Und close kann man sich auch sparen, außer in dem Fall hier mit ofstream, da macht das Sinn.