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

Anonymous

unregistriert

1

05.09.2008, 19:57

[Erledigt] Highscore?

Hallo, ich habe ein Zahlenraten-Spiel programmiert, wo auch ein Highscore mit drin ist.
Es gibt "Lebensenergie = 100;" nach jeder falscher Eingabe von der "Zufallszahl = (rand()%100);" werden "-= 10" von den Lebensenergie abgezogen. Wenn es dann bei z.B. 40 Lebensenergie rausgefunden hat, wird der Highscore auf 100 Lebensenergie geschpeichert!!

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
#include <iostream>
#include <windows.h>

using namespace std;
#pragma comment (lib, "winmm.lib")
int Spielen (int Auswahl, int Lebensenergie, int Highscore);
int TesteHighscore (int Highscore, int Lebensenergie);
int Highscore;

int main ()
{
    // Variablen

    int Auswahl = 0;
    int Lebensenergie = 100;

    while (Auswahl != 3)
    {
        cout << "ZAHLENRATEN" << endl;
        cout << "~~~~~~~~~~~" << endl;
        cout << "1) Spielen" << endl;
        cout << "2) Highscore" << endl;
        cout << "3) Beenden" << endl;
        cout << "~~~~" << endl;
        cout << "Deine Wahl: ";
        cin >> Auswahl;
        cout << "\n\n\n";

        switch (Auswahl)
        {
        case (1):
            {
                srand (timeGetTime());
                Spielen (Auswahl, Lebensenergie, Highscore);

                Highscore = TesteHighscore (Highscore, Lebensenergie);
            } break;

        case (2):
            {
                cout << "Bestleistung: " << Highscore;
                cout << "\n\n\n";
            } break;

        case (3):
            {
            } break;

        default:
            {
                cout << "ERROR: Falsche Eingabe" << endl;
                cout << "\n\n\n";

                if (cin.good ())
                {
                    cin.clear ();
                    cin.ignore ();
                }
            } break;
        } // switch

    } // while


    return 0;
}

int Spielen (int Auswahl, int Lebensenergie, int Highscore)
{
    int Zufallszahl;
    Zufallszahl = (rand()%100);

    while (Lebensenergie != 0 && Auswahl != Zufallszahl)
    {
        cout << "Lebensenergie: " << Lebensenergie << endl;;
        cout << "Waehle eine Zahl zwischen 1 und 100!" << endl;
        cout << "Zahl eingeben: ";
        cin >> Auswahl;

        if (Auswahl < Zufallszahl)
        {
            cout << "Deine Zahl ist zu klein!!" << endl;
            Lebensenergie -= 10;
            cout << "\n\n\n";
        }

        else if (Auswahl > Zufallszahl)
        {
            cout << "Deine Zahl ist zu gross!!" << endl;
            Lebensenergie -= 10;
            cout << "\n\n\n";
        }

        else if (Auswahl == Zufallszahl)
        {
            cout << "Richtige Zahl!!" << endl;
            Highscore = Lebensenergie;
        }

        else if (Lebensenergie == 0)
        {
            cout << "Spiel verloren..." << endl;
            cout << "\n\n\n";
        }

        if (cin.good ())
        {
            cin.clear ();
            cin.ignore ();
        }
    } // while


    return Lebensenergie;
}

int TesteHighscore (int Highscore, int Lebensenergie)
{
    if (Lebensenergie > Highscore)
    {
        cout << "Neuer Highscore!!\n\n\n" << endl;
        Highscore = Lebensenergie;
    }

    else if (Lebensenergie < Highscore)
    {
        cout << "Kein neuer Highscore!!\n\n\n" << endl;
    }

    return Highscore;
}

Errschaffer

Alter Hase

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

2

05.09.2008, 20:08

Ja und zwar übergibst du wenn du eine Variable mit einer Parameterliste übergibst ja nicht die eigentliche Variable sondern eine Kopie.

Bei der Funktion TesteHighscore übergibst du also der Funktion Testehighscore wieder die Variable aus der main Funktion und nicht die aus der Funktion spielen. (Daher steht im Highscore immer 100).
Als ich an der stelle des Buches war habe ich das mit globalen Variabeln gelöst was aber auch nicht die beste Lösung ist.


Du hast doch Heiko´s Buch oder? Schau dir nochmal an wie er das Zahlenratenspiel gelöst hat.

