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

1

04.06.2015, 20:54

Mehrere Würfel auswerten und zuordnen (Kniffel)

Hi, lang ist's her :D

ich steh grad etwas aufm Schlauch. Aktuell hab ich ein Würfelspiel mit 3 Würfeln programmiert. Das höchste ist aktuell der 3er Pasch. 6 > 1.
Als Testversuch wollte ich eine kleine Straße einbauen
1.Würfel = 1
2.Würfel = 2
3.Würfel = 3

Die Überprüfung bei einem Dreierpasch hab ich aktuell so gelöst:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
                //1er Paschabfrage
                    if (Wuerfel_1 == 1)
                    {
                        if (Wuerfel_2 == 1)
                        {
                            if (Wuerfel_3 == 1)
                            {
                                cout << "Herzlichen Glueckwunsch, Du hast einen 1er Dreierpasch gewuerfelt!" << endl;
                            }
                        }
                    }


Bei einer Straße kann ja jeder Würfel in Frage kommen für 1,2 oder 3. Die Möglichkeit ist viel größer als Bei einem simplen Dreierpasch. Ganz zu schweigen wenn 5 Würfel im Spiel sind.

Hättet ihr paar Anregungen für mich evtl.? Danke schonmal im voraus.



Falls wer sich das "Ganze" mal anschauen möchte, hier der Code. Ich hab versucht trotz des Anfängerlevels auf das Gesamtbild zu achten, eben Richtung "Spieleprogrammierung".

Als Übung und auch um mit etwas größerem Code umgehen zu lernen, ist geplant jedes kleine Spielchen in dieses einzubauen. z.B. Zahlen raten, Münze werfen, Stein/Schere/Papier, TicTacTo, 4gewinnt, verschiedene Würfelspiele, evtl später Karten. Langzeitziel soll eine Art Wirtshaus/Spielesammlung sein.

KOMPLETT

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
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
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
#include <iostream>
#include <Windows.h>
#include <stdlib.h>
#pragma comment (lib, "winmm.lib")

using namespace std;

