Das beliebte -XXO- Spiel

Aufgabe ist es ein XXO - Game zu programmieren.

Spielregeln:
Du spielst mit deiner Spielfarbe bzw. O gegen den Computer. Versuche in eine Reihe (horizontal, senkrecht oder diagonal) drei Felder mit deinen "O-Pfoten" zu markieren, indem Du ein Feld anklickst. Es können nur Felder markiert werden, die noch nicht besetzt sind. Der Spieler, der als erster eine Reihe geschafft hat gewinnt. Zudem soll für die AI 2 Funktionen eingebaut werden.

1. Computer setzt seine "X-Pfoten" zufällig (Anfänger)
2. Computer kann Spielerschritte voraussehen und kontern. (Fortgeschritten)

Viel Erfolg
minzel
 
So, hab das Spiel mal nach deinen Vorgaben programmiert. Du hast gar nix zur Feldgröße gesagt, ich bin mal von 3x3 ausgegangen. Wenn man zwischen "leicht" und "schwer" ausgewählt hat, muss man erst noch auf "Neustart" klicken, damit der neue Schwierigkeitsgrad eingestellt wird. Wenn das Programm gestartet wird, ist der Gegner auf "leicht" gestellt, er setzt also zufällig.

Achso, Programmiersprache ist Java.

Gruß, Boar
 
Also besser hätte ich es auch nicht lösen können. Cons.
Die Programmiersprache die de gewählt hast gefällt mir persönlich auch am besten *fg
naja, wäre schön wenn du noch den Quelltext offen legst. Würd mich interessieren wie du das im allg. gelößt hast. Und selbstverständlich auch für andere.

thx voraus.
minzel
 
naja, wäre schön wenn du noch den Quelltext offen legst.
Den Quelltext kannst du dir auch aus dem .jar-file entpacken, ich hab die .class- und die .java-Dateien gepackt.

Aber ich häng nochmal alle Dateien in den Anhang. Ist nicht wirklich objektorientiert programmiert, aber es erfüllt seinen Zweck. :)

EDIT: Mein Programm ist auch auf der Stufe "schwer" nicht unschlagbar (hab ich grad eben gemerkt). Hab eigentlich gedacht, dass man nicht gewinnen kann, aber wenn man den ersten Stein links oben in die Ecke setzt und den zweiten dann rechts in die Mitte, hat man eigentlich schon gewonnen.

Gruß, Boar
 
Das spiel kann man nur nicht gewinnen, wen keiner einen fehler macht.. aber wenn das spiel nen fehler macht, kann man halt auch gewinne..

Es gibt ein 4 Gewinnt, das nennt sich Mustrum.. Ich habs bisher nicht geschaft da spiel zu schlagen.. die engine is einfach zu perfekt!
 
Das spiel kann man auch gewinnen.. egal gegen welchen gegner.. du musst nur anfangen.. wenn du dann deine X oder O richtig setzt, gibt es keine möglickeit ein unentschieden herbeizuführen.

Das glaub ich dir erst, wenn du mir die Lösung präsentierst.

Gruß, Boar
 
ich war da wohl etwas voreinig mit meinem Post (das ich inzwischen geändert hatte befopr du geantwortet hast.). Es gab mal ne kombination, mit der ich in der schule jeden geschlagen hab, wenn wir das aufn block mit richtigem stift und papier ;-x gespielt haben.. aber ich kann natürlich (zumal ich mich nicht dran erinnern kann) nich sagen,dass die anderen keinen fehler gemacht haben..

wie gesagt, ich war n bisschen voreilig mit meinem post *g*
 
Hab mich schon gewundert. :)

Bei Vier Gewinnt ist das wieder was anderes: Da gibt es die Möglichkeit, als beginnender Spieler den Sieg zu erzwingen. Mustrum ist auf der höchsten Schwierigkeitsstufe (bzw. Suchtiefe) eines der wenigen perfekt spielenden Vier Gewinnt Programme. Nähere Informationen dazu gibt es z.B. hier oder hier.

Gruß, Boar
 
ja stimmt bei tic tac toe muss man die KI absichtlich dumm programmieren weil sie sonst immer gewinnt oder ein unentschieden rauskommt...

