//第一次尝试:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#define MAX_ROW 3
#define MAX_COL 3
//初始化数组
void setFace(arr);
//打印用户界面
void youShow(arr);
//用户输入
void youInit(arr);
//判定输赢
char isWinJudge(arr);
void isWin(char ch);
//电脑输入
void comInit(arr);
//判定输赢
char isWinJudge(arr);
void isWin(char ch);
int meun() {
printf("********************\n");
printf("*****1.开始游戏*****\n");
printf("********************\n");
printf("*****0.结束游戏*****\n");
printf("********************\n");
printf("请输入你的选择:");
int choose = 0;
scanf("%d", &choose);
return choose;
}
void setFace(char arr[MAX_ROW][MAX_COL]) {
for (int r = 0; r < MAX_ROW; r++) {
for (int c = 0; c < MAX_COL; c++) {
arr[r][c] = ' ';
}
}
}
void youShow(char arr[MAX_ROW][MAX_COL]) {
for (int c = 0; c < MAX_COL; c++) {
printf(" %d ", c);
}
printf("\n");
for (int r = 0; r < MAX_ROW; r++) {
printf(" +---+---+---+\n");
printf("%d", r);
for (int c = 0; c < MAX_COL; c++) {
printf("| %c ", arr[r][c]);
}
printf("|\n");
}
printf(" +---+---+---+\n");
}
void youInit(char arr[MAX_ROW][MAX_COL]) {
while (1) {
system("cls");
youShow(arr);
printf("请输入你选择的坐标:");
int r = 0, c = 0;
scanf("%d %d", &r, &c);
if (0 <= r < MAX_ROW
&& 0 <= c < MAX_COL
&& arr[r][c] == ' ') {
arr[r][c] = 'x';
system("cls");
youShow(arr);
break;
}
else {
printf("您输入有误,请重输!\n");
Sleep(1000);
system("cls");
}
}
}
void comInit(char arr[MAX_ROW][MAX_COL]) {
srand((unsigned)time(0));
while (1) {
int r = rand() % MAX_ROW;
int c = rand() % MAX_COL;
if (arr[r][c] != ' ') {
continue;
}
else {
arr[r][c] = 'o';
break;
}
}
system("cls");
youShow(arr);
}
char isWinJudge(char arr[MAX_ROW][MAX_COL]) {
for (int r = 0; r < MAX_ROW; r++) {
if (arr[r][0] != ' '
&& arr[r][0] == arr[r][1]
&& arr[r][0] == arr[r][2]) {
return arr[r][0];
}
}
for (int c = 0; c < MAX_COL; c++) {
if (arr[0][c] != ' '
&& arr[0][c] == arr[1][c]
&& arr[0][c] == arr[2][c]) {
return arr[0][c];
}
}
if (arr[0][0] != ' '
&& arr[0][0] == arr[1][1]
&& arr[0][0] == arr[2][2]) {
return arr[0][0];
}
if (arr[2][0] != ' '
&& arr[2][0] == arr[1][1]
&& arr[2][0] == arr[0][2]) {
return arr[2][0];
}
for (int r = 0; r < MAX_ROW; r++) {
for (int c = 0; c < MAX_COL; c++) {
if (arr[r][c] == ' ') {
return 'n';
}
}
}
return 'y';
}
void isWin(char ch) {
if (ch == 'x') {
printf("玩家胜!\n");
}
if (ch == 'o') {
printf("你是sb!\n");
}
if (ch == 'y') {
printf("你还是sb!\n");
}
}
void game() {
char arr[MAX_ROW][MAX_COL];
//初始化数组
setFace(arr);
//打印用户界面
//youShow(arr);
while (1) {
//用户输入
youInit(arr);
//判定输赢
if (isWinJudge(arr) != 'n') {
isWin(isWinJudge(arr));
break;
}
//电脑输入
comInit(arr);
//判定输赢
if (isWinJudge(arr) != 'n') {
isWin(isWinJudge(arr));
break;
}
}
}
int main() {
while (1) {
int choose = meun();
if (choose == 1) {
system("cls");
game();
break;
}
else if (choose == 0) {
break;
}
else {
printf("您输入有误,请重输!");
Sleep(2000);
system("cls");
}
}
return 0;
}
//三子棋代码,实现的功能很简单
//现在只有人机对战,而且电脑AI的机制很蠢,随机落子
//后续还会改进,实现更多功能