int main()
{
    int Wuerfel_1;
    int Wuerfel_2;
    int Wuerfel_3;

    srand(timeGetTime());

    char Auswahl;
    // int Wurf_Wuerfel_1();

    do
    {
        // Hauptmenue
        cout << "\n\n                                                " << endl;
        cout << "             ________________| ||____               " << endl;
        cout << "            /__/__/__/__/__/__/__/__/\\             " << endl;
        cout << "           /__/__/__/__/__/__/__/__/ \\             " << endl;
        cout << "           #---------------------#   |              " << endl;
        cout << "           # (1) Spielen         # _ |              " << endl;
        cout << "           #---------------------#|| |  ( `´`´),    " << endl;
        cout << "           # (2) Regeln          #   | ( `   ´  )   " << endl;
        cout << "           #---------------------# _ |  ( `, /. )   " << endl;
        cout << "           # (3) Tisch verlassen #|| |   \   /      " << endl;
        cout << "           #-----------__--------#  /     | |       " << endl;
        cout << "           #  |_|_|   | _|   |_| # /      | |       " << endl;
        cout << "___________#----------|__|-------#/__,,_,// \\_,,,,_" << endl;
        cout << "____________________________________________________" << endl;
        cout << " # Eingabe: ";
        cin >> Auswahl;
        cout << "\n\n\n";

        switch (Auswahl)
        {
            // Neues Spiel starten
            case ('1') :
            {
            // Spielen
            Wuerfel_1 = (rand() % 6) + 1;
            Wuerfel_2 = (rand() % 6) + 1;
            Wuerfel_3 = (rand() % 6) + 1;

            cout << "Du nimmst den Becher und wuerfelst ...\n" << endl;
            cout << "Die Wuerfel sind gefallen...\n" << endl;

            if (Wuerfel_1 == 1)
            {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|   #   ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_______|/  " << endl;
            }
            else if (Wuerfel_1 == 2)
            {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #     ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_____#_|/  " << endl;
            }
            else if (Wuerfel_1 == 3)
            {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #     ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|   #   ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_____#_|/  " << endl;
            }
            else if (Wuerfel_1 == 4)
            {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #   # ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_#___#_|/  " << endl;
            }
            else if (Wuerfel_1 == 5)
            {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #   # ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|   #   ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_#___#_|/  " << endl;
            }
            else if (Wuerfel_1 == 6)
            {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #   # ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "| #   # ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_#___#_|/  " << endl;
            }

                if (Wuerfel_2 == 1)
                {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|   #   ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_______|/  " << endl;
                }
                else if (Wuerfel_2 == 2)
                {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #     ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_____#_|/  " << endl;
                }
                else if (Wuerfel_2 == 3)
                {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #     ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|   #   ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_____#_|/  " << endl;
                }
                else if (Wuerfel_2 == 4)
                {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #   # ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_#___#_|/  " << endl;
                }
                else if (Wuerfel_2 == 5)
                {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #   # ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|   #   ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_#___#_|/  " << endl;
                }
                else if (Wuerfel_2 == 6)
                {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #   # ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "| #   # ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_#___#_|/  " << endl;
                }



                if (Wuerfel_3 == 1)
                {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|   #   ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_______|/  " << endl;
                }
                else if (Wuerfel_3 == 2)
                {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #     ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_____#_|/  " << endl;
                }
                else if (Wuerfel_3 == 3)
                {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #     ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|   #   ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_____#_|/  " << endl;
                }
                else if (Wuerfel_3 == 4)
                {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #   # ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_#___#_|/  " << endl;
                }
                else if (Wuerfel_3 == 5)
                {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #   # ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|   #   ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_#___#_|/  " << endl;
                }
                else if (Wuerfel_3 == 6)
                {
                cout << "  _______   " << endl;
                cout << " /______/|  " << endl;
                cout << "| #   # ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "| #   # ||  " << endl;
                cout << "|       ||  " << endl;
                cout << "|_#___#_|/  " << endl;
                }

                cout << "-------------------------------------------" << endl;
                cout << "1.Wuerfel: " << Wuerfel_1 << ", 2.Wuerfel: " << Wuerfel_2 << ", 3.Wuerfel: " << Wuerfel_3 << "\n" << endl;
                cout << "Wuerfelsumme: " << Wuerfel_1 + Wuerfel_2 + Wuerfel_3 << "\n\n\n" << endl;

                //Allgemeine Paschabfrage
                if (Wuerfel_1 == Wuerfel_2)
                {
                    if (Wuerfel_2 == Wuerfel_3)
                    {
                        cout << "Das Glueck ist mit Dir! Du hast einen 3er Pasch!\n" << endl;
                        Beep(396, 500);
                        Beep(440, 500);
                        Beep(495, 500);
                        Beep(396, 500);
                    }

                //1er Paschabfrage
                    if (Wuerfel_1 == 1)
                    {
                        if (Wuerfel_2 == 1)
                        {
                            if (Wuerfel_3 == 1)
                            {
                                cout << "Herzlichen Glueckwunsch, Du hast einen 1er Dreierpasch gewuerfelt!" << endl;
                            }
                        }
                    }

                //2er Paschabfrage
                    if (Wuerfel_1 == 2)
                    {
                        if (Wuerfel_2 == 2)
                        {
                            if (Wuerfel_3 == 2)
                            {
                                cout << "Herzlichen Glueckwunsch, Du hast einen 2er Dreierpasch gewuerfelt!" << endl;
                            }
                        }
                    }

                //3er Paschabfrage
                    if (Wuerfel_1 == 3)
                    {
                        if (Wuerfel_2 == 3)
                        {
                            if (Wuerfel_3 == 3)
                            {
                                cout << "Herzlichen Glueckwunsch, Du hast einen 3er Dreierpasch gewuerfelt!" << endl;
                            }
                        }
                    }

                //4er Paschabfrage
                    if (Wuerfel_1 == 4)
                    {
                        if (Wuerfel_2 == 4)
                        {
                            if (Wuerfel_3 == 4)
                            {
                                cout << "Herzlichen Glueckwunsch, Du hast einen 4er Dreierpasch gewuerfelt!" << endl;
                            }
                        }
                    }

                //5er Paschabfrage
                    if (Wuerfel_1 == 5)
                    {
                        if (Wuerfel_2 == 5)
                        {
                            if (Wuerfel_3 == 5)
                            {
                                cout << "Herzlichen Glueckwunsch, Du hast einen 5er Dreierpasch gewuerfelt!" << endl;
                            }
                        }
                    }

                //6er Paschabfrage
                    if (Wuerfel_1 == 6)
                    {
                        if (Wuerfel_2 == 6)
                        {
                            if (Wuerfel_3 == 6)
                            {
                                cout << "Herzlichen Glueckwunsch, Du hast einen 6er Dreierpasch gewuerfelt!" << endl;
                            }
                        }
                    }

    
                }
        }break;

        // Regeln ansehen
        case ('2') :
        {
            cout << "Regeln kommen noch.\n" << endl;
        }break;

        case ('3') :
        {
            cout << "Versuch dein Glueck doch an einem anderen Tag. Bis bald.\n" << endl;
        }break;

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

        }
        cout << "\n\n < Druecke eine beliebige Taste fuer weiter >" << endl;

        cin.get();  cin.get();      // Bei Tastendruck geht's erst wieder los
        
        system("CLS");      // Löscht den Bildschirm des alten Spielstands
    } while (Auswahl != '3');

    return 0;
}




P.S. gibt es zufällig eine Biblo die äöüß auf konsolenebene umwandelt und anzeigt?
Ich habe zwar keinen Computer, aber was soll's.
Ich hab mir zum üben, eine Tastatur aus Papier gemacht.

ERROR

Alter Hase

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

2

04.06.2015, 21:09

Kennst du bisher noch keine anderen Kontrollstrukturen? Falls nein, nimm dir erstmal ein C++ Buch und lies es bzw lies es weiter ;)

