以下是游戏代码
/*************************主模块*********************/
/********棋盘大小********/
#define N 19
/********1为A子,2为B子********/
int pieces[N][N]={0};
/********1为A子,2为B子********/
int flag=1;
/****棋盘模块*******/
void DrawPanel()
{
int count=1; /*计数*/
int i,j;
system("CLS"); /*清屏*/
for(i=0;i<=N;i++)
{
if(i==0)
{
printf(" ");
}else
{
printf("%3d",count);
count++;
}
}
printf("\n");
printf("\n");
count=1; /*重置count变量为1*/
for(i=0;i
{
for(j=-1;j
{
if(j==-1) /*如果是第一列,则输出字符*/
{
printf("%2d",count);
count++;
}
else /*根据落子情况输出相应的符号标志*/
{
if(pieces[i][j]==0)
{
printf(" .");
}else if(pieces[i][j]==1)
{
printf(" ①"); /*为A子*/
}else if(pieces[i][j]==2)
{
printf(" ②");
}
}
}
printf("\n");
}
}
/****************下棋模块****************/
/********走棋行*****/
int zouqihang()
{
int x;
if(flag==1)
{
printf("玩家A①");
}else
{
printf("玩家B②");
}
printf("请输入要走棋子所在行数!\n");
printf("x=");
scanf("%d",&x);
while(x>N-1||x<1)
{
printf("errorn");
if(flag==1)
{
printf("玩家A①");
}else
{
printf("玩家B②");
}
printf("请出入要走棋子所在行数!\n");
printf("x=");
scanf("%d",&x);
}
return x;
}
/********走棋列*****/
int zouqilie()
{
int y;
if(flag==1)
{
printf("玩家A①");
}else
{
printf("玩家B②");
}
printf("请输入要走棋子所在列数!\n");
printf("y=");
scanf("%d",&y);
while(y>N-1||y<1)
{
printf("errorn");
if(flag==1)
{
printf("玩家A①");
}else
{
printf("玩家B②");
}
printf("请出入要走棋子所在列数!\n");
printf("y=");
scanf("%d",&y);
}
return y;
}
/****************信息模块***************/
/**********和棋*******/
void heqi()
{
system("CLS"); /*清屏*/
printf("***************************************************\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("*heqi *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("***************************************************\n");
}
/*******游戏结束********/
void over()
{
system("CLS"); /*清屏*/
printf("***************************************************\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("*Game Over *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("***************************************************\n");
}
/*******游戏开始*******/
void welcome()
{
system("CLS"); /*清屏*/
printf("***************************************************\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("*welcome *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("***************************************************\n");
printf("输入0, 五子棋游戏开始!");
getchar();
}
/***********判断输赢模块*************/
/*返回1表示A赢,返回2表示B赢,否则继续*/
int check(int x,int y)
{
/*检查行*/
int count=1;
int i=x,j=y;
j++;
/*向右数*/
while(j
{
if(pieces[i][j]==pieces[x][y]) /*判断是否有落子及是否为同一玩家*/
{
count++;
}else /*无落子或者不是同一玩家*/
{
break; /*退出循环*/
}
j++;
}
/*向左数*/
j=y-1;
while(j>=0&&count<5)
{
if(pieces[i][j]==pieces[x][y]) /*判断是否有落子及是否为同一玩家*/
{
count++;
}else /*无落子或者不是同一玩家*/
{
break; /*退出循环*/
}
j--;
}
if(count==5) /*行程五个落子连成一条线的状态*/
{
return pieces[x][y]; /*返回pieces[x][y]的值*/
}
/*检查列*/
i=x;
j=y;
count=1;
/*往下数*/
i+=1;
while(i
{
if(pieces[i][j]==pieces[x][y]) /*判断是否有落子及是否为同一玩家*/
{
count++;
}else /*无落子或者不是同一玩家*/
{
break; /*退出循环*/
}
i++;
}
/*往上数*/
i=x-1;
while(i>=0&&count<5)
{
if(pieces[i][j]==pieces[x][y]) /*判断是否有落子及是否为同一玩家*/
{
count++;
}else /*无落子或者不是同一玩家*/
{
break; /*退出循环*/
}
i--;
}
if(count==5) /*判断五子一线*/
{
return pieces[x][y]; /*返回pieces[x][y]的值*/
}
/*左斜行*/
i=x;
j=y;
count=1;
/*左斜往上*/
i=i-1;
j=j-1;
while(j>=0&&i>=0&&count<5)
{
if(pieces[i][j]==pieces[x][y]) /*判断是否有落子及是否为同一玩家*/
{
count++;
}else /*无落子或者不是同一玩家*/
{
break; /*退出循环*/
}
i--;
j--;
}
/*左斜往下*/
i=x+1;
j=y+1;
while(i
{
if(pieces[i][j]==pieces[x][y]) /*判断是否有落子及是否为同一玩家*/
{
count++;
}else /*无落子或者不是同一玩家*/
{
break; /*退出循环*/
}
i++;
j++;
}
if(count==5) /*判断是否形成五子一线*/
{
return pieces[x][y];
}
/*右斜行*/
i=x;
j=y;
count=1;
/*右斜向上*/
i=x-1;
j=y+1;
while(i>=0&&j
{
if(pieces[i][j]==pieces[x][y]) /*判断是否有落子及是否为同一玩家*/
{
count++;
}else /*无落子或者不是同一玩家*/
{
break; /*退出循环*/
}
i--;
j++;
}
/*右斜向下*/
i=x+1;
j=y-1;
while(i=0&&count<5)
{
if(pieces[i][j]==pieces[x][y]) /*判断是否有落子及是否为同一玩家*/
{
count++;
}else /*无落子或者不是同一玩家*/
{
break; /*退出循环*/
}
i++;
j--;
}
if(count==5) /*判断是否形成五子一线*/
{
return pieces[x][y];
}
return 0; /*未形成五子一线,返回0*/
}
/********主模块********/
void main()
{
int x,y; /*落子行列坐标*/
int winner; /*代表赢家*/
int countpieces=0; /*计算落子数*/
welcome(); /*欢迎界面*/
DrawPanel(); /*画棋盘*/
while(countpieces
{
/*获取下子的行列坐标*/
x=zouqihang();
y=zouqilie();
x=x-1;
y=y-1;
/*判断是否可以落子*/
if(pieces[x][y]==0)
{
/*可以落子*/
pieces[x][y]=flag;
countpieces++;
/*改变游戏状态*/
if(flag==1)
{
flag=2;
}else
{
flag=1;
}
/*检查判断输赢和游戏是否继续*/
winner=check(x,y);
if(winner==1)
{
/*A赢了*/
printf("恭喜A赢了!\n");
system("pause");
break;
}else if(winner==2)
{
/*B赢了*/
printf("恭喜B赢了!\n");
system("pause");
break;
}
}else
{
/*不能落子*/
printf("ERROR!\n");
printf("落子行列错误,请随意按按键重新输入!\n");
getchar();
getchar();
}
/*重画棋盘*/
DrawPanel();
}
if(countpieces==N*N)
{
heqi(); /*和棋*/
system("pause");
}
else
{
over(); /*游戏结束*/
}
}