IF-Probleme bei Wurfelspiel-Ausgabe
-
Guten Tag,
ich programmiere derzeit ein Wurfelspiel, welche durch bestimmte Augenzahlen unterschiedliche Gewinne ausgibt.
z.B. soll bei 5 gleichen Augenzahlen (GRAND) ausgegeben werden. Nun habe ich ein Problem, wenn es um die anderen Bedingungen geht.
Bei POKER sollen 4 Augenzahlen zahlen gleich sein, demnach gibt es unterschiedliche Fälle. Bei FULL HOUSE sollen zwei und drei Augenzahlen jeweils identisch sein.
Das Problem hierbei ist, dass viele Bedingungen sich ähneln, weshalb bei einer FULLHOUSE-Ausgabe doch ein Poker erfolgt.
#include <stdio.h>int main() {
const int wuerfel[6]; printf("Programm Wuerfelspiel\n"); for(int i = 0; i < 5; i++) { printf("Wurfel %d \n", i + 1); scanf("%d", &wuerfel[i]);
}
printf("Es wurde gewuerfelt: \n"); printf("Wuerfel | 1 | 2 | 3 | 4 | 5 | \n"); printf("Augenzahl | "); for(int j; j < 5; j++) { printf(" %d |", wuerfel[j]); }
if(wuerfel[0] == wuerfel[1] && wuerfel[2] == wuerfel[3] && wuerfel[4] == wuerfel[0]) {
printf("GRAND");
}if(wuerfel[0] == wuerfel[1] && wuerfel[2] == wuerfel[3]) {
printf("POKER");
}if(wuerfel[0] == wuerfel[1] && wuerfel[2] == wuerfel[4]) {
printf("POKER");
}if(wuerfel[0] == wuerfel[1] && wuerfel[3] == wuerfel[4]) {
printf("POKER");
}if(wuerfel[1] == wuerfel[2] && wuerfel[4] == wuerfel[3]) {
printf("POKER");
}if(wuerfel[0] == wuerfel[2] && wuerfel[4] == wuerfel[3]) {
printf("POKER");
}if(wuerfel[0] == wuerfel[1] && wuerfel[1] != wuerfel[2] && wuerfel[2] == wuerfel[3] == wuerfel[4]) {
printf("FULL HOUSE!");
}return 0;
}
-
@Fachidiot sagte in IF-Probleme bei Wurfelspiel-Ausgabe:
Das Problem hierbei ist, dass viele Bedingungen sich ähneln, weshalb bei einer FULLHOUSE-Ausgabe doch ein Poker erfolgt.
Keine Ahnung, was du meinst.
if(wuerfel[0] == wuerfel[1] && wuerfel[2] == wuerfel[3] && wuerfel[4] == wuerfel[0]) { printf("GRAND"); } else if(wuerfel[0] == wuerfel[1] && wuerfel[2] == wuerfel[3]) { printf("POKER"); }
Das Programm sollte aber aufhören, wenn es etwas gefunden hat, oder? Verwende
else if
-
@Fachidiot
Dein Test auf Poker ist nicht vollständig.Beim erstenif
fehlt das wuerfel[1] == wuerfel[2]Zudem wäre eine if-else-if Kette auch sinnvoll.
Aber du solltest besser ein Histogramm erstellen (wieviel Würfel zeigen die entsprechenden Augen) und dieses dann bewerten.
-
Wie würdest du abfragen, ob der Spieler 2 Pärchen hat?
if(wuerfel[0] == wuerfel[1] && wuerfel[2] == wuerfel[3]) { printf("POKER");
Und ganz allgemein, würde ich das nicht so komisch machen, ich würde erst ausrechnen/zählen wieviele Zahlen doppelt vorkommen, wieviele dreifach, usw. Und dafür kannst du eine Tabelle anlegen und die Ergebnisse reinschreiben.
-
@manni66
Was ich meine ist, dass bei bestimmten Augenzahlen entsprechende Ausgaben Erfolgen. Gibt man fünf mal die selbe Augenzahl ein, wird "GRAND" ausgegeben. Werden vier identische Augenzahlen eingegeben, wird "POKER" ausgegeben.
-
@Fachidiot: das ist uns schon klar.
Aber: wenn du mit
else if
statt jeweils nurif
arbeitest, besteht das Problem nicht mehr.Generell aber:
const int wuerfel[6];
Das sind 6 Würfel! Du hast aber doch in deinem Spiel nur 5 Würfel, oder?- Dein
if(wuerfel[0] == wuerfel[1] && wuerfel[2] == wuerfel[3]) {
für Poker aber doch unvollständig! Es könnten auch Würfen 0,1,2,4 oder 1,2,3,4 oder ... gleich sein - Daher wäre es ratsam, die Häufigkeit der gewürfelten Augen zu zählen, damit du nicht in Kombinatorik versinkst. Wie willst du sonst z.B. 2 Paare behandeln? Es könnte auch eine Strategie sein, die Würfel gemäß der Augen zu sortieren - dann würden die Tests auch einfacher und ein Poker wäre einfach
wuerfel[0] == wuerfel[4]
-
Bei 5 Würfeln brauchst du 4 Vergleiche
@Fachidiot sagte in IF-Probleme bei Wurfelspiel-Ausgabe:
if(wuerfel[0] == wuerfel[1] && wuerfel[2] == wuerfel[3] && wuerfel[4] == wuerfel[0]) {
printf("GRAND");
}sind nur 3.
Der Vergleich würde auch für ein (spezielles) Full House gelten: X X Y Y XDu könntest auch alle mit wuerfel[0] vergleichen, aber diese Art ist der schlechte Weg.
-
Dieser Beitrag wurde gelöscht!