Anonymous

unregistriert

3

05.09.2008, 20:10

Hab da geschaut, komme da aber auch nicht weiter!

EDIT: Habe nochmals geschaut und nichts rausgefunden!!

4

05.09.2008, 23:20

Du möchtest sicherlich, dass deine Spielen-Funktion die Lebensenergie verändert, denn sonst würde die Hightscoreüberprüfung keinen Sinn machen. Da du die Lebensenergie ganz normal als Parameter übergibst, sind die Änderungen nur innerhalb der Spielen-Funktion gültig.
Wenn du willst, dass die Funktion sie verändern darf, dann musst die Variable als Referenz nehmen (oder Pointer).

Haxx0r

Treue Seele

Beiträge: 209

Wohnort: Da!

Beruf: Rebell mit aktivem Lebensstil

  • Private Nachricht senden

5

06.09.2008, 08:00

Mal ganz am Rande: Du solltest Objekt Orientierter arbeiten, so wird
das nur noch ein riesen gewurschtel...Weil dann hätte man auch
mal mehr Lust deinen Code anzuschauen...;-)

Anonymous

unregistriert

6

06.09.2008, 09:27

Haxx0r
Nonsens, die ganzen Quake-Teile, Duke Nukem, die ganzen Blizzard-Games (bis auf WoW und SF2, da weiß ichs noch nicht genau) und mehrere Tausend andere Games wurden ohne OOP gecodet. Eine generelle Aussage wie OOP = Sauberer ist falsch.

Er soll seinen weg gehen.

Achja, du bist ja so ein TGGC-Fan: Er hätte sich den Code angesehen, egal ob C oder C++. Etwas, was dein "Gott" dir weit voraus hat.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

06.09.2008, 10:53

Zitat

Eine generelle Aussage wie OOP = Sauberer ist falsch.

Auch wenn ich dir da grundsätzlich zustimme, vereinfachen Klassen und OOP das ganze ungemein. Vor allem mit C++ ist es sehr hilfreich.
Man kann natürlich auch mit OOP alles sehr unsauber machen, kein Thema, aber wenn man mal so ein Werkzeug hat, sollte man es auch nutzen.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

06.09.2008, 10:59

Zitat von »"drakon"«


Man kann natürlich auch mit OOP alles sehr unsauber machen, kein Thema, aber wenn man mal so ein Werkzeug hat, sollte man es auch nutzen.


Da bin ich anderer Meinung. Auch Carmack & Co hatten die Werkzeuge und haben sich ganz bewusst nicht dafür entschieden.
Ich finde auch, dass jeder verwenden sollte was ihm für sich, und für die anstehende Aufgabe, am meisten zusagt.
Und eigentlich "vereinfachen Klassen und OOP das ganze" garnicht. Sondern machen alles wesentlich komplizierter! :-)
@D13_Dreinig

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

9

06.09.2008, 11:06

Zitat von »"David_pb"«

Zitat von »"drakon"«


Man kann natürlich auch mit OOP alles sehr unsauber machen, kein Thema, aber wenn man mal so ein Werkzeug hat, sollte man es auch nutzen.


Da bin ich anderer Meinung. Auch Carmack & Co hatten die Werkzeuge und haben sich ganz bewusst nicht dafür entschieden.
Ich finde auch, dass jeder verwenden sollte was ihm für sich, und für die anstehende Aufgabe, am meisten zusagt.
Und eigentlich "vereinfachen Klassen und OOP das ganze" garnicht. Sondern machen alles wesentlich komplizierter! :-)


Hmm. Ok. Man kann es auch so sehen. Auf mich macht der OOP Ansatz einfach einen logischeren Eindruck. Kann aber auch rein persönliches empfinden sein.
Irre ich mich da, oder wurde Quake 4 nicht auch in C++ und OOP programmiert?

btw:
Ich bin mal davon ausgegangen, dass der OP schon C++ & OOP will. Ansonsten hat er das falsche Buch. :)

Anonymous

unregistriert

10

06.09.2008, 11:54

drakon
Der Ausdruck C++ ist wie "Engine" einer der Verwaschensten die es gibt.

Jeglicher Scheiss wird als "Engine" bezeichnet und jeglicher C-Code als C++.

Werbeanzeige