C语言编写五子棋游戏
本文实例为大家分享了C语言编写五子棋游戏的具体代码,供大家参考,具体内容如下
一、构建棋盘
首先可以用一个二维数组来构建棋盘,下标表示位置,内容表示黑子白子或者空位。当数组内容为1时,该位置为白字,当数组为0时,该位置为白子,空位输出+
intw[11][11],flag=0;
inta,b;
for(intk=0;k<11;k++)
printf("第%d列\t",k);
printf("\n");
for(inti=0;i<11;i++){
for(intj=0;j<11;j++){
if(w[i][j]==0)printf("黑\t");
elseif(w[i][j]==1)printf("白\t");
elseprintf("+\t");
}
printf("第%d行\n\n",i);
}
二、判断位置超范围与错误输入
当输入的棋子坐标超出范围或者该位置已经存在棋子,则再次输入棋子坐标。其中flag作为标志作为判别黑手白手的标志。
if(flag==0){
printf("黑色下棋\n");
scanf("%d%d",&a,&b);
while(a<0||a>10||b<0||b>10){
printf("此位置超出范围,请重新输入:");
scanf("%d%d",&a,&b);
}
while(w[a][b]==0||w[a][b]==1)
{
printf("此位置已有棋子,请重新输入:");
scanf("%d%d",&a,&b);
}
flag=1;
w[a][b]=0;
}
else{
printf("白色下棋\n");
scanf("%d%d",&a,&b);
while(a<0||a>10||b<0||b>10){
printf("此位置超出范围,请重新输入:");
scanf("%d%d",&a,&b);
}
while(w[a][b]==0||w[a][b]==1)
{
printf("此位置已有棋子,请重新输入:");
scanf("%d%d",&a,&b);
}
三、判断胜负
在五子棋中,出现五个棋子排成一排或者一列或者斜排即可判为胜出。每当落下一个棋子,对该棋子前后上下斜排五个棋子进行判别,超过五个连续的一样颜色的棋子则胜出。
intA=1,B=1,jieguo=0,C=1,D=1;
intx=1,y=1,m=1,n=1;
if(w[a][b]==1){
for(inti=1;i<5;i++){
if(w[a][b+i]==1)A++;
elsebreak;
}
for(inti=1;i<5;i++){
if(w[a][b-i]==1)A++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a+i][b]==1)C++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a-i][b]==1)C++;
elsebreak;
}
if(A>4||C>4)jieguo=1;//白棋胜利标志
else{
for(inti=1;i<5;i++){
if(w[a+i][b+i]==1)x++;
elsebreak;
}
for(inti=1;i<5;i++){
if(w[a-i][b-i]==1)x++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a+i][b-i]==1)y++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a-i][b+i]==1)y++;
elsebreak;
}
if(x>4||y>4)jieguo=1;
}
}
if(w[a][b]==0){
for(inti=1;i<5;i++){
if(w[a][b+i]==0)B++;
elsebreak;
}
for(inti=1;i<5;i++){
if(w[a][b-i]==0)B++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a+i][b]==0)D++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a-i][b]==0)D++;
elsebreak;
}
if(B>4||D>4)jieguo=2;//黑棋胜利标志
else{
for(inti=1;i<5;i++){
if(w[a+i][b+i]==0)m++;
elsebreak;
}
for(inti=1;i<5;i++){
if(w[a-i][b-i]==0)m++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a+i][b-i]==0)n++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a-i][b+i]==0)n++;
elsebreak;
}
if(m>4||n>4)jieguo=2;
}
}
程序完成
四、演示结果
五、源代码
intmain(){
intw[11][11],flag=0;
inta,b;
while(1){
if(flag==0){
printf("黑色下棋\n");
scanf("%d%d",&a,&b);
while(a<0||a>10||b<0||b>10){
printf("此位置超出范围,请重新输入:");
scanf("%d%d",&a,&b);
}
while(w[a][b]==0||w[a][b]==1)
{
printf("此位置已有棋子,请重新输入:");
scanf("%d%d",&a,&b);
}
flag=1;
w[a][b]=0;
}
else{
printf("白色下棋\n");
scanf("%d%d",&a,&b);
while(a<0||a>10||b<0||b>10){
printf("此位置超出范围,请重新输入:");
scanf("%d%d",&a,&b);
}
while(w[a][b]==0||w[a][b]==1)
{
printf("此位置已有棋子,请重新输入:");
scanf("%d%d",&a,&b);
}
flag=0;
w[a][b]=1;
}
intA=1,B=1,jieguo=0,C=1,D=1;
intx=1,y=1,m=1,n=1;
if(w[a][b]==1){
for(inti=1;i<5;i++){
if(w[a][b+i]==1)A++;
elsebreak;
}
for(inti=1;i<5;i++){
if(w[a][b-i]==1)A++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a+i][b]==1)C++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a-i][b]==1)C++;
elsebreak;
}
if(A>4||C>4)jieguo=1;//白棋胜利标志
else{
for(inti=1;i<5;i++){
if(w[a+i][b+i]==1)x++;
elsebreak;
}
for(inti=1;i<5;i++){
if(w[a-i][b-i]==1)x++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a+i][b-i]==1)y++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a-i][b+i]==1)y++;
elsebreak;
}
if(x>4||y>4)jieguo=1;
}
}
if(w[a][b]==0){
for(inti=1;i<5;i++){
if(w[a][b+i]==0)B++;
elsebreak;
}
for(inti=1;i<5;i++){
if(w[a][b-i]==0)B++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a+i][b]==0)D++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a-i][b]==0)D++;
elsebreak;
}
if(B>4||D>4)jieguo=2;//黑棋胜利标志
else{
for(inti=1;i<5;i++){
if(w[a+i][b+i]==0)m++;
elsebreak;
}
for(inti=1;i<5;i++){
if(w[a-i][b-i]==0)m++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a+i][b-i]==0)n++;
elsebreak;
}
for(inti=1;i<5;i++)
{
if(w[a-i][b+i]==0)n++;
elsebreak;
}
if(m>4||n>4)jieguo=2;
}
}
for(intk=0;k<11;k++)
printf("第%d列\t",k);
printf("\n");
for(inti=0;i<11;i++){
for(intj=0;j<11;j++){
if(w[i][j]==0)printf("黑\t");
elseif(w[i][j]==1)printf("白\t");
elseprintf("+\t");
}
printf("第%d行\n\n",i);
}
if(jieguo==1){
printf("白棋胜利");
break;
}
if(jieguo==2){
printf("黑棋胜利");
break;
}
}
return0;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
