# Spider game, Ist es verloren?



## liann (23. Aug 2020)

Hallo, ich bin fast mit dem Karten Spiel Spider fertig. Nachdem eine Karte gelegt wurde, gucke ich nach dem Spielstand, also ob das Spiel verloren, gewonnen ist oder noch läuft. Bei der methode isLost() habe ich Probleme. Ich habe es so gemacht, das ich alle Karten, die man nehmen könnte, überprüft habe und bei jeder geguckt habe, ob man sie irgendwo anlegen könnte. Wenn ja, dann würde true zurückgeliefert werden, andernfalls false. Allerdings könnte man einfach eine Karte von Karte zu Karte legen, wie ich in der Anlage zeige. Ich weiß erhlich gesagt 0, wie ich das machen soll. Habt ihr vielleicht eine Idee? 
Code:

```
private static boolean isLost() {
        Collection<Card> grabable = new ArrayList<>();
        for (Collection<Card> cArr : stocks) {
            for (Card c : cArr) {
                if (c.isGrabable())
                    grabable.add(c);
            }
        }
        for (Card c : grabable) {
            for (ArrayList<Card> stock : stocks) { // stock is ein Array, der alle Karten Lists enthält.
                if (stock == c.stock || stock == null || stock.isEmpty())
                    continue;
                Card end = stock.get(stock.size() - 1);
                if (end.isHangable(c))
                    return false;
            }
        }
        return true;
    }
```


----------



## White_Fox (23. Aug 2020)

Hm...ich habe ja bekantlich von Informatik so wirklich keinerlei Ahnung. Es klingt mir aber dennoch danach, als könnte man es mit Dijkstra lösen (habe ich noch nie implementiert, ich kenne das Problem, das man damit lösen will, mathematisch sehr oberflächlich von elektrischen Signalnetzwerken).

Die Spielsituation als Knoten und Kanten formulieren und schauen, ob man sich im Kreis dreht. Suchvorschlag: Königsberger Brückenproblem.





						Königsberger Brückenproblem – Wikipedia
					






					de.wikipedia.org


----------



## mihe7 (24. Aug 2020)

Ich kenne die Regeln nicht, aber so wie Du das beschreibst, würde ich mal sagen, dass das Problem auf den Fall reduziert werden kann, wenn
a) eine Karte zwingend angelegt werden muss (weil keine andere passt) und
b) alle Anlegemöglichkeiten gleichwertig sind.


----------



## CSHW89 (24. Aug 2020)

Wozu brauchst du die isLost-Abfrage? Willst du eine KI bauen, oder soll nur eine einfache Ausgabe den Spieler informieren, dass das Spiel verloren ist. Wenn Zweiteres: Ich kenne eigentlich kein anderes Spider-Spiel, welches in dieser Situation anzeigt, dass das Spiel verloren ist. Also wozu den Aufwand? Gerade bei mehreren Farben, kann die isLost-Abfrage deutlich komplizierter werden (splitten von gleichfarbigen Reihen kann neue Siegmöglichkeiten eröffnen). Und um noch ein drauf zu setzen, theoretisch könnte die Abfrage ja sogar schon anzeigen, dass das Spiel verloren ist, wenn noch 10, 20, 30 Züge möglich sind, aber alle Kombinationen zur Niederlage führen. Was ich nur damit sagen will, irgendwo muss man die Grenze dafür ziehen.


----------



## liann (24. Aug 2020)

Das geht natürlich auch, stimmt. Das soll der Spieler aufgeben, wenn er will/muss. Vielen Dank an eure Bemühungen


----------

