Hölzchenspiel

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von balufreak, 10.06.2005.

  1. balufreak

    balufreak Thread Starter MacUser Mitglied

    Beiträge:
    1.560
    Zustimmungen:
    28
    MacUser seit:
    12.10.2003
    Hallo Leute!

    Ich muss für die Schule ein Hölzchenspiel programmieren. In PHP. Der Clou an dieser Geschichte ist, dass dies ein Mensch gegen Maschine Spiel werden soll. Also KI Programmieren. Nun habe ich keinen blassen, wie ich das anstellen soll.
    Gibt es das irgendwo schon? So dass man da mal reinschauen kann?

    Was ist das Hölzchenspiel?

    Das ist ein Spiel in dem es z.B 9 hölzchen gibt. 3x3 Reihen. Jeder Spieler darf bis zu 3 hölzchen aus einer Reihe entfernen. Wer das letzte hölzchen ziehen muss hat verlohren.
     
  2. Macverehrer

    Macverehrer MacUser Mitglied

    Beiträge:
    2.160
    Zustimmungen:
    6
    MacUser seit:
    02.12.2004
    Ich kenne ein Spiel Mensch gegen Maschine In dem das ähnlich mit Perlen geschieht ist aber glaube ich in Flash aber sonst geial gemacht

    Version 1 auf Tisch
    Version 1 auf Hand
    Version 2 auf Hand
     
    Zuletzt bearbeitet: 10.06.2005
  3. sevY

    sevY Gast

    Hehe… ich erinnere mich noch an Deine Beiträge vor gut 1,5 Jahren… selbstlernen ist für Dich wie das Weihwasser für den Teufel, oder? Und nachdenken… auch nicht so Dein Fall ;)

    Naja… macht nix. Bevor ich jetzt sage das es soetwas in der Schule eigentlich nur gibt, wenn vorher entsprechend logische/technische Fertigkeiten vermittelt worden sind, versuche ich mal nett zu werden ;)

    KI ist absolut zu hochgegriffen. Gerade bei einem solchen trivialen Spielprinzip.
    Das was hier ausschlaggebend ist, sind die Zufallskomponenten und bedingte Anweisungen bzw. switch()'es.
    Ansonsten hast Du bei sauberer logischer Konzipierung immer den Computer als Sieger bzw. Dich, wenn Du ebenfalls genauso logisch denkst und man entsprechend das ganze nur noch vom „wer fängt an“ abhängig machen kannst.

    Daher baue zunächst verschachtelte, bedingte Anweisungen. Ich denke, dass in Deinen Fall eine prozedurale Lösung der objektorientierten vorzuziehen ist… oder kennst Du Dich mit Objektinstanzen und Methoden, Klassen aus?

    Dann überlege, wieviele verschiedene Möglichkeiten es gibt. Also jedes Szenario simulieren. Und aus dieser Menge dann mittels der Interaktion quasi immer logische Schlußfolgerungen ziehen.
    Am Ende solltest Du, wenn das in Diagrammform vorliegt, eine Art „Baumdiagram“ haben, welches ideal die Überschrift „mehrere Wegen führen nach Rom“ haben könnte.

    Verzichtest Du zunächst auf „zufällige Fehler“ des Computers kannst Du auch so bestimmen, wie hoch die „Wahrscheinlichkeit“ eines Sieges einer entsprechenden Partei an bestimmten Positionen des Baumdiagram sein kann. Aber ich glaube, dafür ist der Spielverlauf zu trivial… das wäre dann nämlich so die Art „Schach / Matt“ Prinzip.

    Nun gut… danach bildest Du das Diagramm halt mit if/else oder in verschachtelten switch() Objekten ab.

    Zum guten Schluss machst Du den Computer doof. Baue in die bedingten Anweisungen einfach immer eine Zufallsvariable ein, die Du am besten vorher global definierst um so später die „Schwierigkeitsgrade“ unterscheiden zu können.
    Diese Variable sieht dann in etwa so aus… nur ganz grob, unsauber und auch nicht wirklich gut… aber halt ein Beispiel zur „Illustration“

    PHP:
    <?php
    //…

    if($logic===true && rand($handycap$skill*$difficulty) < $com) {

    //logischer nächster Schritt
    } else {
     
    //gib human auch ma' ne chance }

    //…

    Am Ende kannst Du dann true für den Mensch oder false für den Computer als Sieger ausgeben lassen und entsprechend ein echo() setzen.

    Wichtig ist übrigens, dass Du immer eine „Transportvariable“ hast, die den derzeitigen Spielverlauf berücksichtigt, sonst landest Du ja nach jeder Interaktion wieder am Anfang.

    Und jetzt… viel Spaß beim Denken. Einfach „so“ ist das nicht möglich. Ich würde da gut 10 Stunden dransitzen… objektorientiert…


    Yves
     
    Zuletzt von einem Moderator bearbeitet: 10.06.2005
  4. sevY

    sevY Gast

    In Flash wäre das um Vieles einfacher, da Du nicht andauernd den Browser reloaden müsstest (clientsided ist hier von Vorteil… kann aber auch cheated werden) und, im Falle von prozeduraler Programmierung, die Zeitleiste quasi als Richtwert für die jeweilige Nummer des Spielzugs hättest.

    Aber mach lieber die Sprache, die Du am besten kannst.
     
  5. flaebehop

    flaebehop MacUser Mitglied

    Beiträge:
    1.649
    Zustimmungen:
    0
    MacUser seit:
    12.06.2004
    vom ansatz her ist das ein umgekehrtes tic-tac-toe-prinzip, oder? ein vorhandenes hölzchen im hölzchenspiel entspricht dann einem noch auszufüllenden leerfeld bei XXO.
     
  6. balufreak

    balufreak Thread Starter MacUser Mitglied

    Beiträge:
    1.560
    Zustimmungen:
    28
    MacUser seit:
    12.10.2003
    Hmm so! Danke für eure vielen Tipps. Ich habe jetzt da mal ein bisschen gebastelt. Nun suche ich nach einer Mathematischen lösung für das Speil. Irgendwie kann man das doch berechnen. Mal angenommen mein Spielfeld sieht so aus:
    |
    | | |
    | |
    | | | |
    | | | | | | |

    Das muss doch Mathematisch zu lösen sein. Man kann eine ganze Reihe oder nur 1 Hölzchen entfernen. Wer das letzte Hölzchen nimmt, hat verlohren.
    Ich hab da mal gedacht, dass geht irgendwie mit binärzahlen. Wie kann mann denn in PHP die grösse von Binärzahlen unterscheiden? geht das gleich wie mit Dezimalzahlen?

    Greets balu
     
  7. RoQ

    RoQ MacUser Mitglied

    Beiträge:
    494
    Zustimmungen:
    17
    MacUser seit:
    20.09.2004
  8. Shetty

    Shetty MacUser Mitglied

    Beiträge:
    4.555
    Zustimmungen:
    317
    MacUser seit:
    13.06.2004
    Ich hab mal ein mehr oder weniger intelligentes TicTacToe (unter VB) geschrieben. Dort wurde einfach immer gespeichert, was der menschliche Spieler in einer bestimmten Spielsituation tat. Daran hat sich dann der Rechner orientiert, und falls er keine Informationen hatte, einfach einen Zufallszug gemacht.
     
  9. balufreak

    balufreak Thread Starter MacUser Mitglied

    Beiträge:
    1.560
    Zustimmungen:
    28
    MacUser seit:
    12.10.2003
    Ich habe jetzt mal ein struktogramm gemacht. So wie es aussieht, ist es unmöglich, dass so der Spieler gewinnt. Seht ihr das auch so? es kann sein dass es noch einige syntaktische Fehler hat. Aber im groben sollte es etwa so funktionieren oder?
     

    Anhänge:

Diese Seite empfehlen