Tic-Tac-Toe cmd-Fenster
Verfasst: Mi Apr 17, 2013 6:29 pm
Hi,
Ich hab mir am WE überlegt mal was "nützlicheres" zu programmieren als die Größe eines Textes, oder eine Textdatei in der "Hallo Peter!" steht, um vielleicht ein bisschen selbst kreativ zu werden. Ich bin dann zu dem Ergebnis gekommen, dass ich mal Tic-Tac-Toe programmieren kann (gar nicht so leicht während der Schulzeit zum programmieren zu kommen, da leidet auch das Tutorail darunter
). Jedenfalls hab ich mir ein simples Konzept gemacht wie das Spiel ablaufen soll.
Nachdem ich zuerst mit C++ ein Projekt über mehrere Files gemacht hatte, was dann nicht so funktionierte, hab ich ganz "ordinär" den gesamten Code als C-Datei geschrieben. Der Code ist dementsprechend "lang".
Und nun wie immer zu meinem eigentlichen Problem:
Da die Abfrage (für 2 Spieler [0, 1]) ständig wiederholt wird, hab ich alles in eine do..while-Schleife gepackt. Bisher funktioniert die Eingabe einwandfrei. Bei einem unbesetztem Feld (ich habe ein zweidimensionales char Array benutzt) wird das Feld mit 0 bzw 1 überschrieben. Ist ein Feld doppelt besetzt, wird der Spieler, der an der Reihe ist erneut aufgefordert ein Feld einzugeben, und ist die Eingabe ungleich 1-9, wird das Spiel beendet.
Mir stellt sich nun die Frage, warum sich die Schleife nicht unterbricht, wenn ich eine Mögliche Siegkombination in das Fenster eingebe.
Mit der Überlegung (s.u): 3 gleiche in einer Reihe (horizontal), daselbe nur vertikal und 2 mal schräg durch das 5. Feld, habe ich eine Funktion definiert, die bei besetzten Feldern entweder 0 oder 1, je nach Spieler, zurückgibt, bei unbesetzten 0(und noch eine extra Funktion full(), die, wenn alle Felder besetzt sind und es keinen Sieger gibt, 0 zurückgibt, mithilfe eines int Arrays, 0 leer, 1 besetzt: hier aber das gleiche Prinzip).
Wenn Spieler 1 abgefragt wird eine Zahl einzugeben und er das macht hat er gewonnen, egal welche Zahl zwischen 1-9.
Überprüft die Schleife nun nicht die Ähnlichkeit zwischen Tatsächlichen Werten und Siegwerten, sondern nimmt er die Werte der Funktion an?
Danke für die Hilfe, vielleicht versteht mich ja einer.
Gruß Chris
Ich hab mir am WE überlegt mal was "nützlicheres" zu programmieren als die Größe eines Textes, oder eine Textdatei in der "Hallo Peter!" steht, um vielleicht ein bisschen selbst kreativ zu werden. Ich bin dann zu dem Ergebnis gekommen, dass ich mal Tic-Tac-Toe programmieren kann (gar nicht so leicht während der Schulzeit zum programmieren zu kommen, da leidet auch das Tutorail darunter

Nachdem ich zuerst mit C++ ein Projekt über mehrere Files gemacht hatte, was dann nicht so funktionierte, hab ich ganz "ordinär" den gesamten Code als C-Datei geschrieben. Der Code ist dementsprechend "lang".
Und nun wie immer zu meinem eigentlichen Problem:

Da die Abfrage (für 2 Spieler [0, 1]) ständig wiederholt wird, hab ich alles in eine do..while-Schleife gepackt. Bisher funktioniert die Eingabe einwandfrei. Bei einem unbesetztem Feld (ich habe ein zweidimensionales char Array benutzt) wird das Feld mit 0 bzw 1 überschrieben. Ist ein Feld doppelt besetzt, wird der Spieler, der an der Reihe ist erneut aufgefordert ein Feld einzugeben, und ist die Eingabe ungleich 1-9, wird das Spiel beendet.
Mir stellt sich nun die Frage, warum sich die Schleife nicht unterbricht, wenn ich eine Mögliche Siegkombination in das Fenster eingebe.
Mit der Überlegung (s.u): 3 gleiche in einer Reihe (horizontal), daselbe nur vertikal und 2 mal schräg durch das 5. Feld, habe ich eine Funktion definiert, die bei besetzten Feldern entweder 0 oder 1, je nach Spieler, zurückgibt, bei unbesetzten 0(und noch eine extra Funktion full(), die, wenn alle Felder besetzt sind und es keinen Sieger gibt, 0 zurückgibt, mithilfe eines int Arrays, 0 leer, 1 besetzt: hier aber das gleiche Prinzip).
Code: Alles auswählen
int win()
{
if(felder mit Spieler 1 besetzt und Überlegungerfüllt)
return 0;
else if(felder mit Spieler 2 besetzt und Überlegungerfüllt)
return 1;
else
return 2;
}
//Spielablauf
do
{
...
}
while(win() != 1 || win() != 2);
Überprüft die Schleife nun nicht die Ähnlichkeit zwischen Tatsächlichen Werten und Siegwerten, sondern nimmt er die Werte der Funktion an?
Danke für die Hilfe, vielleicht versteht mich ja einer.
Gruß Chris
