Highscore
-
Ja, das kommt heraus, wenn man nicht die korrekten Header einbindet
Im Gegensatz zu <fstream.h> existiert der Header <string.h> nämlich tatsächlich - hat aber gar nichts mit der C++ Klasse (std::)string zu tun. Die <string.h> enthält ein ganzes Sortiment an Funktionen zur Verarbeitung von C-Strings (nullterminierte char-Arrays), die C++ von C geerbt hat.
-
ah ok
ich danke dir
hab noch eine frage kann man irgendwie die text datei sotieren?
ich find einfach nix dazu:(
mfg
-
Die Datei nicht - die wird so geschrieben, wie die Daten reinkommen. Aber die Daten, die du im Programm verwendest, kannst du sortieren - für dich am einfachsten wäre es wohl, die Paare aus Name und Punktzahl in einer map<int,string> zu speichern.
-
naja bin noch so noob sag ich ma

also die daten die eingelesen werden aus der text datei
kann man sotieren, so hab ich es jetzt vertanden
was ich nicht verstehe ist map int, string
sry
mfg
-
Schau dir mal ein gutes C++ Tutorial an - oder meinen Magazinartikel "Aufbau der STL", dort findest du auch eine Erklärung zu map<>.
(in Kurzfassung: map<> ist eine Sammlung von Wertepaaren - die sortiert nach dem ersten Wert verwaltet werden können)
-
ok danke mach ich mal

mfg
-
irgendwie raff ich das alles net.
kannst du mir ein tipp geben?ich les den inhalt der txt ein in "x" un gebe sie aus.
müsst ich des dann alles mit arrays machen?mfg
-
Wie hast du denn deine Highscore-Datei aufgebaut? (ich würde das oben verwendete "X hat Y Punkte erreicht" abkürzen zu einer Liste mit X und Y)
-
also mein hihgscore is nur :
//highscore anfang { ofstream out("highscore.dll",ios::app); out << "Spieler: "<<name<<" "<<nachname<< ", "<<"Erreichte %: "<< dummheit<<", "<<"Verf"<<ue<<"gbare Joker: "<<joker<< '\n' ;//'\n' neue zeile fstream close("highscore.dll"); } fstream open("highscore.dll"); char x; ifstream in("highscore.dll"); cout<<"\t\t\t\tHighscore"<<endl; cout<<endl; while (in.get(x)) cout << x; //highscore ende
-
Wie gesagt, ich würde den gesamten Rattenschwanz in der Datei weglassen und nur den Namen und die Punkte speichern:
//Ausgabe: out<<name<<' '<<dummheit<<' '<<joker<<endl; //Einlesen: in>>name>>dummheit>>joker; cout << "Spieler: "<<name<<" "<<nachname<< ", "<<"Erreichte %: "<< dummheit<<", "<<"Verf"<<ue<<"gbare Joker: "<<joker<<endl;
-
ich hatte des ma so probiert aber hat nich gefunzt ich werd ma deinen code benutzen
-
ok danke er geht:)
so un wie schaff ich es jetzt "dummheit" zu sotieren
mfg
-
Du fasst alle drei Werte zu einer struct/class zusammen, spendierst ihr einen Vergleichsoperator und packst alle Werte in eine set<>:
struct entry { string name; int dummheit,joker; }; bool operator<(const entry& l, const entry& r) { return l.dummheit<r.dummheit; } ... set<entry> scores; entry val; while(infile>>val.name>>val.dummheit>>val.joker) scores.insert(val); for(set<entry>::iterator pos=scores.begin();pos!=scores.end();++pos) cout<<"Spieler: "<<pos->name", "<<"Erreichte %: "<< pos->dummheit<<", "<<"Verf"<<ue<<"gbare Joker: "<<pos->joker<<endl;(die nächste Verbesserung wäre es noch, aus entry eine vollwertige Klasse zu machen, die sich selbst um Einlesen und Ausgeben kümmert)
-
Aber wenn die Highscore erst mal fertig ist, dann ist der Rest vom Spiel ganz einfach.
