程序和流程都很详细的在备注里面啦~~
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define row 3
#define col 3
int isFull(char borad[row][col]) {
//找不到' '为没满满返回1
//没有满返回0
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (borad[i][j] == ' ') {
//没满
return 0;
}
}
}
return 1;
}
void init(char board[row][col]) {//初始化键盘为空格
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
board[i][j] = ' ';
}
}
//设置随机种子,程序启动时候设置随机种子
srand((unsigned int)time(0));
}
void printBoard(char board[row][col]) {//打印棋盘
system("cls");
for (int i = 0; i < row; i++) {
printf("+---+---+---+\n");
for (int j = 0; j < col; j++) {
printf("| %c ", board[i][j]);
}
printf("|");
printf("\n");
}
printf("+---+---+---+\n");
}
void playerMov(char board[row][col]) {
printf("请玩家落子~~");
while (1) {
printf("请输入落子位置坐标(row,col):");
int i = 0;
int j = 0;
scanf("%d %d", &i, &j);
//输入完之后验证内容是否非法
if (i < 0 || i >= row || j < 0 || j >= col) {
printf("铁汁你输入的啥么,重新输入\n");
continue;
}
if (board[i][j] != ' ') {
printf("这里被下了,重新下老铁~~\n");
continue;
}
board[i][j] = 'x';
break;
}
}
void comptureMov(char board[row][col]) {
printf("轮到电脑落子了~~\n");
while (1) {
int i = rand() % row;
int j = rand() % col;
if (board[i][j] != ' ') {//如果有子,重新生成
continue;
}
board[i][j] = 'o';
break;
}
}
//玩家获胜返回x,电脑获胜返回o;胜负未分返回' ',和棋返回'h'
char checkWinner(char borad[row][col]) {
//1 检测行
for (int i = 0; i < row; i++) {
//初始的时候是三个空格;
if (borad[i][0] != ' '
&& borad[i][0] == borad[i][1]
&& borad[i][0] == borad[i][2]) {
return borad[i][0];
}
}
//2 检测列
for (int j = 0; j < col; j++) {
//初始的时候是三个空格;
if (borad[0][j] != ' '
&& borad[0][j] == borad[1][j]
&& borad[0][j] == borad[2][j]) {
return borad[0][j];
}
//3 检测对角线
if (borad[0][0] == borad[1][1]
&& borad[0][0] == borad[2][2]) {
return borad[0][0];
}
if (borad[2][0] == borad[1][1]
&& borad[2][0] == borad[0][2]) {
return borad[2][0];
}
//4 判断和棋
if (isFull(borad)) {
return 'h';
}
return ' ';
}
}
int main() {
//1 创建一个棋盘并初始化;
char board[row][col] = { 0 };
//2 使用函数把棋盘初始化为' '
init(board);
char winner = ' ';
while (1) {
//3 先打印棋盘内容
printBoard(board);
//4 玩家落子
playerMov(board);
winner = checkWinner(board);
if (winner != ' ') {
//胜负已分结束循环
break;
}
//5 电脑落子
comptureMov(board);
//6 判定胜负
winner = checkWinner(board);
if (winner != ' ') {
//胜负已分结束循环
break;
}
}
if (winner == 'x') {
printf("你赢了,牛皮!!\n");
}
else if (winner == 'o') {
printf("菜鸡人机都打不过.....\n");
}
else {
printf("你和人机一样厉害!!");
}
system("pause");
return 0;
}
小哥哥小姐姐点点关注呀!