制作五子棋游戏,首先我们要绘制棋盘
我们可以通过调用函数来显示棋盘
void watch(int s[11][11])
{
int i,j;
for(i=0;i<11;i++)
{
for(j=0;j<11;j++)
{
if(i==0)
{
if(j>=0&&j<9) printf("%d ",j+1);
else if(j==9) printf("%d\n",j+1);
}
if(i==0&&j==10) continue;
if(i==1)
{
if(j==0)
{
if(s[i][j]==2) printf("┏ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j==9)
{
if(s[i][j]==2) printf("┓ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j==10) printf("%d\n",i);
else if(j<9&&j>0)
{
if(s[i][j]==2) printf("┳ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
}
else if(i>1&&i<10)
{
if(j==0)
{
if(s[i][j]==2) printf("┣ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j>0&&j<9)
{
if(s[i][j]==2) printf("╋ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j==9)
{
if(s[i][j]==2) printf("┫ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
if(j==10) printf("%d\n",i);
}
else if(i==10)
{
if(j==0)
{
if(s[i][j]==2) printf("┗ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j>0&&j<9)
{
if(s[i][j]==2) printf("┻ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j==9)
{
if(s[i][j]==2) printf("┛ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j==10) printf("%2d\n",i);
}
}
}
}
其次,我们还要判断双方的输赢,和平局等情况
int wf(int s[11][11])
{
int i,j,d,x=1;
for(i=1;i<11;i++)
{
for(j=0;j<6;j++)
{
if(s[i][j]==0&&s[i][j+1]==0&&s[i][j+2]==0&&s[i][j+3]==0&&s[i][j+4]==0)
{
d=0;
return d;
}
else if(s[i][j]==1&&s[i][j+1]==1&&s[i][j+2]==1&&s[i][j+3]==1&&s[i][j+4]==1)
{
d=1;
return d;
}
else
{
d=3;
}
}
}
for(j=0;j<10;j++)
{
for(i=1;i<7;i++)
{
if(s[i][j]==0&&s[i+1][j]==0&&s[i+2][j]==0&&s[i+3][j]==0&&s[i+4][j]==0)
{
d=0;
return d;
}
else if(s[i][j]==1&&s[i+1][j]==1&&s[i+2][j]==1&&s[i+3][j]==1&&s[i+4][j]==1)
{
d=1;
return d;
}
else
{
d=3;
}
}
}
for(j=0;j<6;j++)
{
for(i=1;i<7;i++)
{
if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
{
d=0;
return d;
}
else if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
{
d=1;
return d;
}
else
{
d=3;
}
}
}
for(i=1;i<7;i++)
{
for(j=1;j<6;j++)
{
if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
{
d=0;
return d;
}
else if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
{
d=1;
return d;
}
else
{
d=3;
}
}
}
for(i=1;i<7;i++)
{
for(j=4;j<10;j++)
{
if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
{
d=0;
return d;
}
else if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
{
d=1;
return d;
}
else
{
d=3;
}
}
}
for(j=5;j<10;j++)
{
for(i=2;i<7;i++)
{
if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
{
d=0;
return d;
}
else if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
{
d=1;
return d;
}
else
{
d=3;
}
}
}
if(d==3)
{
for(i=1;i<11;i++)
{
for(j=0;j<10;j++)
{
if(s[i][j]==2) x=0;
}
}
if(x==1) d=2;
}
return d;
}
先后手的问题,我们可以用for循环判断,看是否能被2整除来决定谁落子
同时我们加入sleep函数和system(“cls”)清屏函数和system(“color xx”)来调色
另外可添加游戏说明进去,使游戏更完善。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
void main()
{
int n,i;
void game();
void read();
system("color F0");
printf("正在加载中......\n");
for(i=1;i<=50;i++)
{
printf(" ");
printf("%d%%",i*2);
Sleep(100-2*i);
printf("\b\b\b");
}
printf("\n加载成功,请稍等......");
Sleep(1500);
while(1)
{
system("cls");
printf("------------------------------欢迎进入五子棋游戏------------------------------\n");
printf("----------‘1’开始游戏---------‘2’游戏说明---------‘0’退出游戏-----------\n");
printf("请输入序号[ ]\b\b");
scanf("%d",&n);
if(n==1) {printf("开始游戏\n");game();printf("游戏结束\n");break;}
else if(n==2) {system("cls");read();}
else if(n==0) {printf("退出游戏成功\n") ; break;}
else {printf("输入有误,请重新输入\n"); continue;}
}
}
void game()
{
int i,j,x,y,d,e=1;
int s[11][11];
int wf(int s[11][11]);
void watch(int s[11][11]);
while(e)
{
for(i=0;i<11;i++)
{
for(j=0;j<11;j++)
{
s[i][j]=2;
}
}
d=2;
system("cls");
printf("初始化棋盘中......\n");
Sleep(1200);
system("cls");
watch(s);
for(i=1;;i++)
{
if(i%2!=0)
{
printf("轮到你了\n");
begin: printf("请输入棋子的坐标:(例如:3 3)\n");
scanf("%d%d",&x,&y);
if(x>=1&&x<=10&&y>=1&&y<=10)
{
if(s[x][y-1]!=2)
{
printf("此处已经有棋子了,请重新落子\n");
goto begin;
}
else
{
s[x][y-1]=0;
system("cls");
watch(s);
}
d=wf(s);
Sleep(1200);
if(d==0){ printf("恭喜你获得了胜利\n"); break;}
else if(d==2) {printf("平局\n"); break;}
else;
}
else {printf("输入错误,请重新输入\n"); goto begin;}
}
else
{
system("cls");
printf("轮到电脑落子\n");
srand((unsigned)time(NULL));
end:x=rand()%10+1;
y=rand()%10;
if(s[x][y]!=2) goto end;
else s[x][y]=1;
Sleep(1200);
system("cls");
watch(s);
d=wf(s);
Sleep(1200);
if(d==1) {printf("你输了\n"); break;}
else if(d==2) {printf("平局\n"); break;}
else;
}
}
printf("继续游戏请按‘1’,结束游戏请按‘0’\n");
printf("请输入序号[ ]\b\b");
scanf("%d",&e);
}
}
void read()
{
printf("游戏说明:\n");
printf("\n玩家执白棋先行(别问我为什么执白棋先行,因为老子喜欢),输入与棋盘相对应的横纵坐标即可,随后电脑开始落子\n");
printf("\n注意:必须输入与棋盘对应的横纵坐标,且横坐标在前,纵坐标在后,中间用空格隔开\n");
printf("\n获胜条件:\n棋子一排或者一列或者斜行之中连续五子连续即为胜利\n");
printf("\nps:别点右上角叉叉退出程序,输入数字结束游戏有惊喜!\n");
printf("\n请按任意键退出游戏说明\n");
getch();
}
int wf(int s[11][11])
{
int i,j,d,x=1;
for(i=1;i<11;i++)
{
for(j=0;j<6;j++)
{
if(s[i][j]==0&&s[i][j+1]==0&&s[i][j+2]==0&&s[i][j+3]==0&&s[i][j+4]==0)
{
d=0;
return d;
}
else if(s[i][j]==1&&s[i][j+1]==1&&s[i][j+2]==1&&s[i][j+3]==1&&s[i][j+4]==1)
{
d=1;
return d;
}
else
{
d=3;
}
}
}
for(j=0;j<10;j++)
{
for(i=1;i<7;i++)
{
if(s[i][j]==0&&s[i+1][j]==0&&s[i+2][j]==0&&s[i+3][j]==0&&s[i+4][j]==0)
{
d=0;
return d;
}
else if(s[i][j]==1&&s[i+1][j]==1&&s[i+2][j]==1&&s[i+3][j]==1&&s[i+4][j]==1)
{
d=1;
return d;
}
else
{
d=3;
}
}
}
for(j=0;j<6;j++)
{
for(i=1;i<7;i++)
{
if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
{
d=0;
return d;
}
else if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
{
d=1;
return d;
}
else
{
d=3;
}
}
}
for(i=1;i<7;i++)
{
for(j=1;j<6;j++)
{
if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
{
d=0;
return d;
}
else if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
{
d=1;
return d;
}
else
{
d=3;
}
}
}
for(i=1;i<7;i++)
{
for(j=4;j<10;j++)
{
if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
{
d=0;
return d;
}
else if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
{
d=1;
return d;
}
else
{
d=3;
}
}
}
for(j=5;j<10;j++)
{
for(i=2;i<7;i++)
{
if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
{
d=0;
return d;
}
else if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
{
d=1;
return d;
}
else
{
d=3;
}
}
}
if(d==3)
{
for(i=1;i<11;i++)
{
for(j=0;j<10;j++)
{
if(s[i][j]==2) x=0;
}
}
if(x==1) d=2;
}
return d;
}
void watch(int s[11][11])
{
int i,j;
for(i=0;i<11;i++)
{
for(j=0;j<11;j++)
{
if(i==0)
{
if(j>=0&&j<9) printf("%d ",j+1);
else if(j==9) printf("%d\n",j+1);
}
if(i==0&&j==10) continue;
if(i==1)
{
if(j==0)
{
if(s[i][j]==2) printf("┏ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j==9)
{
if(s[i][j]==2) printf("┓ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j==10) printf("%d\n",i);
else if(j<9&&j>0)
{
if(s[i][j]==2) printf("┳ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
}
else if(i>1&&i<10)
{
if(j==0)
{
if(s[i][j]==2) printf("┣ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j>0&&j<9)
{
if(s[i][j]==2) printf("╋ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j==9)
{
if(s[i][j]==2) printf("┫ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
if(j==10) printf("%d\n",i);
}
else if(i==10)
{
if(j==0)
{
if(s[i][j]==2) printf("┗ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j>0&&j<9)
{
if(s[i][j]==2) printf("┻ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j==9)
{
if(s[i][j]==2) printf("┛ ");
else if(s[i][j]==1) printf("○");
else if(s[i][j]==0) printf("●");
}
else if(j==10) printf("%2d\n",i);
}
}
}
}
转载需要表明出处。
大家如有想法,比方说添加悔棋功能,使人机的难度可供选择等,可以跟我一起讨论。
或者有什么不对的地方,请各位赐教。