Implementierung der Hauptspielschleife
Schreibe die Hauptspielschleife, um es den Spielern zu ermöglichen, abwechselnd Züge zu machen und mit dem Spiel zu interagieren.
int main() {
initializeBoard();
int currentPlayer = 1;
while (1) {
clearScreen();
printf("Current board state:\n");
printBoard();
int row, col;
printf("Player %d, please enter a row and column (e.g., 1 2):", currentPlayer);
while (scanf("%d %d", &row, &col)!= 2) {
printf("Invalid input, please try again: ");
while (getchar()!= '\n');
}
if (row < 1 || row > 3 || col < 1 || col > 3 || board[row - 1][col - 1]!= ' ') {
printf("Invalid move, please try again.\n");
} else {
if (currentPlayer == 1) {
board[row - 1][col - 1] = 'X';
currentPlayer = 2;
} else {
board[row - 1][col - 1] = 'O';
currentPlayer = 1;
}
}
if (isGameOver()) {
clearScreen();
printf("Game over!\n");
printBoard();
char winner = getWinner();
if (winner!= ' ') {
printf("Player %c wins!\n", winner);
} else {
printf("It's a draw!\n");
}
break;
}
}
return 0;
}
Rufe die initializeBoard
-Funktion auf, um das Spielfeld zu initialisieren und alle Felder auf Leerzeichen zu setzen.
Erstelle eine Ganzzahlvariable currentPlayer
, um zu verfolgen, wen es an der Reihe ist. Die Anfangseinstellung ist 1, was Spieler 1 bedeutet.
In der while (1)
-Hauptschleife:
- Rufe die
clearScreen
-Funktion auf, um den Bildschirm zu löschen, damit die Anzeige nach jedem Zug aktualisiert wird.
- Rufe die
printBoard
-Funktion auf, um das aktuelle Spielfeld auszugeben.
Spielereingabe: Fordert den aktuellen Spieler auf, über die scanf
-Funktion Zeilen- und Spaltenkoordinaten einzugeben, z.B. Player 1, please enter a row and column (e.g., 1 2):
. Wenn die Eingabe ungültig ist (nicht zwei Ganzzahlen), wird die Meldung Invalid input, please try again:
angezeigt und der Eingabepuffer geleert, bis eine gültige Eingabe erhalten wird.
Eingabevalidierung: Überprüfe dann, ob die eingegebenen Zeilen- und Spaltenkoordinaten gültig sind (im Bereich von 1 bis 3) und ob die ausgewählte Position ein Leerzeichen ist. Wenn die Eingabe ungültig ist oder die ausgewählte Position bereits belegt ist, wird die Meldung Invalid move, please try again.
angezeigt und der Spieler aufgefordert, erneut einzugeben.
Zug ausführen: Wenn die Eingabe gültig ist, platziert der Code ein X
oder ein O
an der entsprechenden Position auf dem Spielfeld, abhängig vom aktuellen Spieler (1 oder 2).
Spielendeerkennung: Der Code ruft dann die isGameOver()
-Funktion auf, um zu überprüfen, ob das Spiel beendet ist. Wenn das Spiel endet, wird der Bildschirm gelöscht und eine Meldung angezeigt, dass das Spiel beendet ist, einschließlich eines Gewinners (falls vorhanden) oder eines Unentschiedens.
Spielergebnis: Wenn es einen Gewinner gibt, wird der Code Player X wins!
oder Player O wins!
ausgeben, je nachdem, welcher Spieler der Gewinner ist. Wenn es keinen Gewinner gibt, wird der Code It's a draw!
ausgeben, um ein Unentschieden anzuzeigen.