Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

ich1994

Treue Seele

  • »ich1994« ist der Autor dieses Themas

Beiträge: 164

Wohnort: Erlangen(nähe Nuernberg)

Beruf: Bald Abiturient(kein job eig...)

  • Private Nachricht senden

1

14.12.2009, 21:13

Erweiterung der SDL-Games

http://rapidshare.com/files/320874873/Space_Shooter.rar.html

Hier sind all meine Daten.
Als ich versucht eine Highscoreliste zu implentieren sind mir viel fragen aufgestoßen.
Multimap oder map oder list und wie les ich die daten ein und aus usw..

Könnt ihr mal euch das bitte anschauen da ich keine Ideen mehr hab
Das ist der Stand den ich jetzt bisher habe.

MfG

ich1994(ich ich bin erst 15^^)

2

15.12.2009, 14:01

Noch 45 Sec warten. Phä, such dir nen anderen Filehoster, Rapidshare ist unbeliebt.
Tipp: Dropbox ist extrem geschickt.

Werds mir dann mal ziehen, und gucke.

PS: Alter ist keine Entschuldigung, bin auch erst 13 ;)

EDIT: Also jetzt.

- Die 2 Verschiedenen Dateien bzw. listen kannste dir sparen, wenn du eine struct machst. z.B.

C-/C++-Quelltext

1
2
3
4
5
struct SHighscoreEntry
{
int            Points;
std::string Name;
};


- Diese Struct dann in die Datei schreiben.

- Beim Eintragen, prüfen, ob die Punktzahl, die Eingetragen soll grösser ist, als die Des aktuellen Eintrags, und kleiner, als die des nächsten. Dann muss es an die stelle.

- Zum Ein - und auslesen:
Einfach jedes Element des Vektors / der Liste nacheinander in die Datei schreiben. Auf die selbe Art wieder einlesen.

- Kommentare schaden nicht ;)

- Kompiliert wird diese Version auch nicht, da du z.B. immer bei den For schleifen

for (Test = 0, ....)
statt: for (Test = 0; (aufn Semikolon kommts an. ;) )

- Was macht dass für einen Sinn ?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
if (Input == NULL) // also es gab einen Fehler beim erstellen

{
 // blabla

} 
else
{ 
// erfolgreich 

Input.close (); /// <--- ??

}

ich1994

Treue Seele

  • »ich1994« ist der Autor dieses Themas

Beiträge: 164

Wohnort: Erlangen(nähe Nuernberg)

Beruf: Bald Abiturient(kein job eig...)

  • Private Nachricht senden

3

15.12.2009, 19:52

Zitat von »"E122"«

Noch 45 Sec warten. Phä, such dir nen anderen Filehoster, Rapidshare ist unbeliebt.
Tipp: Dropbox ist extrem geschickt.

Werds mir dann mal ziehen, und gucke.

PS: Alter ist keine Entschuldigung, bin auch erst 13 ;)

EDIT: Also jetzt.

- Die 2 Verschiedenen Dateien bzw. listen kannste dir sparen, wenn du eine struct machst. z.B.

C-/C++-Quelltext

1
2
3
4
5
struct SHighscoreEntry
{
int            Points;
std::string Name;
};


- Diese Struct dann in die Datei schreiben.

- Beim Eintragen, prüfen, ob die Punktzahl, die Eingetragen soll grösser ist, als die Des aktuellen Eintrags, und kleiner, als die des nächsten. Dann muss es an die stelle.

- Zum Ein - und auslesen:
Einfach jedes Element des Vektors / der Liste nacheinander in die Datei schreiben. Auf die selbe Art wieder einlesen.

- Kommentare schaden nicht ;)

- Kompiliert wird diese Version auch nicht, da du z.B. immer bei den For schleifen

for (Test = 0, ....)
statt: for (Test = 0; (aufn Semikolon kommts an. ;) )

- Was macht dass für einen Sinn ?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
if (Input == NULL) // also es gab einen Fehler beim erstellen

{
 // blabla

} 
else
{ 
// erfolgreich 

Input.close (); /// <--- ??

}


warum muss dieses std::string hin?
ausserdem kannst du mir mal ne funktion zum ein und auslesen der vektoren machen oder mir sagen wie die funktion write vorgeht?
muss ich für jeden spieler ne eigene Datei machen?
EDIT:
Wenn ich die Vektoren jetzt auslese, weiss fstream dann wecher name bzw. Punkt zugehört.Wie schreibt fstream das rein um zu wissen was zu was gehört?
EDIT ZU ENDE

und das letze macht sinn,da ich erst abfrage ob überhaupt eins da ist.Ok das kann ich mit der anderen Funktion verbinden.aber bei alse schlies ich Input wieder, da ich dann (in diesem oberen fall) nichts mehr reinschreiben will.
->ich wollt NUR überprüfen, ob es schon eine Datei gibt

4

15.12.2009, 19:56

std::string ist das selbe, was du da als string verwendest, nur ich war nicht sicher, ob du ein using namespace std; drinne hast ;)
Um den Vektor in die Datei zu bringen, einfach jedes element nacheinander reinschreiben ;)

