用c语言编写一个尽可能短的井字棋游戏
时间: 2023-12-07 13:02:32 浏览: 130
下面是一个简短的用C语言编写的井字棋游戏例:
```c
#include <stdio.h>
char board[3][3]; // 井字棋棋盘
void init_board() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = ' ';
}
}
}
void print_board() {
printf("-------------\n");
for (int i = 0; i < 3; i++) {
printf("| %c | %c | %c |\n", board[i][0], board[i][1], board[i][2]);
printf("-------------\n");
}
}
int is_valid_move(int row, int col) {
if (row >= 0 && row < 3 && col >= 0 && col < 3 && board[row][col] == ' ') {
return 1;
} else {
return 0;
}
}
int is_winner(char player) {
// 检查每一行是否有连成一线的情况
for (int i = 0; i < 3; i++) {
if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
return 1;
}
}
// 检查每一列是否有连成一线的情况
for (int i = 0; i < 3; i++) {
if (board[0][i] == player && board[1][i] == player && board[2][i] == player) {
return 1;
}
}
// 检查两条斜线是否有连成一线的情况
if ((board[0][0] == player && board[1][1] == player && board[2][2] == player) ||
(board[0][2] == player && board[1][1] == player && board[2][0] == player)) {
return 1;
}
return 0;
}
int is_board_full() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == ' ') {
return 0;
}
}
}
return 1;
}
void play_game() {
int row, col;
char player = 'X';
init_board();
while (1) {
print_board();
printf("Player %c, enter your move (row [0-2] column [0-2]): ", player);
scanf("%d %d", &row, &col);
if (is_valid_move(row, col)) {
board[row][col] = player;
if (is_winner(player)) {
printf("Player %c wins!\n", player);
break;
} else if (is_board_full()) {
printf("It's a tie!\n");
break;
}
// 切换玩家
player = (player == 'X') ? 'O' : 'X';
} else {
printf("Invalid move. Try again.\n");
}
}
print_board();
}
int main() {
play_game();
return 0;
}
```
这个示例中,使用字符数组 `board` 表示井字棋的棋盘,其中空格表示空位置,'X' 表示玩家 X 的棋子,'O' 表示玩家 O 的棋子。`init_board` 函数用于初始化棋盘,`print_board` 函数用于打印当前棋盘的状态,`is_valid_move` 函数用于检查玩家的移动是否合法,`is_winner` 函数用于判断是否有玩家获胜,`is_board_full` 函数用于检查棋盘是否已满,`play_game` 函数用于进行游戏的主循环。
希望这个简短的井字棋游戏示例对您有帮助!如果您有任何问题,请随时提问。
阅读全文