首先创建三子棋我们要了解它的核心,就是玩家下一步,电脑下一步,和如何判断输赢,其他的都属于需要自己美化的地方,例如棋盘,游戏界面,就这样我们可以依次来解决我们所需要的问题。
先放代码
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
char arr[3][3] = { 0 };
int zhong(char arr[3][3])
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
if (arr[i][j] == ' ')
return 0;
}
}
return 1;
}
void oo(char arr[3][3])
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
arr[i][j] = ' ';
}
}
}
void qipan(char arr[3][3])
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf(" %c ",arr[i][j]);
if(j!=2)
printf("|");
}
if(i!=2)
printf("\n___|___|___\n");
}
}
void xing(char arr[3][3],int x,int y)
{
arr[x][y] = '*';
}
void diannao(char arr[3][3])
{
while (1)
{
srand(time(NULL));//生成随机数
int a = rand() % 3;
int b = rand() % 3;
if (arr[a][b] == ' ')
{
arr[a][b] = '+';
break;
}
if (zhong(arr));
break;
}
}
int panduan(char arr[3][3])
{
int i;
for (i = 0; i < 3; i++)
{
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ')
{
if (arr[i][0] == '*')
return 1;
else
return 2;
}
}
for (i = 0; i < 3; i++)
{
if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != ' ')
{
if (arr[0][i] == '*')
return 1;
else
return 2;
}
}
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
{
if (arr[0][0] == '*')
return 1;
else
return 2;
}
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
{
if (arr[0][2] == '*')
return 1;
else
return 2;
}
return 0;
}
int game(char arr[3][3])
{
int x, y;
qipan(arr);//打印棋盘
while (1)
{
printf("\n请输入你下的坐标\n");
scanf("%d %d", &x, &y);
xing(arr,x,y);//将该坐标换成棋子
qipan(arr);
diannao(arr);//电脑行动
printf("\n电脑行动\n");
qipan(arr);
if (panduan(arr))//判断是否三子成行
{
return panduan(arr);
break;
}
if (zhong(arr))
{
return 123;
break;
}
}
}
int main()
{
int n;
do
{
printf("******************\n");
printf("****1>开始游戏****\n");
printf("****0<退出游戏****\n");
printf("******************\n");
scanf("%d", &n);
switch (n)
{
case 1 :
printf("游戏开始\n");
oo(arr);//初始化
int o=game(arr);//进入游戏
if (o == 1)
{
printf("\n玩家胜利\n");
}
else if(o==2)
{
printf("\n电脑胜利\n");
}
else
{
printf("\n平局\n");
}
break;
case 0:
printf("游戏结束\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (n);
return 0;
}
游戏界面
我采用do while循环通过1,0判断是否开始游戏:
int main()
{
int n;
do
{
printf("******************\n");
printf("****1>开始游戏****\n");
printf("****0<退出游戏****\n");
printf("******************\n");
scanf("%d", &n);
switch (n)
{
case 1:
printf("游戏开始\n");
break;
case 0:
printf("游戏结束\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (n);
return 0;
}
棋盘的实现
三子棋就像是一个九宫格一样,我们很容易想到二维数组,就可以建立一个二维数组进行摆盘。由于我们要想打出棋盘那样的格式需要将里面的元素改为空格。
oo(arr);//初始化
void oo(char arr[3][3])
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
arr[i][j] = ' ';
}
}
}
游戏本体
同样我们可以做一个函数实现我们要先打印一下棋盘给我们展示,并且我们每一次下完棋都要打印棋盘所以我们也要做一个函数实现棋盘打印(这里我们可以根据自己喜好来更改,我弄的并不好看)
void qipan(char arr[3][3])
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf(" %c ",arr[i][j]);
if(j!=2)
printf("|");
}
if(i!=2)
printf("\n___|___|___\n");
}
}
随后我们就要开始我们的下棋之路,因为二维数组的缘故,我们可以以二维数组的下标做我们的棋盘坐标,并将我们的坐标对应的地方改成我们的符号每次都要更改,也要做一个函数。
printf("\n请输入你下的坐标\n");
scanf("%d %d", &x, &y);
xing(arr,x,y);//将该坐标换成棋子
void xing(char arr[3][3],int x,int y)
{
arr[x][y] = '*';
}
随后我么也要打印一下我们应用后的棋盘,接下来就要到电脑了,做一个函数实现我们现在只要做简单的做一个随机数就好,我们要用到头文件time.h与stdlib.h大致就是生成一个随机数我们用这个数值取余那么余数就是小于我们的除数,根据情况加不加一看看。
void diannao(char arr[3][3])
{
while (1)
{
srand(time(NULL));//生成随机数
int a = rand() % 3;
int b = rand() % 3;
if (arr[a][b] == ' ')
{
arr[a][b] = '+';
break;
}
}
}
判断环节
我们要判断是否有三子成一条线,很容易实现,其中我们返回1,2是为了判断谁赢了返回0就要继续。
int panduan(char arr[3][3])
{
int i;
for (i = 0; i < 3; i++)
{
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ')
{
if (arr[i][0] == '*')
return 1;
else
return 2;
}
}
for (i = 0; i < 3; i++)
{
if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != ' ')
{
if (arr[0][i] == '*')
return 1;
else
return 2;
}
}
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
{
if (arr[0][0] == '*')
return 1;
else
return 2;
}
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
{
if (arr[0][2] == '*')
return 1;
else
return 2;
}
return 0;
}
判断一下棋子全部落下
int zhong(char arr[3][3])
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
if (arr[i][j] == ' ')
return 0;
}
}
return 1;
}
这样大致组合一下就可以了。