# Schere, Stein, Papier Spiel - Logikfrage



## Jack159 (15. Jun 2011)

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...


----------



## faetzminator (15. Jun 2011)

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.


----------



## Asgar13 (15. Jun 2011)

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


----------



## Marcinek (15. Jun 2011)

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


----------



## Volvagia (15. Jun 2011)

Ich würde die 3 Dinge zu Klassen machen, ein Interface mit einer Methode implementeren, und das ganze so aussehen lassen:


```
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.


----------



## SlaterB (15. Jun 2011)

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


----------



## faetzminator (16. Jun 2011)

SlaterB hat gesagt.:


> 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.


----------

