Hi C-Sharp-Forum,
also ich programmiere gerade ein TicTacToe spiel, es "funktioniert" auch soweit so gut, allerdigns hapert es gerade an der Abfrage, ob das Spielfeld besetzt ist.
Bevor ich zu meinem Problem komme, erläutere ich erstmal das Prinzip meines TicTacToe's:
Ich erzeuge ein 1-dimensionales-Array und gebe dieses via Console.WriteLine aus.
Das Spielfeld sieht dann so aus:
1 2 3
4 5 6
7 8 9
Dann kann der Spieler eine Zahl angeben, z.B. 2 und die Zahl 2 auf dem Spielfeld wird durch ein X bzw. ein O ersetzt.
Damit man nicht auf ein Feld setzen kann, dass schon besetzt ist, soll eigentlich diese Abfrage greifen..was sie aber nicht tut.
Hier mein Code:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| do { Console.WriteLine("Spieler1: Gib eine Zahl von 1 - 9:"); i = Convert.ToInt32(Console.ReadLine()); } while (spielfeld[i] == 'O' || spielfeld[i] == 'X'); |
Um Missverständnisse gleich auszuschließen, hier mal meine Definition wie ich meinen Code verstehe:
Frage solange nach einer (neuen) Zahl bis die Spielfeldzahl so ist, dass die angegebene Zahl NICHT mit einem X oder O besetzt ist.
Ähm naja jetzt was in meinem Programm passiert ist:
Ich setzte mein X z.B. aufs Spielfeld 1, dann ist Spieler 2 dran und der setzt auf Spielfeld 2..dann sieht das so aus:
X O 3
4 5 6
7 8 9
Wenn ich jetzt mit Spieler1 auf das Spielfeld 1 setze, kommt die gewollte Wiederholung und nichts passiert, Spieler1 ist nochmal dran, solange er nicht nen vernüftigen Zug setzt. Wenn er jetzt allerdings auf Spielfeld 2 setzt, dann wird das O einfach überschrieben.
Dann steht da X X 3 usw.
Naja was ich noch festgestellt habe, es ist kein Unterschied, ob ich den oben genannten Code benutze oder die letze Zeile so gestalte:
C#-Quelltext
1:
| while (spielfeld[i] == 'O'); |
Wenn jmd. noch weitere Codeteile benötigt, einfach fragen.
Wenn was unklar ist, einfach fragen.
Hoffe auf Hilfe
lg micha
Moderiert von
Narses: Code- durch C#-Tags ersetzt