Skat: Alle möglichen Spielzüge einer Kartenverteilung |
| 25.08.2024, 14:02 | Malcang | Auf diesen Beitrag antworten » |
Skat: Alle möglichen Spielzüge einer Kartenverteilung
ich möchte schon lange etwas programmieren, und zwar die möglichen Spielverläufe eines Skatspiels, nachdem das Spiel angesagt wurde. Dazu wird Programmierarbeit nötig sein, aber ich habe im Gefühl, dass es sich in Grenzen hält, was diesen Aufwand angeht. Ich denke, wie immer hat es die Vorarbeit in sich
Was möchte ich machen? Zuerstmal würde ich die Karten codieren: 1 -> Karo 7 2 -> Karo 8 3 -> Karo 9 4 -> Karo Dame 5 -> Karo König 6 -> Karo 10 7 -> Karo Ass 8 -> Karo Bube 9 -> Herz 7 und so weiter, bis schließlich 32 -> Kreuz Bube. Nun sähe eine mögliche Kartenverteilung beispielsweise so aus: Vorhand: (32, 24, 8, 7, 6, 15, 14, 13, 9, 1) Mittelhand: (16, 23, 22, 21, 20, 19 ,18, 17, 5, 4) Hinterhand: (31, 30, 29, 28, 27, 26, 25, 12, 11, 10) Skat: (3, 2) Das wäre ein sehr guter Grand, den Vorhand auch ansagt. Nun macht Vorhand den ersten Zug, sagen wir 32 (Kreuz Bauer). Daraufhin legt MH 16 und HH 25. Der erste Zug ist also (32, 16, 25). Genausogut könnte es aber auch (32, 16, 12) sein, da HH nicht bekennen muss. Ausgeschlossen ist allerdings (32, 5, 12), da MH hier nicht bekannt hätte. Jedenfalls ist nun wieder VH am Zug. Es könnte sich also folgender Verlauf ergeben: 1) (32, 16, 25), 4 Punkte für VH 2) (24, 4, 10), 5 Punkte für VH Nun frage ich nach einem geeigneten Ansatz, um dieses Problem zu lösen. Wie komme ich auf alle legalen Spielzüge? Ich habe leider keine gute Idee gehabt, da ich ja nicht nur beachten muss, ob der entsprechende Zug legal ist. Ich muss ja außerdem auch den Wechsel des Aufspielers beachten.
Wie könnte ich da sinnvoll drangehen? |
||
| 27.08.2024, 08:41 | HAL 9000 | Auf diesen Beitrag antworten » |
Grobe Abschätzungen zeigen mir, dass das Zählen zu einer ausufernden Geschichte werden kann, selbst wenn man sich auf ein KONKRETES Blatt nach abgeschlossenem Reizen und (evtl.) Skataufnahme und -ablage bezieht: 1a) Der erste Spieler hat 10 Möglichkeiten, eine auszuspielende Karte zu wählen. 1b,c) Die beiden nachfolgenden Spieler haben jeweils zwischen 1 und 10 Möglichkeiten, darauf zu antworten (je nach Blatt und Spielansage, d.h. Trumpfarbe oder Null, etc.) 2a) Der Stichgewinner hat 9 Möglichkeiten, eine auszuspielende Karte zu wählen. 2b,c) Die beiden nachfolgenden Spieler haben jeweils zwischen 1 und 9 Möglichkeiten, darauf zu antworten (je nach Blatt und Spielansage, d.h. Trumpfarbe oder Null, etc.) ... Multiplikation der Anzahlen klappt für 1a)-10a), nämlich Möglichkeiten. Die Anzahlen in xb) und xc) kann man zwar untereinander multiplizieren, aber in jeder Verzweigung/Verästelung bekommt man jeweils andere Anzahlen. Ich habe wenig Hoffnung, dass man damit in vertretbarer Zeit zu einem Ende kommt - aber vielleicht täusche ich mich ja.
Du kannst das ganze ja mal so programmieren (ist Arbeit genug) und dann sehen, ob der Zählalgorithmus in erträglicher Zeit endet. Falls nicht, kannst du es etwa mit reduzierter Kartenzahl probieren (z.B. 7,8,9 weglassen und mit den verbleibenden 20 Karten jedem Spieler nur genau 6 Karten geben, das müsste nach meiner Schätzung noch gut zu bewältigen sein). |
||
| 31.08.2024, 09:45 | Malcang | Auf diesen Beitrag antworten » |
Hallo HAL, vielen Dank für deine Antwort
Ich würde gerne mal probieren das hinzukriegen, ein paar Ideen für python habe ich schon. Nur aktuell leider keine zeit, aber ich würde mich freuen wenn du (und jeder andere Interessierte
) gerne nochmal in diesen Thread schaust.Vielen Dank nochmal
|
||
| 01.09.2024, 12:40 | Malcang | Auf diesen Beitrag antworten » |
Da bin ich nochmal. Ich habe mir überlegt, wie ich die legalen Spielzüge bestimmen kann. Meine Idee ist es, dies anhand des folgendes Flowcharts zu prüfen (das Logo überdeckt den Punkt "MH hat keinen Trumpf"): [attach]57909[/attach] Mit diesem Chart könnte ich ja nun ein Funktion implementieren, die mir TRUE liefert bei einem legalen Spielzug, sonst FALSE. Ich würde dies nun auch einmal umsetzen für den Fall, das VH keinen Trumpf spielt. Was meint ihr, ist dies ein guter Anfang oder ganz falsche Richtung? |
||
| 02.09.2024, 06:54 | HAL 9000 | Auf diesen Beitrag antworten » |
Ja, das ganze ist wie gesagt ausufernd. Du kannst natürlich für jede Spielvariante Listen erstellen, das müssten 4 (Null oder Farbe) oder 5 (Grand) sein, wo die Karten versammelt sind, die zulässig sind, wenn eine von ihnen ausgespielt wird, außerdem könnte die Ordnung innerhalb der Liste nach Rangordnung erfolgen. Allgemein könnte die "State-Machine" eines Stiches (läuft also dann insgesamt zehnmal ab) irgendwie so aussehen: 1) VH spielt irgendeine Karte aus, entsprechend Spielvariante hat man dazu eine zugeordnete Kartenliste. 2) Besitzt MH mindestens eine Karte aus dieser Liste, so muss er eine davon spielen. Hat er keine, so darf er eine beliebige Karte spielen. 3) Punkt 2) gilt analog für HH. 4) Den Stich bekommt: __4a) Falls mindestens eine Trumpfkarte gespielt wurde, dann der mit der höchsten Karte aus der Trumpfliste. __4b) Falls keine Trumpfkarte gespielt wurde, dann der mit der höchsten Karte aus der zugeordneten Liste. 5) VH beim nächsten Stich ist die Person, die gemäß Regel 4) den vorherigen Stich bekommen hat. |
||
| 03.09.2024, 16:57 | Malcang | Auf diesen Beitrag antworten » |
Ah ja, sehr gut HAL, vielen Dank. Ich glaube das reduziert zumindest mal die Abfragen auf zugelassene Züge, jedenfalls ist das meine Intuition. Ich würde das gerne weiter verfolgen und setze mich mal an einen python-Code. Das kann zwar etwas dauern, aber würde mich freuen, wenn du mir wieder Feedback gibst! |
||
| Anzeige | ||
|
|
||
|
|
Verwandte Themen
| Die Beliebtesten » |
| Die Größten » |
|
| Die Neuesten » |
|
