头文件
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define max_row 3
#define max_col 3
使用init函数把棋盘的每个格子都初始化成空格
void init(char board[max_row][max_col]) {
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
board[row][col] = ' ';
}
}
srand((unsigned int)time(0));
}
使用printboard函数打印棋盘格函数
void printboard(char board[max_row][max_col]){
system("cls");
for (int row = 0; row < max_row; row++) {
printf("+---+---+---+\n");
for (int col = 0; col < max_col; col++) {
printf("| %c ", board[row][col]);
}
printf("|");
printf("\n");
}
printf("+---+---+---+\n");
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/b044b676eafb4f44a1e3c4ee7541b68e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAWW9ob295bw==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
使用playermove函数实现玩家落子,玩家落子显示为x(如果超出棋盘范围,显示输入有误;如果输入的位置已经有棋子,显示重新输入)
void playermove(char board[max_row][max_col]) {
printf("请玩家落子!");
while (1) {
printf("请输入落子位置的坐标(row col):");
int row = 0;
int col = 0;
scanf("%d %d", &row, &col);
if (row < 0 || row >= max_row || col < 0 || col >= max_col) {
printf("您的输入有误!请重新输入!\n");
continue;
}
if (board[row][col] != ' ') {
printf("当前位置已经有子了,无法落子!\n");
continue;
}
board[row][col] = 'x';
break;
}
}
使用computermove函数实现电脑随机落子,电脑落子显示为o(如果输入的位置已经有棋子,就重新随机位置)
void computermove(char board[max_row][max_col]) {
printf("轮到电脑落子!\n");
while (1) {
int row = rand() % max_row;
int col = rand() % max_col;
if (board[row][col] != ' ') {
continue;
}
board[row][col] = 'o';
break;
}
}
使用isfull函数判断是否和棋(如果在棋盘中找不到空格了,就说明已经满了;满了返回1,没满返回0)
int isfull(char board[max_row][max_col]) {
for (int row = 0; row < max_row; row++) {
for (int col = 0; col < max_col; col++) {
if (board[row][col] == ' ') {
return 0;
}
}
}
return 1;
}
使用checkwinner函数判断胜负(如果玩家获胜,返回x;如果电脑获胜,返回y;如果和棋,返回q;如果胜负未分,返回空格)
char checkwinner(char board[max_row][max_col]) {
for (int row = 0; row < max_row; row++) {
if (board[row][0] != ' ' && board[row][0] == board[row][1] && board[row][0] == board[row][2]) {
return board[row][0];
}
}
for (int col = 0; col < max_col; col++) {
if (board[0][col] != ' ' && board[0][col] == board[1][col] && board[0][col] == board[2][col]) {
return board[0][col];
}
}
if (board[0][0] != ' ' && board[0][0] == board[1][1] && board[0][0] == board[2][2]) {
return board[0][0];
}
if (board[0][2] != ' ' && board[0][2] == board[1][1] && board[0][2] == board[2][0]) {
return board[0][2];
}
if (isfull(board) ){
return 'q';
}
return ' ';
}
主函数,调用上述函数
int main() {
char board[max_row][max_col] = { 0 };
init(board);
char winner = ' ';
while (1) {
printboard(board);
playermove(board);
winner = checkwinner(board);
if (winner != ' ') {
break;
}
computermove(board);
winner = checkwinner(board);
if (winner != ' ') {
break;
}
}
if (winner == 'x') {
printf("玩家获胜!");
}
else if (winner == 'o') {
printf("电脑获胜!");
}
else {
printf("和局!");
}
return 0;
}
玩家获胜显示
![在这里插入图片描述](https://img-blog.csdnimg.cn/7916c0131f364a6fb421db09f61e007a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAWW9ob295bw==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
电脑获胜显示
![在这里插入图片描述](https://img-blog.csdnimg.cn/37933f05d3504acf833d98046135e9b9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAWW9ob295bw==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
和局显示
![在这里插入图片描述](https://img-blog.csdnimg.cn/d299ab0322684554a4d071a45950ba72.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAWW9ob295bw==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)