Falls ja, dann nutze sie doch. Wie wäre es zB mit einer for-Schleife für die 6 Augenzahlen beim Pasch und bei der Darstellung der Würfel? Bei der Strasse kommt jeder Würfel in Frage, da hast du Recht. Aber du könntest bei der Überprüfung zum Beispiel erstmal "sortieren". Also zum Beispiel welcher der kleinste, mittlere und grösste ist(bei mehr als 3 dann halt auch mehr Abstufungen). Ist die Abstufung nicht möglich(2 Zahlen gleich) oder ist der Unterschied zwischen zwei Stufen >1, kann keine Strasse mehr entstehen.

Ich persönlich denke mal, dass das sortieren generell eine gute Idee wäre, so könnte man schonmal viel abschätzen. zB keine 2 Würfel gleich => kein Pasch möglich aber Strasse, 4 Würfel gleich => 4er Pasch möglich aber keine Strasse, 3 Würfel gleich => 3er Pasch möglich, aber keine Strasse.....

3

04.06.2015, 21:15

Wenn ich mir den Code so anschaue fallen mir spontan 2 Dinge auf, die man ändern sollte:
1. Nutze Funktionen! Ein schönes Beispiel wäre z.B. die Zahlenausgabe (FunktionsKopf z.B. void anzeigenWuerfel(int zahl))
2. Nutze arrays, wenn du gleiche Variablen hast (z.B. Würfelzahlen) macht es keinen Sinn diese durchzunummerrieren, stattdessen ein Array anlegen und dann mit wuerfel[1] darauf zugreifen. Dann kann man das einfach erweitern.

Zu deinem Pasch-Problem würde ich eine for-schleife nutzen und innerhalb dieser prüfen, ob alle Variablen gleich sind.

PS: äöüß sollten klappen, wenn man im Compiler/ in der IDE die richtige Codierung einstellt. (Im Zweifel mal probieren welche funktioniert)

4

04.06.2015, 21:15

Prüfen auf Pasch würde ich anders machen.

C-/C++-Quelltext

1
2
3
4
if(Würfel1 == Würfel2 == Würfel3)
{
    cout << "Herzlichen Glueckwunsch, Du hast einen "<< Würfel1 << "er Dreierpasch gewuerfelt!" << endl;
}


Prüfen auf Straße

C-/C++-Quelltext

1
2
3
4
5
Würfelordnen(); //<- Funktion schreiben die das macht
if(Wwürfel1+2 == Würfel2+1 == Würfel3)
{
    // Straße
}
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Koschi« (04.06.2015, 21:47)


5

04.06.2015, 21:52

Du kannst in c++ mehrere Ausdrücke nicht hintereinander mit == auf Gleicheit prüfen ;) musst du also so machen:

C-/C++-Quelltext

1
2
if((w1 == w2) && (w1== w3))
//...

ByteJunkie

Alter Hase

Beiträge: 891

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

6

04.06.2015, 22:01

Ich würde die möglichen Kombinationen in einem Struktur Array abbilden.
Dann eine Funktion nehmen, die in einer Schleife die Würfel mit den verschiedenen in der Struktur gepeicherten Kombinationen vergleicht und bei einem Treffer TRUE zurückgibt.
Mach was Du nicht lassen kannst und lass was Du nicht machen kannst. ;)

7

04.06.2015, 22:10

Du kannst in c++ mehrere Ausdrücke nicht hintereinander mit == auf Gleicheit prüfen ;) musst du also so machen:

C-/C++-Quelltext

1
2
if((w1 == w2) && (w1== w3))
//...

Ja, war auch nicht als ausführbare Lösung gedacht, ehr als pseudo Code (Ausführbaren Code, wird es bei mir so gut wie nie geben, da copy & paste keinem hilft).
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

8

04.06.2015, 22:32

Das reicht mir schon Alles erstmal. Danke sehr. Er seht ja selbst wie der Code aussieht. Schleifen & Funktionen stehen grad auf dem Programm ab und zu spick ich bereits zu Arrays. Da bin ich letztes mal hängen geblieben. Muss mein bereits erlerntes Anfängerwissen wieder auffrischen.

Den 3er Booltschen Vergleich hatte ich übrigens auch im Kopf :) und die Würfelfunktion als der Wurf der 3 Würfel auch schon in eine Funktion gepackt, aber wie gesagt da bin ich noch am lesen.

Erstmal vielen Dank für die sehr schnellen und vielen Antworten, hätte ich nicht damit gerechnet.

Wenn ich die Sachen gefixt hab poste ich nochmals rein, bis dahin.
Ich habe zwar keinen Computer, aber was soll's.
Ich hab mir zum üben, eine Tastatur aus Papier gemacht.

9

05.06.2015, 11:52

Gibts hier einen "Nachtschwund"... hier waren doch gestern Abend noch mehr Postings mit Ansätzen drin.... ?!
Ich habe zwar keinen Computer, aber was soll's.
Ich hab mir zum üben, eine Tastatur aus Papier gemacht.

10

05.06.2015, 12:14

Gibts hier einen "Nachtschwund"... hier waren doch gestern Abend noch mehr Postings mit Ansätzen drin.... ?!

Ja anscheinend Hello_kitty hatte noch was geschrieben, der Ansatz war das ganze über die Bit-Operatoren und Enums zu lösen.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werbeanzeige