Schere, Stein, Papier Spiel - Logikfrage

Jack159

Bekanntes Mitglied
Ich code gerade ein Schere, Stein, Papier Spiel und frage mich gerade, wie ich dem Programm sagen soll, dass z.B. Schere stärker als Papier ist?
Momentan fällt mir nur die Möglichkeit ein, dass ich für jeden Möglichen Fall eine If-Anweisung erstelle. Also sowas wie "Wenn User hat Schere und Computer hat Papier, dann User gewinnt". Aber da gibts doch sicherlich eine besseren Weg^^ Mir fällt nur irgendwie keiner ein...
 
Ich würde mir merken, gegen was etwas gewinnen würde. Dies würde ich mit einem enum machen. Dann kann man auch ganz simpel z.B. das OBI-Hörnchen (nie Werner 4 gesehen 😉 ?) nachträglich hinzufügen.
 
0 Schere
1 Stein
2 Papier

1. If für gleichheit
2. If für größer
3. If für gegner 0 und du 2/ andersrum

sind doch nicht so viele.

EDIT: Juhu, das OBI-HÖRNCHEN. Was noch fehlt OBI-HÖRNCHEN VS. RÖHRICH
 
SCNR

Schere Stein Papier Echse Spock

---

Ich glaube es ist ein normaler gerichteter Graph

wenn es eine Verbindung von A nach B gibt, dann schlägt A B
 
Ich würde die 3 Dinge zu Klassen machen, ein Interface mit einer Methode implementeren, und das ganze so aussehen lassen:

Java:
GameObject userWahl = new Schere();
GameObject compWahl = new Stein();
////
if(userWahl.equals(compWahl))
{
	//Unentschieden
	return;
}
if(userWahl.gewinntGegen(compWahl))
{
	//Gewonnen
	return;
}
//Verloren

Dann kannst du später spielend einen Brunnen einbauen. 😱
 
eine Enum bietet sich an mit Methode boolean beats(other),
darin reicht es bei Kreisbeziehung, die ordinal() zu vergleichen, nur beim letzen Element noch Sonderfall
 
eine Enum bietet sich an mit Methode boolean beats(other),
darin reicht es bei Kreisbeziehung, die ordinal() zu vergleichen, nur beim letzen Element noch Sonderfall

Da ginge aber auch [c](this.ordinal() + 1) % Types.values().length == other.ordinal()[/c].

Ich würde halt eine List<Types> verwenden. Mit immer noch der gleichen Begründung: Nur weil das "klassische" Schere, Stein, Papier "im Kreis herum" funktioniert, sollte man sich nicht auf das beschränken.
 

Zurück
Oben