wir machen auch grad sowas.. wurde uns gestern aufgegeben sowas zu programmieren.. haben ein halbes jahr zeit.. bin aber heut um viertel2 damit fertig geworden..

is allerdings in der momentaren entwicklungsphase nur spieler vs spieler

source is im zip drin

scheint aber irgendwo ein fehler zu sein... bin aber ned sicher...
 
bei der abfrage if (right == 1) und if(right==2) brauchst du einen break befhel.. (ich weis nur nicht wie der in c heißt. könnte break, end oder end function oder irgendsowas sein.

zur erklärung..

problem:
bei der eingabe eines falschen wertes, werden plötzlich mehrere felder ausgefüllt.

grund:
wenn das spiel feststellt, dass eine falsche eingabe gemacht wurde, setzt er den spieler zurück, und führt die funktion userinput erneut aus. leider steht dann aber immernoch die weitere ausführung des codes mit mit falscheingabe an.

behebung:
Tja, wie oben beschrieben, du musst aus der funktion mit der falschen information aussteigen, leider kann ich dir nicht sagen wie die heißt, da ich kein c kann.
 
hm stimmt das wirds sein.. nur das Problem ist, dass er mir den break befehl aberkennt.. er meint der is an der stelle illegal... in anderen meiner programme geht er jedoch.. vielleicht liegts an den funktionen...

prinzipiell heißt der befehl eh "break;" aber wie gesagt der gibt mir einen fehler zurück
 
ansonsten kannst ihn ja mit return verlassen. hat bei dir ja keine auswirkung.
Code:
if(right ==1)
{
printf("Falsche Eingabe! nur zahlen zwischen 0 und 2 eingeben! Oder 9 zum beenden\n");

//damit der selbe spieler nochmal dran is
if(spieler==1)
spieler = 2;
else
spieler = 1;

//anz = anz -1;

userinput();

return 0;  //<<<<<<<<<<<<<<<<<<<<<<<<<
}


Und das selbe auch bei if(right ==2) da funzt es zwar auch ohne, aber mit is es auf jedenfall sauberer, da es sonst evtl auch zu fehlern kommen kann.
 
Und deine funktion "unentschieden()" solltest du dir auch nochmal anschauen, da is die fun ktion howto mit drin. da biste scheinbare mit denen klammerpaaren "{}" ein bisschen durcheinander gekommen.
 
im prinzip musst du jetzt eine abwehrstrategie basteln. welche überprüft, wo es ansetze für ein gewinenn gibt
dan brauchst du eine aufbaustrategie, die versucht zu gewinnen. also 3 steine nebeneinander zu setzen.
im dritten schritt müsst du beides verbinden, und prioritäten setzen.

Aber wie du das machst, musst du schon selbst rausfinden *g* um ehrlich zu sein, hab ich jetzt auch keine genaue idee
 
Z.B jeweils zufällig einen Stein setzen und per Rekursion jeweils "bis zum bitteren Ende" hochjagen. Dabei der Funktion den "originalstein" (also den "ersten" übergeben). Eine Kopie des Feldes machen und es als "Wertungstabelle" benutzen - sprich:
erster Zug: funktion aufrufen, stein übergeben. Die probiert dann solange aus bis irgendwas rauskommt, wenn gewonnen, wird diese "original" Stelle im Feld erhöht. Wenn verloren, erniedrigt. So dass man nach dem alles durchlaufen worden ist, das Spielfeld voller Werte hat und sich die höchsten raussucht. Damit ist gemeint, dass man den günstigsten Wert für den nächsten Zug erhält. Eventuell wäre eine kleine Bewertung nicht schlecht - z.B sieg bei Zug 7 gibt mehr Punkte als Sieg bei Zug 9. Und wenn ein Spielabschnitt zwar zwei Siegmöglichkeiten hat aber dafür mehrere Niederlagen, bekommt er automatisch eine niedrigere Wertung als ein Zug, bei dem esr nur einen Sieg oder ein Unentschieden gibt.
Zumindest so stelle ich es mr vor, mal sehen ob ich das umsetze ;)
 
wie lange braucht man um mit c++ nicht mehr konsolenabhängig is wie zb mit diesem spiel hier? denn mit java scheint es ja leicht zu gehen zu klicken und fenster zu machen oder?
 
Zurück
Oben