#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define BOARD_SIZE 3
void printBoard(char board[BOARD_SIZE][BOARD_SIZE]) {
int i, j;
for (i = 0; i < BOARD_SIZE; ++i) {
for (j = 0; j < BOARD_SIZE; ++j) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}
int checkWin(char board[BOARD_SIZE][BOARD_SIZE], char player) {
int i;
// 检查行和列
for (i = 0; i < BOARD_SIZE; ++i) {
if ((board[i][0] == player && board[i][1] == player && board[i][2] == player) ||
(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 isBoardFull(char board[BOARD_SIZE][BOARD_SIZE]) {
int i, j;
for (i = 0; i < BOARD_SIZE; ++i)
for (j = 0; j < BOARD_SIZE; ++j)
if (board[i][j] == ' ') return 0;
return 1;
}
void computerMove(char board[BOARD_SIZE][BOARD_SIZE]) {
int x, y;
do {
x = rand() % BOARD_SIZE;
y = rand() % BOARD_SIZE;
} while (board[x][y] != ' ');
board[x][y] = 'O';
}
int main() {
char board[BOARD_SIZE][BOARD_SIZE];
int i, j, gameover = 0;
// 初始化棋盘
for (i = 0; i < BOARD_SIZE; ++i)
for (j = 0; j < BOARD_SIZE; ++j)
board[i][j] = ' ';
srand(time(0));
while (!gameover) {
printBoard(board);
if (isBoardFull(board)) {
printf("平局\n");
break;
}
// 玩家输入
printf("请输入你的下一步(x y): ");
scanf("%d %d", &i, &j);
while (board[i][j] != ' ') {
printf("该位置已被占据,请重新输入: ");
scanf("%d %d", &i, &j);
}
board[i][j] = 'X';
if (checkWin(board, 'X')) {
printBoard(board);
printf("你赢了!\n");
gameover = 1;
break;
}
if (isBoardFull(board)) {
printf("平局\n");
break;
}
// 电脑下棋
computerMove(board);
if (checkWin(board, 'O')) {
printBoard(board);
printf("电脑赢了!\n");
gameover = 1;
}
}
return 0;
}
三子棋(人机)
最新推荐文章于 2024-07-06 15:43:38 发布