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

11

15.12.2009, 21:04

Strukturen sind in C++ praktisch von den Möglichkeiten her fast gleich, nur dass bei einer Struktur alle Elemente public sind ;)
Entry war einfach nur ein Beispielhafter Name für die Struktur, in der du die Highscoredaten speicherst. Du hast es ja jetzt HighscoreEntry genannt.
Zum Sortieren, guck dir mal std::sort an. Damit kannste jeden Typ, der operator < Unterstützt sortieren. Einfach die beiden Iteratoren übergeben.

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

12

15.12.2009, 21:23

ach ja
Wikipedia gibt ne Lösung =)
so.. nächste frage bevor ich das ganze zamschreib:
wenn ich die jetzt sortiere, wird der name mitsortiert bzw. wie geht es dann wenn es nicht mitsortiert wird.Nur duch if?

MfG

13

15.12.2009, 21:25

Du kannst doch einfach mit std::sort

bei deiner Struktur SHighscoreEntry den operator < implementieren, dann wird nur das verglichen, was du willst.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
struct SHighscoreEntry
{

bool operator < (SHighscoreEntry& rhs)
{
 if (Points < rhs.Points)
return true;
else
return false;

}
};

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

14

15.12.2009, 21:31

also rhs ist in diesem fall einfach eine Referenz auf WAS?
Kannst du dich bitte auf das oben genannte Beispiel beziehen.Bin dumm btw.

Also und wenn jetzt das if FALSE zurückgibt heisst das, dass ich diese Points und Name in diese Stelle einügen muss.

15

15.12.2009, 21:34

Der Operator < gibt ja immer ein true zurück, wenn das, mit dem das aktuelle Objekt verglichen wird, "grösser ist", als es selbst.
Die Referenz ist das Objekt, mit dem Verglichen wird.

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

16

15.12.2009, 21:36

Hääääää Bahnhof XD
srry aber ich blick das nicht^^

17

15.12.2009, 21:43

Was ist daran denn so schwer.

Du übergibst ein Object SHighscoreEntry hier rhs als Referenz; von dieser Referenz vergleichst du die Punkte mit dem Object das in deinem Code dann links vom "<" stehen würde.
Wenn der Wert der Referenz größer ist wird true zurückgegeben, anderenfalls false.

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

18

15.12.2009, 21:47

Hast du schon mal was von Operatorüberladung gehört?
Wenn nicht:
http://www.math.uni-bayreuth.de/~rbaier/…c++/node52.html
Ist nicht optimal, aber was besseres habe ich nicht gefunden...

&rhs ist das, was auf der RightHandSide steht,

d.h.:

C-/C++-Quelltext

1
if(iPunkte<Highscore){...}

hier wäre Highscore vom Typ SHighscoreEntry, iPunkte ein int, es würde aber trotzdem klappen, da nicht der standard-operator (int < int)
sondern int<SHighscoreEntry aufgerufen wird.

Ist es so verständlicher?

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

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

19

15.12.2009, 22:00

so dank benni hab ich es verstanden.
Frage:
Ich hab es jetzt mal einfach so gemacht(noch kein sortieren):

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
#include "Framework.hpp"
#include "Game.hpp"
#include <iostream>
#include <fstream>
#include <SDL.h>
#include <string>

int main (int argc, char *argv[])
{
    int Selection;
    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].Points=(i+1);
        }
        Output.open("Highscore.hsc",ios::binary);
        for(i=0;i!=10;i++)
        {
            
            Output.write((char*)&Rank[i],sizeof(Rank[i]));
            
        }
        Output.close();
    }
    else
    {
        Input.close();
    }

    do
    {

        // 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)
            {
                cout<<"Ihren Namen bitte: ";
                //  cin>>(Game.playerName);

            }

            if (Selection==2)
            {
                for(i=0;i!=10;i++)
                {
                    cout<<i+1<<".   "<<Rank[i].Name<<"     "<<Rank[i].Points<<endl;
                }
            }
            if (Selection==3)
            {
                Game.Quit ();
                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 ();

        //Hierhin wo Highscore eingefügt wird


        // Spiel beenden

        Game.Quit ();

        // Framework beenden

        g_pFramework->Quit ();
        g_pFramework->Del ();
    }while(Selection!=3);

  return (0);

}


Fehlercode:

Quellcode

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
"SDL_Game.exe": "C:\Users\Admin\Desktop\c++\SpaceGame\Space_Shooter\Release\SDL_Game.exe" geladen, Symbole wurden geladen.
"SDL_Game.exe": "C:\Windows\System32\ntdll.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\kernel32.dll" wurde geladen
"SDL_Game.exe": "C:\Users\Admin\Desktop\c++\SpaceGame\Space_Shooter\SDL.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
"SDL_Game.exe": "C:\Windows\System32\advapi32.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\rpcrt4.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\gdi32.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\user32.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\msvcrt.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\winmm.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\ole32.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\oleaut32.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\oleacc.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.21022.8_none_96748342450f6aa2\msvcp90d.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.21022.8_none_96748342450f6aa2\msvcr90d.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\shimeng.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\apphelp.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\AppPatch\AcLayers.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\shell32.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\shlwapi.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\userenv.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\secur32.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\winspool.drv" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\mpr.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\imm32.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\msctf.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\lpk.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\usp10.dll" wurde geladen
"SDL_Game.exe": "C:\Program Files\Google\Google Desktop Search\GoogleDesktopNetwork3.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\ws2_32.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\System32\nsi.dll" wurde geladen
"SDL_Game.exe": "C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.6002.18005_none_5cb72f96088b0de0\comctl32.dll" wurde geladen
"SDL_Game.exe": "C:\Program Files\Google\Google Desktop Search\GoogleDesktopNetwork3.dll" entladen.
"SDL_Game.exe": "C:\Windows\System32\ws2_32.dll" entladen.
"SDL_Game.exe": "C:\Windows\System32\nsi.dll" entladen.
Der Thread 'Win32 Thread' (0x1364) hat mit Code 0 (0x0) geendet.
Eine Ausnahme (erste Chance) bei 0x6383ee64 in SDL_Game.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x5f9a31a4.
Unbehandelte Ausnahme bei 0x6383ee64 in SDL_Game.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x5f9a31a4.
Eine Ausnahme (erste Chance) bei 0x6383ee64 in SDL_Game.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x5f9a31a4.
Unbehandelte Ausnahme bei 0x6383ee64 in SDL_Game.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x5f9a31a4.
Eine Ausnahme (erste Chance) bei 0x6383ee64 in SDL_Game.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x5f9a31a4.
Unbehandelte Ausnahme bei 0x6383ee64 in SDL_Game.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x5f9a31a4.
Das Programm "[1076] SDL_Game.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.


Was für ne Zugriffsverletzung und warum und wieso und wie??

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

20

15.12.2009, 22:15

Der springt im Debug Modus bei ner Exeption doch immer an eine bestimmte Stelle (sofern du VC2008 benutzt)
wo ist diese?

und was macht

C-/C++-Quelltext

1
while(Selection!=1&&Selection==2) 

Da? der zeigt das menü nur solange an, bis Selection != 2 ist!
Das Selection != 1 macht keinen unterschied, da Selection nicht gleichzeitig 1 und 2 sein kann :lol:

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

Werbeanzeige