欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

利用c语言实现在一个3*3棋盘游戏

程序员文章站 2022-03-26 09:41:03
在一个3*3矩阵中下棋,如有一方连续三颗棋子在一条直线上,则获胜。 注:下棋时,输入的是棋子所对应矩阵的具体坐标。 具体代码如下: #include #incl...
在一个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;

}