Hallo zusammen.
Ich habe grade das Zahlenratespiel aus Listing 4.11 programmiert bzw. es versucht...
Es läuft auch genau so wie es soll bis zu dem Moment, wo der vorherige Highscore NICHT übertroffen wird. Ist dies der Fall, so liegt der Highscore plötzlich bei enormen Werten wie 156.312 ..
Wird der Highscore übertroffen, so wird der neue Wert wie beabsichtigt richtig gespeichert und dient als Referenz für die nächste Runde..
Ich hab mich jetzt dusselig gesucht und finde den Fehler einfach nicht. Könnt ihr mal drüberschauen? Wäre super!
P.S. Mein Code wird sicher von demjenigen aus dem Buch abweichen, da ich es einfach mal blind selbst versucht habe...
|
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
|
#include <iostream>
#include <Windows.h>
#pragma comment (lib, "winmm.lib")
using namespace std;
int waehleLevel (int Level);
int Ratespiel (int Level, int Multiplikator, int Higscore);
int main ()
{
char chStop;
char chAuswahl;
int Level = 1;
int LevelMultiplikator = 10;
int Highscore = 10;
// Zufallsgenerator initialisieren
srand (timeGetTime());
do
{
cout << "Menue! \n (N)eues Spiel? \n (S)chwierigkeitsgrad einstellen? \n (H)ighscore anzeigen? \n Programm (b)eenden? \n Deine Wahl: ";
cin >> chAuswahl;
cout << endl << endl;
switch (chAuswahl)
{
case ('N'):
case ('n'):
{
Highscore = Ratespiel (Level, LevelMultiplikator, Highscore);
} break;
case ('S'):
case ('s'):
{
Level = waehleLevel (Level);
} break;
case ('H'):
case ('h'):
{
cout << "Highscore: " << Highscore << endl << endl;
} break;
case ('B'):
case ('b'):
{
cout << "Bis zum naechsten Mal! " << endl;
} break;
default:
{
cout << "Falsche Eingabe! " << endl << endl;
}
} // Ende des Switch
} while (chAuswahl != ('b'));
cin >> chStop;
return 0;
}
int waehleLevel (int Level)
{
int temp;
do
{
cout << "Aktueller Level: " << Level << endl;
cout << "Neuer Level (1-10): " ;
cin >> Level;
if ((Level <= 0) || (Level >= 11))
{
cout << "Falsche Eingabe!" << endl;
}
cout << endl << endl;
} while (( Level <= 0) || (Level >= 11));
temp = Level;
return temp;
}
int Ratespiel (int Level, int LevelMultiplikator, int Highscore)
{
int Tipp;
int Levelbereich;
int Zufallszahl;
int Punkte;
int Versuche = 0;
Levelbereich = Level * LevelMultiplikator;
Zufallszahl = (rand()%Levelbereich)+1;
cout << "Die gesuchte Zahl liegt zwischen 1 und " << Levelbereich << " !" << endl;
do
{
cout << "Dein Tipp: ";
cin >> Tipp;
cout << endl;
if(Tipp < Zufallszahl)
{
cout << "Die gesuchte Zahl ist groeßer! " << endl;
}
else if (Tipp > Zufallszahl)
{
cout << "Die gesuchte Zahl ist kleiner! " << endl;
}
else
{
cout << "Super, Zahl erraten! " << endl << endl;
}
Versuche ++;
} while (Zufallszahl != Tipp);
if ((Level * ((Level+3) - Versuche) > 0) == true)
{
Punkte = Level * ((Level+3) - Versuche);
cout << "Deine Punkte: " << Punkte << endl;
if (Punkte <= Highscore)
{
cout << "Leider kein neuer Highscore!" << endl;
}
else
{
cout << "Neuer Highscore!! " << endl;
Highscore = Punkte;
return Highscore;
}
}
else
{
cout << "Leider keine Punkte!" << endl;
return Highscore;
}
}
|