C语言实现三子棋

三字棋是C语言学习阶段一个有趣的项目,就分享给大家了


#include<stdio.h>

#include<stdlib.h>
#include<time.h>
char a[4][4]={0};
int size= 9;
void dayinqipan()   //打印棋盘
{
int i=1;
printf("   |   |   \n");
for(i=1;i<4;i++)
{
printf("_%c_|_%c_|_%c_\n",a[i][1],a[i][2],a[i][3]);
if(i<3)
printf("   |   |   \n");
}


}
void chushihuaqipan()  //初始化棋盘
{
int i = 0;
int j = 0;
    for(i=1;i<4;i++)
{
for(j=1;j<4;j++)
{
a[i][j]=' ';
}
}


}
void w_play()    //玩家棋子
{
int n;
int m;
printf("请输入棋子位置您的棋子为:");
scanf("%d %d",&m,&n);
if(m<1||m>3||n<1||n>3||a[m][n]!=' ')
{  
printf("您输入的坐标不合法:\n");
w_play();
}  
else
{
a[m][n]='1';
size=size-1;
}
}
void c_play()  //电脑棋子
{
int n=0;
int m=0;
printf("电脑的棋子为0\n");

m=rand()%3;
n=rand()%3;
while(a[m][n] != ' ')
{
m=rand()%3;
n=rand()%3;
}
a[m][n]='0';
size=size-1;
}
int winner()    //判断输赢
{
if((a[1][1]==a[1][2]&&a[1][2]==a[1][3]&&a[1][3]=='1')||
(a[2][1]==a[2][2]&&a[2][2]==a[2][3]&&a[2][3]=='1')||
(a[3][1]==a[3][2]&&a[3][2]==a[3][3]&&a[3][3]=='1')||
(a[1][1]==a[2][1]&&a[2][1]==a[3][1]&&a[3][1]=='1')||
(a[1][2]==a[2][2]&&a[2][2]==a[3][2]&&a[3][2]=='1')||
(a[1][3]==a[2][3]&&a[2][3]==a[3][3]&&a[3][3]=='1')||
(a[1][1]==a[2][2]&&a[2][2]==a[3][3]&&a[3][3]=='1')||
(a[1][3]==a[2][2]&&a[2][2]==a[3][1]&&a[3][1]=='1'))
return 1;


else if((a[1][1]==a[1][2]&&a[1][2]==a[1][3]&&a[1][3]=='0')||
(a[2][1]==a[2][2]&&a[2][2]==a[2][3]&&a[2][3]=='0')||
(a[3][1]==a[3][2]&&a[3][2]==a[3][3]&&a[3][3]=='0')||
(a[1][1]==a[2][1]&&a[2][1]==a[3][1]&&a[3][1]=='0')||
(a[1][2]==a[2][2]&&a[2][2]==a[3][2]&&a[3][2]=='0')||
(a[1][3]==a[2][3]&&a[2][3]==a[3][3]&&a[3][3]=='0')||
(a[1][1]==a[2][2]&&a[2][2]==a[3][3]&&a[3][3]=='0')||
(a[1][3]==a[2][2]&&a[2][2]==a[3][1]&&a[3][1]=='0'))
return 0;
else if(size==0)
return -1;
else
return 2;
}
int main()
{
int input=1;
int b;
    srand((unsigned int)time(NULL));
while(input)
{
printf("######################\n");
printf("#######三子棋游戏#####\n");
printf("##     1.play       ##\n");
printf("##     0.exit       ##\n");
printf("######################\n");
printf("请选择:");
scanf("%d",&b);
switch(b)
{
case 1:
chushihuaqipan();
              while(1)
 {
dayinqipan();
if(winner()==-1||winner()==0||winner()==1)
{
break;
}
w_play();
dayinqipan();
if(winner()==-1||winner()==0||winner()==1)
{
break;
}
c_play();
}
if(winner()==1)
{
printf("玩家获胜");
}
else if(winner()==0)
{
printf("你输了");
}
else
{
printf("普天同庆平局");
}

break;
case 0:
break;
}
}




system("pause");
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值