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

Heiji Hakoda

unregistriert

61

17.12.2009, 21:00

achso
wollte fragen ob du uns vllt mal nen screenshot mgeben kannst?

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

62

17.12.2009, 21:01

Von was?

Heiji Hakoda

unregistriert

63

17.12.2009, 21:03

wie das dann mit der highscore aussieht!

64

17.12.2009, 21:03

Ich weise auf meinen Edit hin. (ist ganz untergegangen unter den neuen Posts (Seite 4)) ;)

EDIT: (nicht auf den weise ich hin ;) )
kann es sein, dass du TempHigh als global, oder zumindest mit einem Grösseren Gültigkeitsbereich als die For-Schleife hast und ihm jedes mal ne neue adresse zuweist ?

z.B.

C-/C++-Quelltext

1
2
3
4
5
6
7
int* a;

for (size_t i = 0; i<10; i++)
{
        a = new int;
        mach was;
}


dabei weist du ein und dem selben Zeiger ja zehnmal einen anderen Wert zu ;)

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

65

17.12.2009, 21:08

also zum ersten:
Ich hab es einfach kopiert.->"düt"
zum "düt":Es kommt er wenn ich den Highscore angezeigt haben will.

Zum TempHigh: ich hab sie als "erstes" gleich nach der Struktur definiert->
Für alle Sachen in main() zugreifbar

EDIT:Kann man das nicht ?

66

17.12.2009, 21:10

Da könnte das Problem liegen ;)

probier mal, statt dass du TempHigh global hinter der Struct hast, dass du ihn in der For-Schleife jedes mal neu machst.

also:

C-/C++-Quelltext

1
2
3
4
5
6
        for(i=10;i!=0;i--)
        {
            HighscoreEntry* TempHigh = new HighscoreEntry;
            Input.read((char*)(TempHigh),sizeof(HighscoreEntry));
            Rank.push_back (TempHigh);
        }

und natürlich das globale wegmache ;)

EDIT:
Das Problem liegt darin, dass du dem einen (armen) ding 10 mal nen neuen wert zuweist, statt 10 verschiedenen 10 verschiedene Werte.

PS: In anbetracht der Grösse des Threads, solltest du für das nächste andere Problem mal nen neuen aufmachen ;) Sonst wirds arg unübersichtlich .

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

67

17.12.2009, 21:15

Code sieht jetzt so aus und "düt" und screen ist immernoch gleich
Code:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#include "Framework.hpp"
#include "Game.hpp"
#include <iostream>
#include <fstream>
#include <SDL.h>
#include <string>
#include <list>
//Wegen Faulheit Global deklariert

struct HighscoreEntry//Struktur für die Highscorespeicherung

    { 
        int Points; 
        string Name; 
    }; 

std::list<HighscoreEntry*> Rank;
std::list<HighscoreEntry*>::iterator ir;

ifstream Input;
ofstream Output;


void setDefaultHigh();//Funktion, wenn kein Highscore da ist einen zu machen

void readHigh();//Funktion, die den Highscore ausliest


