在一个3*3矩阵中下棋,如有一方连续三颗棋子在一条直线上,则获胜。
注:下棋时,输入的是棋子所对应矩阵的具体坐标。
具体代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
char a[3][3]={ 0 };
int size =9;
void qipan() //打印棋盘
{
int i=0,j=0;
printf(" | | \n");
for(i=0;i<3;i++)
{
printf("_%c_|_%c_|_%c_\n",a[i][0],a[i][1],a[i][2]);
if(i<2)
printf(" | | \n");
}
}
void wjxq()//玩家下棋
{
int m=0,n=0;
printf("玩家棋子为@: ");//输入的是旗子所对应的坐标
scanf("%d %d",&m,&n);
if(m<1 || m>3 || n<1 || n>3 || a[m-1][n-1]!=' ')
{
printf("你输出的坐标位置不合法!");
wjxq();
}
else
{
a[m-1][n-1]='@';
size=size-1;
}
}
void dn()//电脑下棋
{
int m=0,n=0;
printf("电脑的棋子#:\n");
srand(time(NULL));
m=rand()%3;
n=rand()%3;
while(a[m][n]!=' ' )
{
m=rand()%3;
n=rand()%3;
}
a[m][n]='#';
size=size-1;
}
int winner()//判断获胜者
{
if((a[0][0]== a[0][1] && a[0][1]==a[0][2] && a[0][2]=='@')||
(a[1][0]==a[1][1] && a[1][1]==a[1][2] && a[1][2]=='@')||
(a[2][0]==a[2][1] && a[2][1]==a[2][2] && a[2][2]=='@')||
(a[0][0]==a[1][0] && a[1][0]==a[2][0] && a[2][0]=='@')||
(a[0][1]==a[1][1] && a[1][1]==a[2][1] && a[2][1]=='@')||
(a[0][2]==a[1][2] && a[1][2]==a[2][2] && a[2][2]=='@')||
(a[0][0]==a[1][1] && a[1][1]==a[2][2] && a[2][2]=='@')||
(a[0][2]==a[1][1] && a[1][1]==a[2][0] && a[2][0]=='@'))
return 1;//玩家获胜
else if((a[0][0]==a[0][1] && a[0][1]==a[0][2] && a[0][2]=='@')||
(a[1][0]==a[1][1] && a[1][1]==a[1][2] && a[1][2]=='@')||
(a[2][0]==a[2][1] && a[2][1]==a[2][2] && a[2][2]=='@')||
(a[0][0]==a[1][0] && a[1][0]==a[2][0] && a[2][0]=='@')||
(a[0][1]==a[1][1] && a[1][1]==a[2][1] && a[2][1]=='@')||
(a[0][2]==a[1][2] && a[1][2]==a[2][2] && a[2][2]=='@')||
(a[0][0]==a[1][1] && a[1][1]==a[2][2] && a[2][2]=='@')||
(a[0][2]==a[1][1] && a[1][1]==a[2][0] && a[2][0]=='@'))
return 0;//玩家输了,即电脑赢了
else if(size==0)
return -1;//平局
else
return 2;
}
int main()
{
int i=0,j=0;//将数组初始化为空
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
a[i][j]=' ';
}
}
while(1)
{
qipan();
if(winner()==-1||winner()==0||winner()==1)
{
break;
}
wjxq();
qipan();
if(winner()==-1||winner()==0||winner()==1)
{
break;
}
dn();
}
if(winner()==1)
{
printf("玩家获胜!");
}
else if(winner()==0)
{
printf("玩家输了!");
}
else
{
printf("平局");
}
system("pause");
return 0;
}
运行如图所示:
转载于:https://blog.51cto.com/liu153/1710306