Final Fantasy Triple Triad - Züge kalkulieren



  • Hi

    vielleicht kennt jemand von euch das Kartenspiel Triple Triad.
    Wenn nicht, die Grundregeln stehen hier: http://finalfantasy.gamigo.de/ff8/ff8-karten.htm

    Ich möchte nun, wenn der Spieler seine Karten gewählt hat, jeden möglichen Zug berechnen, um so eine möglichst große Chance zu haben zu gewinnen (als Computer).

    Bekannt sind alle 10 Karten von den Spielern und deren 4 Werte, außerdem ist bekannt wer anfängt. Sonderregeln sind egal.

    Es soll also bei jedem Setzen einer Karte von dem Spieler kalkuliert werden, wo die Karte des Computers hingesetzt werden muss, um möglichst zu gewinnen - also ein fast unbesiegbarer Computer.

    Folgende Gedanken habe ich mir schon gemacht:

    Spieler A hat beim 1.Zug - 5 * 9 Möglichkeiten eine Karte zu legen (5 Karten, 9 Regionen)
    Spieler B hat beim 1.Zug - 5 * 8, weil eine Region schon von A besetzt ist

    A.2.Zug: 4 * 7
    B.2.Zug: 4 * 6
    A.3.Zug: 3 * 5
    B 3.Zug: 3 * 4
    A.4.Zug: 2 * 3
    B.4.Zug: 2 * 2
    A.5.Zug: 1 * 1 (Es bleibt nur eine Karte und eine Region übrig, bleibt also keine wirkliche Wahl)

    Eine Karte von B bleibt aus dem Spiel.

    Leider weiß ich nicht, wie ich das Ganze in Programmtext umsetzen soll. Es ist ja außerdem wichtig, in welcher Reihenfolge die Karten gesetzt werden.

    Ich hoffe ihr könnt mir helfen

    xan



  • Also wenn ich dich richtig verstanden habe, soll der Computer das Spiel bis zum Ende durchrechnen (wie das Spiel funktioniert ist mir nicht ganz klar...).

    Also brauchst du zuerst mal eine Funktion die erkennt wer gewonnen hat.
    Danach schreibst du dir eine Funktion die rekursiv alle Züge ausprobiert. Dieser Funktion übergibst du das Spielfeld (Das enthält die Regionen, die 2 Decks und wer dran ist). Sie gibt true zurück, wenn der Computer gewinnt und sonst false (oder -1: verlieren 1: gewinnen 0: unentschieden).
    Danach gehst du einfach alle Möglichen Züge durch die du am Anfang machen kannst. Wenn die Funktion bei einem Zug true zurückliefert, machst du den.
    Dabei musst du folgendes Beachten: Wenn die KI am Zug ist, nimmst du den bestmöglichen Zug (also wenn irgendwo true zurückgeliefert wird gibst du true zurück und sonst false). Wenn der Spieler am Zug ist, nimmst du den schlechtmöglichsten Zug (die Bewertungsfunktion ist ja aus der Sicht des Computers, also genau umgekehrt).
    Das ist natürlich eine sehr primitive Variante. Man könnte das auch schlauer lösen, ohne alle Züge bis zum Ende durch zu rechnen. Das wird dann allerdings etwas komplizierter (Google: MiniMax Algorithmus, alpha beta Algorithmus).


Anmelden zum Antworten