Hallo Hello_Kitty, danke für deine sehr hilfreiche Antwort. Bringt mir schonmal etwas Licht in die Sache. Also ich hab genau das gemacht was der Autor im Buch gesagt hat. Das es evtl. srand (time(NULL)); heißen muss hab ich mir via Google zusammengesucht, bin mir da aber nicht ganz sicher...
Da ich so etwas wie Zahlenraten oder TicTacToe als App fürs Handy gerne in C++ programmieren möchte, bin ich daran interessiert möglichst Plattformunabhängig zu sein und das ist die erste Möglichkeit seit Kapitel 1.
Bis dahin ist es noch ein Stück, da ich erstmal etwas mehr über Klassen, Pointer etc. lernen möchte. Was ich bis dato gelesen habe ist, das C++ und Apps eher nicht so optimal ist. Java wäre hier besser, aber naja, als Anfänger kann ich das schlecht einschätzen. Bücher hab ich mir wie gesagt schon gekauft also bleib ich bei C++, wäre ja Schade drum.
FEHLER
c:\spieleprogrammierer_testaufgaben\zahlenraten spiel\main_4.11.cpp(30): warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data
|
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
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
|
// C++ für Spieleprogrammierer
// Listing 4.11
// Zahlenraten
//
#include <iostream>
#include <time.h>
using namespace std;
// #pragma comment (lib, "winmm.lib")
// Funktionsprototypen
//
int Spielen(int Level);
int WaehleLevel(int Level);
int TesteHighscore(int Punkte, int Highscore);
void ZeigeInfos();
// Hauptprogramm
//
int main()
{
// Variablen
//
char Auswahl; // Gewählter Menüpunkt
int Level = 5; // Aktueller Level
int Highscore = 100; // Akuteller Highscore
// Zufallsgenerator initialisieren
srand (time(NULL));
// Verarbeitung des Menüs
do
{
// Menü ausgeben
//
cout << "Zahlenraten - Menue" << endl;
cout << "-------------------" << endl;
cout << "(N)eues Spiel starten" << endl;
cout << "(L)evel waehlen" << endl;
cout << "(H)ighscore anzeigen" << endl;
cout << "(I)nfo" << endl;
cout << "(B)eenden\n\n";
// Eingabe abfragen
cout << "Asuwahl: ";
cin >> Auswahl;
// Je nach Eingabe verzweigen
switch (Auswahl)
{
// Neues Spiel starten?
case ('n'):
case ('N'):
{
// Spielen
int Punkte;
Punkte = Spielen(Level);
Highscore = TesteHighscore(Punkte, Highscore);
}break;
// Level wählen?
case ('l'):
case ('L'):
{
Level = WaehleLevel(Level);
}break;
// Highscore anzeigen?
case ('h'):
case ('H'):
{
cout << "Der aktuelle Highscore liegt bei ";
cout << Highscore << " Punkten\n\n";
}break;
// Informationen anzeigen?
case ('i'):
case ('I'):
{
ZeigeInfos();
}break;
// Spiel beenden?
case ('b'):
case ('B') :
{
cout << "Spiel beendet." << endl;
}break;
// Falsche Eingabe?
default:
{
cout << "Falsche Eingabe!\n\n";
}
}
} while (Auswahl != 'b' && Auswahl != 'B'); // Spiel beenden?
cout << "Bis zum naechsten Mal" << endl;
return 0;
} // main
// ZeigeInfos
//
// Aufgabe: Informationen zum Spiel anzeigen
//
void ZeigeInfos()
{
cout << "Zahlenraten V1.0" << endl;
cout << "Beispiel aus \"C++ Spieleprogrammierer\"";
cout << "\n\n";
} // ZeigeInfos
// WaehleLevel
//
// Aufgabe: Neuen Level auswählen
//
int WaehleLevel(int Level)
{
int NeuerLevel;
do
{
// Neuen Level wählen
cout << "Akuteller Level: " << Level << endl;
cout << "Neuer Level (1 - 10): ";
cin >> NeuerLevel;
// Ungültigen Level gewählt?
if (NeuerLevel < 1 || NeuerLevel > 10)
{
// Fehlermeldung ausgeben
cout << "Ungueltiger Level - Wert" << endl;
}
} while (NeuerLevel < 1 || NeuerLevel > 10);
// Gewählten Level zurückgeben
return NeuerLevel;
} // WaehleLevel
// Spielen
//
// Aufgabe: Das eigentliche Spiel spielen
//
int Spielen(int Level)
{
int Zufallszahl; // Zufallszahl, die erraten werden muss
int GerateneZahl = 0; // Zahl, die der Spieler eingibt
int Bereich = Level * 10; // Bereich der Zufallszahl
int Versuche = 0; // Anzahl der bisherigen Versuche
int Punkte = 0; // Punktzahl
// Zufallszahl ermitteln
Zufallszahl = (rand() % Bereich) + 1;
// Bereich ausgeben, in dem geraten wird
cout << "\nDie gesuchte Zahl liegt zwischen 1 und ";
cout << Bereich << endl;
// So lange raten, bis die Zahl gefunden wurde
while (GerateneZahl != Zufallszahl)
{
cout << "Dein Tipp: ";
cin >> GerateneZahl;
Versuche++;
// Zahl hat nicht gestimmt, also Hinweis ausgeben
if (GerateneZahl < Zufallszahl)
cout << "Die gesuchte Zahl ist groesser" << endl;
if (GerateneZahl > Zufallszahl)
cout << "Die gesunde Zahl ist kleiner" << endl;
}
// Die Zahl wurde erraten!
cout << "\nGeschafft ! " << endl;
cout << "Du hast die Zahl nach " << Versuche;
cout << " Versuchen erraten !\n\n";
// Punkte berechnen
// Desto weniger Versuche und desto höher das Level.
// je mehr Punkte werden vergeben
//
Punkte = Bereich - Versuche + 1;
Punkte *= Level;
// Wenn mehr Versuche benötigt wurden, als es Zahlen gibt.
// kann das Ergebnis negativ sein.
//
if (Punkte < 0)
Punkte = 0;
// Punkte ausgeben
cout << "Punkte: " << Punkte << endl;
// Punkte zurückgeben
return Punkte;
} // Spielen
// TesteHighscore
//
// Aufgabe: Prüfen, ob der Highscore geknackt wurde
//
int TesteHighscore(int Punkte, int Highscore)
{
// Prüfen, ob der Highscore geknackt wurde
if (Punkte > Highscore)
{
cout << "Glückwunsch, Neuer Highscore !\n\n";
Highscore = Punkte;
}
else
{
cout << "Leider kein neuer Highscore\n\n";
}
// Highscore zurückgeben
return Highscore;
} // TesteHighscore
|