#include<stdio.h>
#include <windows.h>
#define h 3 //行
#define l 3 //列
int menu(int a);//菜单
void xs(char qz[h][l], int t);//显示
int sy(char qz[h][l],int b);//验证输赢
int jy(char qz[h][l], int k);//检验
void tc();//退出
void js(char qz[h][l],int b);//结束语
void game1(char qz[h][l], int t);//玩家出1
void game2(char qz[h][l],int t);//玩家出2
void game3(char qz[h][l]);//玩家出3
void GAME1(char qz[h][l], int b);//先手
void GAME2(char qz[h][l], int b);//后手
void game(char qz[h][l],int b);//游戏
void main();//主函数
int menu(int a) //菜单
{
printf("***************************\n");
printf("************三子棋*********\n");
printf("*********1.开始游戏********\n");
printf("*********2.退出游戏********\n");
printf("***************************\n");
printf("请输入序号:");
scanf_s("%d", &a);
for (a; a > 2 || a<1;)
{
printf("输入错误,请重新输入:");
scanf_s("%d", &a);
}
return a;
}
void xs(char qz[h][l],int t) //显示
{
for (int i = 0; i < h; i++)
{
for (int j = 0; j < l; j++)
{
printf(" %c ", qz[i][j]);
if (j < l-1)
printf("|");
}printf("\n");
if (i < h - 1)
{
for (int j = 0; j < l; j++)
{
printf("---");
if (j < l - 1)
printf("|");
}printf("\n");
}
}
}
int sy(char qz[h][l],int b) //检验输赢
{
int i = 0;
for (i; i >= 0 && i < 3; i++)
{
if (qz[0][i] == qz[1][i] && qz[1][i] == qz[2][i] && qz[1][i] != ' ')
{
printf("最终结果如下:\n");
xs(qz,b);
if (qz[1][i] == '*')
{
printf("玩家赢\n");
}
else
{
printf("电脑赢\n");
}
js(qz, b); b++;
}
if (qz[i][1] == qz[i][0] && qz[i][1] == qz[i][2] && qz[i][1] != ' ')
{
printf("最终结果如下:\n");
xs(qz,b);
if (qz[i][1] == '*')
{
printf("玩家赢\n");
}
else
{
printf("电脑赢\n");
} js(qz, b); b++;
}
if (qz[1][1] == qz[0][0] && qz[2][2] == qz[1][1] && qz[1][1] != ' ')
{
printf("最终结果如下:\n");
xs(qz,b);
if (qz[1][1] == '*')
{
printf("玩家赢\n");
}
else
printf("电脑赢\n");
js(qz, b); b++;
}
if (qz[0][2] == qz[1][1] && qz[0][2] == qz[2][0] && qz[0][2] != ' ')
{
printf("最终结果如下:\n");
xs(qz,b);
if (qz[0][2] == '*')
{
printf("玩家赢\n");
}
else
{
printf("电脑赢\n");
}
js(qz, b); b++;
}
}
return b;
}
int jy(char qz[h][l],int k ) //检验
{
k = 0;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (qz[i][j] == ' ')
k++;
}
}
return k;
}
void tc() //退出
{
system("cls");
printf("\n\n\n 感谢游玩 \n\n\n");
}
void js(char qz[h][l],int b) //结束语
{
for (int i = 0; i < h; i++)
{
for (int j = 0; j < l; j++) {
qz[i][j] = ' ';
}
}
int q = 0;
printf("1.再玩一把2.返回菜单:");
scanf_s("%d", &q); system("cls");
switch (q)
{
case 1:game(qz,b); break;
case 2:main(); break;
default: printf("输入错误,请重新输入:");
game(qz,b); break;
}
}
void game1(char qz[h][l],int t) { //玩家下1
int a = 1, b = 1;
printf("请输入你要下棋的坐标:");
scanf_s("%d%d", &a, &b);
if (a < h + 1 && a>0 && b < l + 1 && b>0)
{
qz[a - 1][b - 1] = '*';
}
else
{
do
{
printf("输入有误,请重新输入:\n");
scanf_s("%d%d", &a, &b);
} while (a > h + 1 || a<0 || b>l + 1 || b < 0 || qz[a - 1][b - 1] != ' ');
qz[a - 1][b - 1] = '*';
}
}
void game2(char qz[h][l],int t) //玩家出2
{
printf("请继续输入你要下棋的坐标:\n");
int a = 1, b = 1;
scanf_s("%d%d", &a, &b);
if (a < h + 1 && a>0 && b< l + 1 && b>0&&qz[a-1][b-1]==' ')
{
qz[a-1][b-1] = '*';
}
else
{
do
{
printf("输入有误,请重新输入:\n");
scanf_s("%d%d", &a, &b);
} while (a > h + 1 || a<0 || b>l + 1 || b <0 || qz[a - 1][b - 1] != ' ');
qz[a-1][b-1] = '*';
}
}
void game3(char qz[h][l]) //电脑出
{
int x = 0;
int y = 0;
x = rand() % h;
y = rand() % l;
if (qz[x][y] == ' ')
{
qz[x][y] = '$';
}
else
{
do
{
x = rand() % h;
y = rand() % l;
}while(qz[x][y] != ' ');
qz[x][y] = '$';
}
}
void GAME1(char qz[h][l],int b) //先手
{
int k = 0;
b = 1;
system("cls");
xs(qz,b);
game1(qz,b);
do {
game3(qz); xs(qz, b); b=sy(qz, b);
if (b == 1)
{
game2(qz, b); system("cls"); xs(qz, b); b=sy(qz, b);
if (jy(qz, k) == 0) { b--; }
}
} while (b == 1);
if (b == 0)
{
printf("结束,平局");
js(qz, b);
}
}
void GAME2(char qz[h][l],int b) //后手
{
int k = 0;
b = 1;
system("cls");
game3(qz); xs(qz, b);
do {
game2(qz,b); system("cls"); xs(qz,b); b=sy(qz, b);
if(b == 1)
{
game3(qz); xs(qz, b); b=sy(qz, b);
if (jy(qz,k)==0) {
b--;
}
}
} while (b==1);
if (b ==0)
{
printf("结束,平局");
js(qz, b);
}
}
void game(char qz[h][l],int b) //游戏
{
for (int i = 0; i < h; i++)
{
for (int j = 0; j < l; j++) {
qz[i][j] = ' ';
}
}
int e = 0;
int t = 0;
printf("你想先手还是后手:");
printf("1.先手2.后手3.返回菜单\n");
scanf_s("%d", &t);
switch (t)
{
case 1: GAME1(qz,b); break;
case 2:GAME2(qz,b); break;
case 3:main(); break;
default: printf("输入错误,请重新输入:\n");
game(qz,b); break;
}
}
void main() //主函数
{
int b = 0;
int a = 0;
char qz[h][l];
a=menu(a);
switch(a)
{case 1:
game(qz,b);
break;
case 2:
tc(); break;
}
}
代码如上,可能有些地方复杂了。希望对你有帮助。