also in Pseudocode:

Quellcode

1
2
3
4
for (size_t i = 0; i< Vector.size (); i++)
{
  SchreibeInDatei (Vector.at(i));
}

sprich, nur die einzelnen Strukturen reinschreiben ;)

ich1994

Treue Seele

  • »ich1994« ist der Autor dieses Themas

Beiträge: 164

Wohnort: Erlangen(nähe Nuernberg)

Beruf: Bald Abiturient(kein job eig...)

  • Private Nachricht senden

5

15.12.2009, 20:27

also wie jetzt??

ich1994

Treue Seele

  • »ich1994« ist der Autor dieses Themas

Beiträge: 164

Wohnort: Erlangen(nähe Nuernberg)

Beruf: Bald Abiturient(kein job eig...)

  • Private Nachricht senden

6

15.12.2009, 20:28

also wie jetzt
YEAH DOPPELPOST -.-
scheis quadcore^^
ach ja schon mal in den Post wo ich dch zitiert habe da hab ich was editiert irgendow im text^^

7

15.12.2009, 20:34

angenommen du hast ne struct Entry, und nen std::vector<Entry*> dann ist es ja

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
ofstream Output ("Wasweisich.highscore", ios::binary);

if (!Output) return false; // Fehlercode


for (size_t i = 0; i<Vector.size (); i++)
{
        Output.write ((void*) Vector.at(i), sizeof (Entry));
}

Output.close ();

(Achtung ungetestet ;) )

EDIT:
Hab grad den Edit gelesen ;)
Kannst dir die Datei ja mal im Hex-Editor anschaun ;)

ich1994

Treue Seele

  • »ich1994« ist der Autor dieses Themas

Beiträge: 164

Wohnort: Erlangen(nähe Nuernberg)

Beruf: Bald Abiturient(kein job eig...)

  • Private Nachricht senden

8

15.12.2009, 20:38

ich hab mal mit dem hexeditor gelesen und geschaut, als ich nur eine einzige zahl als highscore hatte.
Es stand nur eine einzige Zahl!
Problem=Die zahl ist da nicht bestimmt für welche Variable es mal war und wird so einfach an jede Variable am Programm weitergegeben.

BTW:Was für ein Entry?!?!?

MfG

EDIT: hab mal meinen zurzeitigen Highscore eingetippt wie ich es von dir verstanden hab

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    int i;
    struct HighscoreEntry 
    { 
    int Points; 
    std::string Name; 
    }; 
    HighscoreEntry Rank[9];
    ifstream Input;
    ofstream Output;
    Input.open("Highscore.hsc",ios::binary);
    if(Input==NULL)
    {
        Input.close();
        for(i=0;i!=10,i++)
        {
            Rank[i].Name=("Burak Ok");
            Rank[i].Name=(i+1);
        }
        for(i=0;i!=10,i++)
        {
            Output.open("Highscore.hsc",ios::binary);
            Output.write((char*)&Rank[i].Name,sizeof(Rank[i].Name));
            Output.close();
        }
        for(i=0;1!=10,i++)
        {
            Output.open("Highscore.hhsc",ios::binary);
            Output.write((char*)&Rank[i].Points,sizeof(Rank[i].Points));
            Output.close();
        }
    }

9

15.12.2009, 20:49

Die Struct haste ja gerade, dafür, dass du keine zwei ofstreams brauchst.
Hier mal der wichtigste Teil.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        Input.close();
        for(i=0;i!=10,i++)
        {
            Rank[i].Name=("Burak Ok");
            Rank[i].Name=(i+1);
        }

            Output.open("Highscore.hsc",ios::binary);
        for(i=0;i!=10,i++)
        {

            Output.write((char*)&Rank[i],sizeof(Rank[i]));

        }
            Output.close();
 

Dafür, dass die Werte richtig aus und eingelesen werden kümmert sich ofstream.

PS: Zum thema Instanzen von Strukturen / Klassen in Dateien Schreiben mit Standard-Streams guck dir im Buch mal S. 252 ff (Kapitel 8.5.3 in der 2. Auflage) an

ich1994

Treue Seele

  • »ich1994« ist der Autor dieses Themas

Beiträge: 164

Wohnort: Erlangen(nähe Nuernberg)

Beruf: Bald Abiturient(kein job eig...)

  • Private Nachricht senden

10

15.12.2009, 20:56

thx
und dann mit den klassen mit write kopieren wusste ich schon.
Ich hab auch gleich heute nach der Schuler gehabt eine HIGHSCORE klasse zu machen und einzulesen.Ich errinerte mich anscheinend nur ein Klassen einlesen, da das Kapitel keine Struktur beinhaltet^^.

So... jetzt weiss ich das ja auch
achja noch ne frage dann dazu.
Ich will maximal 10 Plätze haben. Gibt es eine funktion, wie .sort oder so was halt die Punkte sotiert. und sowas wie popback gibt es ja.Ich will eine if-Kapselung eig vermeiden.

MfG

P.S:Ich will immernoch wissen was du mit Entry meinst oder was das ist=)

Werbeanzeige