当前位置: 移动技术网 > IT编程>开发语言>C/C++ > 利用c语言实现在一个3*3棋盘游戏

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

2018年10月22日  | 移动技术网IT编程  | 我要评论

费县信息港,南京旅游局,性爱265

在一个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;

}

 


如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网