实现主游戏循环
编写主游戏循环,让玩家轮流进行游戏并与游戏进行交互。
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;
}
调用initializeBoard
函数来初始化游戏棋盘,将所有方格设置为空格。
创建一个整数变量currentPlayer
,用于跟踪轮到谁下棋。初始设置为1,表示玩家1。
在while (1)
主循环中:
- 调用
clearScreen
函数清除屏幕,以便在每回合后刷新显示。
- 调用
printBoard
函数打印当前游戏棋盘。
玩家输入:通过scanf
函数提示当前玩家输入行和列坐标,例如Player 1, please enter a row and column (e.g., 1 2):
。如果输入无效(不是两个整数),则显示消息Invalid input, please try again:
并清除输入缓冲区,直到获得有效输入。
输入验证:然后,检查输入的行和列坐标是否有效(范围为1到3),并且所选位置是否为空格。如果输入无效或所选位置已被占用,则显示消息Invalid move, please try again.
并要求玩家重新输入。
落子:如果输入有效,代码会根据当前玩家(1或2)在游戏棋盘的相应位置放置一个X
或一个O
。
游戏结束检测:然后,代码调用isGameOver()
函数检查游戏是否结束。如果游戏结束,屏幕会清除并显示游戏结束的消息,包括获胜者(如果有)或平局。
游戏结果:如果有获胜者,代码会根据获胜者是哪个玩家显示Player X wins!
或Player O wins!
。如果没有获胜者,代码会显示It's a draw!
表示平局。