Tic Tac Toe

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von der_Kurt.

    Tic Tac Toe

    Ich würde gerne ein Tic Tac Toe programmieren. Es gibt auch einige Tutorials wie man ein Tic Tac Toe programmiert, aber keines indem erklährt wird wie man einen Computergegner programmiert. Könnt mir einer erklähren wie ich den Computer programmieren kann der nicht verliert.

    Die Oberfläche habe ich schon.

    101100
    Bei Tic Tac Toe gewinnt nie jemand, wenn mans richtig spielt.

    Du musst dir einfach einen Algorithmus schreiben der überprüft welche Felder vom User besetzt sind, ob er mit dme nächsten Zug 3 schafft oder ob der computer mit dem nächsten zug 3 bekommt. dürfte bei einem 3x3 feld ja nicht so aufwendig sein.
    Du musst alle Möglichkeiten durchgehen.
    Ich würde zum Beispiel beim ersten Zug immer zufällig irgendwo hinsetzten. Dann guckst du wo der Spieler sein Kreuz/Kreis gesetzt hat, checkst auch nochmal wo deine Kreuz/Kreis ist und daraus dann die Aktion machen.

    Da kannst du dann unterschiedliche Variationen daraus machen. Dann hast du nen leichten, mittleren und schweren Bot.

    Ist viel Tipp Arbeit aber was anderes fällt mir jetzt nicht ein.

    Mfg
    Firestorm
    225 000 ? wirklich so viele.
    Naja, du kannst auch einige die ungefähr gleich sind auch mit gleichen Zügen zu belegen.
    Bsp:
    X|O|
    |X|
    | |

    Das er da genau das gleiche macht wie hier:

    | |
    |X|
    |O|X

    Denke das würde dir einige ersparen.

    Mfg
    Firestorm
    Mein Gott hier wird davon gesprochen 255000 verschiedene Spielabläufe zu proggen!
    Und dann meint Firestorm dass man Spielabläufe die ungefähr gleich sind nocht doppelt proggen muss!
    Sollen es dann nur noch 10000 Spielabläufe sein oder was?
    @1011...
    Mal ein anderer Ansatz, bevor du anfängst, 10000 Spielabläufe in einer "If-Schleife" zu programmieren: ;)
    TicTacToe hat 9 Felder. Wenn ich auf ein Feld setze, musst du schauen, ob du mit einem Spielzug 3 in einer Reihe erreichen kannst.
    Wenn nicht, musst du schauen, ob ICH das schaffe. Wenn ja, dann verhindere es.

    Das ist das Grundgerüst. Deine Überlegung wäre, als ob du für den Weg in die Schule den gesamten Stadtplan deiner Stadt auswendig lernen sollst.

    der_Kurt schrieb:

    @1011...
    Mal ein anderer Ansatz, bevor du anfängst, 10000 Spielabläufe in einer "If-Schleife" zu programmieren: ;)
    TicTacToe hat 9 Felder. Wenn ich auf ein Feld setze, musst du schauen, ob du mit einem Spielzug 3 in einer Reihe erreichen kannst.
    Wenn nicht, musst du schauen, ob ICH das schaffe. Wenn ja, dann verhindere es.

    Das ist das Grundgerüst. Deine Überlegung wäre, als ob du für den Weg in die Schule den gesamten Stadtplan deiner Stadt auswendig lernen sollst.




    Ja aber dann könnte ich gegen den Computer gewinnen... -->

    o - x
    - o -
    x - x

    Und 10'000 Spielabläufe zu programmieren ist auch nicht besonnders toll.

    101100

    Vielleicht könnte mir jemand diesen Code erklähren:

    Quellcode

    1. Hauptprogramm (Auszug):[/b]
    2. var doNext : number
    3. dummy := [b]maxWert ( gewünschte suchTiefe )[/b]
    4. Zug doNext ausführen
    5. [b]function maxWert ( restTiefe ) returns number[/b]
    6. var ermittelt, zugWert : number
    7. [b]begin[/b]
    8. ermittelt := - unendlich
    9. für alle möglichen Züge begin
    10. Zug simulieren
    11. if restTiefe <= 1 or keineFolgezügeMehrMöglich
    12. then zugWert := [b]bewertungsFunktion[/b]
    13. else zugWert := [b]minWert ( restTiefe - 1 )[/b]
    14. Zug-Simulation zurücksetzen
    15. if zugWert > ermittelt then begin
    16. ermittelt := zugWert
    17. if restTiefe = gewünschte suchTiefe /* doNext nur wenn auf oberster Ebene setzen */
    18. doNext := nummer des Zuges /* für das Hauptprogramm */
    19. end
    20. end
    21. return ermittelt
    22. [b]end maxWert[/b]
    23. [b]function minWert ( restTiefe ) returns number[/b]
    24. var ermittelt, zugWert : number
    25. [b]begin[/b]
    26. ermittelt := + unendlich
    27. für alle möglichen Züge begin
    28. Zug simulieren
    29. if restTiefe <= 1 or keineFolgezügeMehrMöglich
    30. then zugWert := [b]bewertungsFunktion[/b]
    31. else zugWert := [b]maxWert ( restTiefe - 1 )[/b]
    32. Zug-Simulation zurücksetzen
    33. if zugWert < ermittelt then ermittelt := zugWert
    34. end
    35. return ermittelt
    36. [b]end minWert[/b]
    Ich würde gerne ein Tic Tac Toe programmieren

    Gehen wir mal von diesem Zitat aus. Dann solltest du dir einen Ablauf überlegen, und den dann umsetzen. Wenn du den einfachen Weg - den man dir gezeigt hat - ignorierst, und dich auf den Minimax-Algorithmus versteiffst (der hauptsächlich für komplexere Spiele da ist), kann man dir nicht helfen.

    Kann man aus dem nichts brauchbares machen???

    Pseudocode ist an die natürliche Sprache angelehnt und gibt im Klartext zu verstehen, was jetzt zu geschehen hat. Wenn du das mit eigenen Anweisungen ersetzt, dann kommt was dabei raus. Nur dazu müsstest du verstehen, was hier passiert. Abgesehen davon enthält der Beispiel-Pseudo-Code Rekursionen, was schon mal nicht einfach zu verstehen ist.

    Das Gescheiteste ist, du überlegst dir mit Papier und Bleistift, wo du ein Kreuz hinmachen würdest, und WARUM. Daraus kannst du dann eine Strategie entwickeln, und dann dem Computer beibringen.