|
|
@ -29,3 +29,50 @@ char checkWinner() { |
|
|
|
if (board[0][0] == board[1][1] && board[1][1] == board[2][2]) return board[0][0]; |
|
|
|
if (board[0][2] == board[1][1] && board[1][1] == board[2][0]) return board[0][2]; |
|
|
|
|
|
|
|
// Kein Gewinner |
|
|
|
return ' '; |
|
|
|
} |
|
|
|
|
|
|
|
// Funktion zur Überprüfung, ob das Spiel unentschieden ist |
|
|
|
int isBoardFull() { |
|
|
|
for (int i = 0; i < 3; i++) { |
|
|
|
for (int j = 0; j < 3; j++) { |
|
|
|
if (board[i][j] != 'X' && board[i][j] != 'O') { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return 1; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Funktion zum Zug eines Spielers |
|
|
|
void makeMove() { |
|
|
|
int choice; |
|
|
|
printf("Spieler %c, wähle eine Zahl (1-9): ", currentPlayer); |
|
|
|
scanf("%d", &choice); |
|
|
|
|
|
|
|
// Konvertiere die Zahl in Zeilen- und Spaltenindex |
|
|
|
int row = (choice - 1) / 3; |
|
|
|
int col = (choice - 1) % 3; |
|
|
|
|
|
|
|
// Überprüfe, ob das gewählte Feld gültig ist |
|
|
|
if (choice >= 1 && choice <= 9 && board[row][col] != 'X' && board[row][col] != 'O') { |
|
|
|
board[row][col] = currentPlayer; |
|
|
|
} else { |
|
|
|
printf("Ungültiger Zug! Bitte wähle erneut.\n"); |
|
|
|
makeMove(); // Rekursiver Aufruf, bis ein gültiger Zug gemacht wird |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int main() { |
|
|
|
while (1) { |
|
|
|
displayBoard(); |
|
|
|
makeMove(); |
|
|
|
|
|
|
|
char winner = checkWinner(); |
|
|
|
if (winner == 'X' || winner == 'O') { |
|
|
|
displayBoard(); |
|
|
|
printf("Spieler %c gewinnt!\n", winner); |
|
|
|
break; |
|
|
|
} |