Jeder kann coden / Programmieren & TicTacToe / C# Einführung / Schleifen Grundlagen / Schleifen Vertiefung
Schleifen & TicTacToe¶
![]() |
![]() |
Link zur Microsoft Dokumentation Link zum roten Faden auf Miro Link zu Tutorial auf w3schools (while) Link zu Tutorial auf w3schools (for) Link zu Tutorial auf w3schools (continue, break) |
In einem Tic-Tac-Toe-Spiel können Schleifen verwendet werden, um das Spielfeld zu initialisieren, die Benutzer-Eingaben zu verarbeiten und zu überprüfen, ob es einen Gewinner gibt. Hier zeige ich dir anhand eines einfachen Tic-Tac-Toe-Spiels, wie Schleifen in typischen Spielsituationen zum Einsatz kommen.
1. Initialisierung des Spielfelds¶
Das Tic-Tac-Toe-Spielfeld besteht aus einem 3x3-Array. Eine for
-Schleife kann verwendet werden, um das Spielfeld zu initialisieren und leere Felder zu setzen.
Beispiel:
char[,] board = new char[3, 3];
// Spielfeld initialisieren
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
board[i, j] = '-'; // Leere Felder mit '-' darstellen
}
}
// Spielfeld anzeigen
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
Console.Write(board[i, j] + " ");
}
Console.WriteLine();
}
- - - - - - - - -
2. Spielerzug erfassen¶
Hier wird eine Schleife verwendet, um sicherzustellen, dass der Spieler auf ein freies Feld zieht. Die Schleife wird so lange wiederholt, bis der Spieler eine gültige Position eingegeben hat.
Beispiel:
int row, col;
bool validMove = false;
while (!validMove)
{
Console.WriteLine("Geben Sie die Zeile (0-2) ein: ");
row = 1; // Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Geben Sie die Spalte (0-2) ein: ");
col = 1; // Convert.ToInt32(Console.ReadLine());
// Überprüfen, ob das Feld frei ist
if (board[row, col] == '-')
{
board[row, col] = 'X'; // Spieler X macht einen Zug
validMove = true;
}
else
{
Console.WriteLine("Das Feld ist bereits belegt. Bitte einen anderen Zug machen.");
}
}
Geben Sie die Zeile (0-2) ein: Geben Sie die Spalte (0-2) ein:
3. Gewinnbedingungen überprüfen¶
Um zu prüfen, ob ein Spieler gewonnen hat, können wir mehrere Schleifen verwenden, um die Reihen, Spalten und Diagonalen des Spielfelds zu durchlaufen. Dabei werden alle Felder überprüft, um festzustellen, ob drei gleiche Symbole in einer Reihe stehen.
Beispiel für Gewinnüberprüfung:
bool isWin = false;
// Zeilen überprüfen
for (int i = 0; i < 3; i++)
{
if (board[i, 0] == board[i, 1] && board[i, 1] == board[i, 2] && board[i, 0] != '-')
{
isWin = true;
Console.WriteLine($"Spieler {board[i, 0]} hat gewonnen!");
}
}
// Spalten überprüfen
for (int i = 0; i < 3; i++)
{
if (board[0, i] == board[1, i] && board[1, i] == board[2, i] && board[0, i] != '-')
{
isWin = true;
Console.WriteLine($"Spieler {board[0, i]} hat gewonnen!");
}
}
// Diagonalen überprüfen
if (board[0, 0] == board[1, 1] && board[1, 1] == board[2, 2] && board[0, 0] != '-')
{
isWin = true;
Console.WriteLine($"Spieler {board[0, 0]} hat gewonnen!");
}
if (board[0, 2] == board[1, 1] && board[1, 1] == board[2, 0] && board[0, 2] != '-')
{
isWin = true;
Console.WriteLine($"Spieler {board[0, 2]} hat gewonnen!");
}
4. Unentschieden überprüfen¶
Um festzustellen, ob das Spiel unentschieden endet (alle Felder belegt sind, aber kein Gewinner ermittelt wurde), kann eine Schleife verwendet werden, um zu überprüfen, ob noch freie Felder existieren.
Beispiel:
bool isDraw = true;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (board[i, j] == '-') // Wenn noch leere Felder vorhanden sind
{
isDraw = false;
break;
}
}
}
if (isDraw && !isWin)
{
Console.WriteLine("Das Spiel endet unentschieden!");
}
Kompletter Ablauf ohne Funktionen:¶
Hier wird das Spielfeld initialisiert, die Spielzüge nacheinander aufgenommen, der Sieg überprüft und das Unentschieden festgestellt. Die Schleifen spielen bei allen diesen Schritten eine zentrale Rolle.
Das gesamte Beispiel ohne Funktionen:
char[,] board = new char[3, 3];
// Spielfeld initialisieren
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
board[i, j] = '-';
}
}
// Spielablauf
bool gameOver = false;
bool isPlayerX = true;
while (!gameOver)
{
// Spielfeld anzeigen
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
Console.Write(board[i, j] + " ");
}
Console.WriteLine();
}
// Spielerzug
int row, col;
bool validMove = false;
while (!validMove)
{
Console.WriteLine("Geben Sie die Zeile (0-2) ein: ");
row = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Geben Sie die Spalte (0-2) ein: ");
col = Convert.ToInt32(Console.ReadLine());
if (board[row, col] == '-')
{
board[row, col] = isPlayerX ? 'X' : 'O';
validMove = true;
}
else
{
Console.WriteLine("Das Feld ist bereits belegt. Bitte einen anderen Zug machen.");
}
}
// Sieg überprüfen
bool isWin = false;
for (int i = 0; i < 3; i++)
{
if (board[i, 0] == board[i, 1] && board[i, 1] == board[i, 2] && board[i, 0] != '-')
{
isWin = true;
Console.WriteLine($"Spieler {board[i, 0]} hat gewonnen!");
gameOver = true;
}
}
for (int i = 0; i < 3; i++)
{
if (board[0, i] == board[1, i] && board[1, i] == board[2, i] && board[0, i] != '-')
{
isWin = true;
Console.WriteLine($"Spieler {board[0, i]} hat gewonnen!");
gameOver = true;
}
}
if (board[0, 0] == board[1, 1] && board[1, 1] == board[2, 2] && board[0, 0] != '-')
{
isWin = true;
Console.WriteLine($"Spieler {board[0, 0]} hat gewonnen!");
gameOver = true;
}
if (board[0, 2] == board[1, 1] && board[1, 1] == board[2, 0] && board[0, 2] != '-')
{
isWin = true;
Console.WriteLine($"Spieler {board[0, 2]} hat gewonnen!");
gameOver = true;
}
// Unentschieden überprüfen
bool isDraw = true;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (board[i, j] == '-')
{
isDraw = false;
break;
}
}
}
if (isDraw && !isWin)
{
Console.WriteLine("Das Spiel endet unentschieden!");
gameOver = true;
}
// Spieler wechseln
isPlayerX = !isPlayerX;
}
In diesem Ablauf werden Schleifen verwendet, um das Spielfeld zu initialisieren, die Spielzüge zu validieren, das Spielfeld anzuzeigen und die Gewinn- oder Unentschieden-Bedingungen zu überprüfen.