Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Highscore für Spiel erstellen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.08.2005, 22:33 Uhr
Kleine



Hallo!

Vorab gesagt: Ich habe nicht sehr viele Programmiererfahrungen...

Ich möchte gerne für ein Spiel eine Highscore-Liste erstelle, die mir Name und den jeweilige Punktestand speichert (C++).

Hatte daran gedacht, dass beim Start des Spieles die Highscore geladen wird (diese abgespeichert in einer externen Datei) und ich eine interne Liste erstelle, in der ich meine Einträge verwalte.

Allerdings klappt die Umsetzung überhaupt nicht.. Benutze ich dabei ofstream und ifstream?

Vielleicht kann mir jemand helfen und hat einen Ansatz?

Gruß
*Kleine*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.08.2005, 23:12 Uhr
Kleine



Vielleicht noch ein kleiner Ansatz von mir:

#include <fstream>
#include <iostream>
using namespace std;


int main()
{
fstream file_op("c\Test.txt",ios::out);

file_op<<"Test.... Test" << endl;
file_op.close();
return 0;
}

Allerdings komme ich damit nicht ganz weiter, da es noch nicht klappt, dass ich Einträge zu der Datei hinzufüge und sie sortiere... und dann die besten 5 davon ausgebe oder ähnliches.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.08.2005, 08:49 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wenn du sie immer sortieren willst musst du sie einlesen, den neuen hinzufügen (im speicher) und diese dann im speicher sortieren, und dann sortiert in die datei schreiben.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.08.2005, 10:41 Uhr
RedEagle




C++:
struct score
{
char *name;
int  points;
};


Zum sortieren empfehle ich BubbleSort, weils am einfachsten zu verstehen ist

C++:
    score temp; //Hilf's-Variable
    int i, j; //Zähler

    for(i=max; i>=0; i--) //max ist die Maximale anzahl der Einträge
    {
     for(j=1; j<=i; j++)
     {
      if(score.points[j-1] > score.point[j]) //wenn true, dann werden die Zahlen vertauscht
      {
       temp = score[j-1];
       score[j-1] = score[j];
       score[j] = temp;
      }
     }
    }


--
MFG RedEagle

Dieser Post wurde am 18.08.2005 um 10:41 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.08.2005, 11:07 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich würde nicht lange fakeln und ein Highscore als ein Set von Highscore_entries auffasssen, dafür entsprechende Eingabe- ausgabe- und Vergleichsroutien definieren. Der Rest ist dann ein kinderpsiel:

Im folgenden Benötigte Includes:

C++:
#include <iostream>
#include <string>
#include <set>
#include <fstream>



Klasse, die einen Highscoreeintrag abbildet:

C++:
class highscore_entry {
private:
    std::string player;
    unsigned score;

public:
    highscore_entry(const std::string& player_ = "", unsigned score_ = 0) :player(player_), score(score_) { }
    const std::string& get_player() const { return player; }
    unsigned get_score() const { return score; }
    void set_player(const std::string& player_) { player = player_; }
    void set_score(unsigned score_) { score = score_; }
};

bool operator < (const highscore_entry& a, const highscore_entry& b) {
    return a.get_score() < b.get_score();
}

std::ostream& operator << (std::ostream& out, const highscore_entry& entry) {
    out<<entry.get_score()<<'/'<<entry.get_player()<<std::endl;
    return out;
}

std::istream& operator >> (std::istream& in, highscore_entry& entry) {
    unsigned score;
    std::string player;
    in>>score;
    in.ignore(1);
    getline(in, player);
    entry.set_player(player);
    entry.set_score(score);
    return in;
}



Klasse die einen Highscore abbildet, nur Grundgerüst, aber Funktionokkelnd:

C++:
class highscore {

    std::set<highscore_entry, std::greater<highscore_entry> > entries;

public:
    typedef std::set<highscore_entry, std::greater<highscore_entry> >::const_iterator const_iterator;
    typedef std::set<highscore_entry, , std::greater<highscore_entry> >::iterator iterator;

    void insert(const highscore_entry& entry) {
        entries.insert(entry);
        while (entries.size()>10) { // Behält max. 10 Einträge im Highscore
            entries.erase(*entries.rbegin());

        }
    }

    const_iterator begin()  const {
        return entries.begin();
    }

    const iterator end() const {
        return entries.end();
    }

    iterator begin() {
        return entries.begin();
    }

    iterator end() {
        return entries.end();
    }
};

std::ostream& operator << (std::ostream& out, const highscore& highscore) {
    for(highscore::iterator i=highscore.begin(); i!=highscore.end(); ++i) {
        out<<*i;
    }
    return out;
}

std::istream& operator >> (std::istream& in, highscore& highscore) {
    do {
        highscore_entry entry;
        if (in>>entry) highscore.insert(entry);
    } while (in);
    return in;
}


Anwendung:

C++:
int main() {
    highscore h;

    // Einlesen hightscore
    std::ifstream in("highscore.txt");
    if (in) {
        in>>h;
    }
    in.close();

    // Neuen Eintag einfügen.
    std::cout<<"Bitte Punkte/Spieler eingeben, (also zB: 7/Player A): "<<std::endl;
    highscore_entry entry;
    std::cin>>entry;
    h.insert(entry);

    // Highscore wegschreiben
    std::ofstream out("highscore.txt");
    out<<h;

    // Highscore ausgeben
    std::cout<<"Der Highscore momentan: "<<std::endl
             <<h;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.08.2005, 12:35 Uhr
Kleine



Wow, vielen Dank!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: