Hölzchenspiel

balufreak

balufreak

Aktives Mitglied
Thread Starter
Dabei seit
12.10.2003
Beiträge
1.563
Reaktionspunkte
28
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.
 
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 bearbeitet von einem Moderator:
Macverehrer schrieb:
Ich kenne ein Spiel Mensch gegen Maschine In dem das ähnlich mit Perlen geschieht ist aber glaube ich in Flash aber sonst geial gemacht

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.
 
balufreak schrieb:
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.

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.
 
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
 
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.
 
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

  • SNAG-0010.gif
    SNAG-0010.gif
    7 KB · Aufrufe: 261
Zurück
Oben Unten