int main (int argc, char *argv[])
{
    int Selection;
    int i;
    std::string TempName;
    int TempPoints;

    do
    {
        Input.open("Highscore.hsc",ios::binary);

        if(Input==NULL)//Wenn kein Highscore dann einen schreiben

        {
            Input.close();
            setDefaultHigh();
        }
        else//Wenn ein Highscore dann auslesen

        { 
            Input.close();
            readHigh();
            
        }

        
        // Neue Instanz des Spiels

        CGame Game;
        // Spiel initialisieren

        Game.Init ();
        Selection=2;
        while(Selection!=1&&Selection==2)
        {
            cout<<"*****Menue*****\n";
            cout<<"(1) Spiel starten\n";
            cout<<"(2) Highscore einblenden\n";
            cout<<"(3) Spiel beenden\n";
            cin>>Selection;
            cout<<endl;
            if (Selection==1)
            {
                cin.ignore();
                cout<<"Ihren Namen bitte: ";
                cin>>TempName;
                cin.ignore();
            }

            if (Selection==2)
            {
                i=1;
                for(ir=Rank.begin();ir!=Rank.end();++ir)
                {

                    if (i==10)
                    {
                        cout<<i<<".  "<<(*ir)->Name<<"     "<<(*ir)->Points<<endl;
                    }
                    else
                    {
                    cout<<i<<".   "<<(*ir)->Name<<"     "<<(*ir)->Points<<endl;
                    }
                    i++;
                }
            }
            if(Selection==3)
            {
                for (ir=Rank.begin();ir!=Rank.end();++ir)
                {
                    delete (*ir);
                    (*ir)=NULL;
                }
                Rank.clear();
                return (0);
            }
        }

        if (g_pFramework->Init (800, 600, 16, true) == false)
        {
            return (0);
        }

        // Spiel initialisieren

        Game.Init ();

        // Spiel laufen lassen. Diese Funktion läuft so lange,

        // bis das Spiel geschlossen oder die Escape-Taste

        // gedrückt wird

        Game.Run ();

        TempPoints=Game.playerPoints;//Hierhin wo Highscore eingefügt wird

        i=0;
        for(ir=Rank.begin();ir!=Rank.end()&&i==0;++ir)
        {

            HighscoreEntry* TempHigh = new HighscoreEntry; 
            if(TempPoints >((*ir)->Points))
            {
                TempHigh = new HighscoreEntry;
                TempHigh->Name=TempName;
                TempHigh->Points=TempPoints;
                Rank.insert(ir,TempHigh);
                Rank.pop_back();
                i=1;
            }
        }

        Input.open("Highscore.hsc",ios::binary);
        if(Input==NULL)
        {
             
            Input.close();
            setDefaultHigh();
        }
        
        Input.close();
        readHigh();
        Output.open("Highscore.hsc",ios::binary);
        for(ir=Rank.begin();ir!=Rank.end();++ir)
        {
            Output.write((char*)(*ir),sizeof(*ir));         
            Output.close();
        }

        // Spiel beenden

        Game.Quit ();

        // Framework beenden

        g_pFramework->Quit ();
        g_pFramework->Del ();

        

    }while(Selection!=3);

    for (ir=Rank.begin();ir!=Rank.end();++ir)
    {
        delete (*ir);
        (*ir)=NULL;
    }
    Rank.clear();
    return (0);

}

void setDefaultHigh()
{
    int i;
    HighscoreEntry* TempHigh = new HighscoreEntry; 
    for(i=10;i!=0;i--)
    {
        TempHigh = new HighscoreEntry;
        TempHigh->Name=("Burak Ok");
        TempHigh->Points=(i);
        Rank.push_back (TempHigh);
    }
    Output.open("Highscore.hsc",ios::binary);
    for(ir=Rank.begin();ir!=Rank.end();++ir)
    {
        Output.write((char*)(*ir),sizeof(*ir));
    }
    Output.close();
}

void readHigh()
{
    int i;
    Input.open("Highscore.hsc",ios::binary);
    for(i=10;i!=0;i--)
    {
        HighscoreEntry* TempHigh = new HighscoreEntry;
        TempHigh = new HighscoreEntry;
        Input.read((char*)(TempHigh),sizeof(HighscoreEntry));
        Rank.push_back (TempHigh);
    }
    Input.close();
}

Hier die Ausgabe von Highscore:

(Link)

68

17.12.2009, 21:16

Is immernoch das selbe: der Gültigkeitsbereich von Temp High ist grösser als der von der For-Schleife

C-/C++-Quelltext

1
2
3
4
5
6
7
        HighscoreEntry* TempHigh = new HighscoreEntry;
        for(i=10;i!=0;i--)
        {
            TempHigh = new HighscoreEntry;
            Input.read((char*)(TempHigh),sizeof(HighscoreEntry));
            Rank.push_back (TempHigh);
        } 


muss zu

C-/C++-Quelltext

1
2
3
4
5
6
        for(i=10;i!=0;i--)
        {
               HighscoreEntry* TempHigh = new HighscoreEntry;
            Input.read((char*)(TempHigh),sizeof(HighscoreEntry));
            Rank.push_back (TempHigh);
        } 

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

69

17.12.2009, 21:21

So schau mal jetzt den obigen Editierten gazen Quellcode an.
Btw:Ist immernoch so

70

17.12.2009, 21:41

Ich glabu du solltest mal etwas ordnung in den Code bringen.
Ist jede menge dabei, was man in Funktionen auslagern kann, und dann sieht das ganze doch schon viel ordentlicher aus. ;)
Kommentare schaden auch nichts. Ansonsten würde ich sagen, geht das Debugging weiter ;).

Werbeanzeige