五子棋项目
数据分析
1,定义字符类型棋盘 15*15
2,定义变量,记录棋子位置
3,定义一个变量记录棋子角色 黑棋'@',白棋'O'
逻辑分析
定义需要的数据
是否需要对数据进行初始化
for(;;)
{
1,清理屏幕,显示棋盘
2,落子(坐标和方向键各实现)
坐标是否合法,该位置不能有棋子
否则继续重新落子
3,检查是否五子连珠
是,结束游戏
4,交换角色
}
其中的头文件#include<getch.h>参考7月11日发布的 迷宫推箱子
#include <stdio.h>
#include <stdlib.h>
#include <getch.h>
char Arr[15][15];//棋盘
int X=0,Y=0;//落子变量,相同个数
char Piece='@';//'@'黑棋 'O'白棋
void map(void);
int play(void);
void display(void);
int test(void);
int test(void)//判断五子连珠
{
int cnt=0;
for(int i=1;i<=4;i++)
{
if(Arr[X][Y] == Arr[X][Y-i])
cnt++;
else
break;
}
for(int i=1;i<=4;i++)
{
if(Arr[X][Y] == Arr[X][Y+i])
cnt++;
else if(cnt>=4)
return 1;
else
break;
} //左右方向
cnt=0;
for(int i=1;i<=4;i++)
{
if(Arr[X][Y] == Arr[X+i][Y])
cnt++;
else
break;
}
for(int i=1;i<=4;i++)
{
if(Arr[X][Y] == Arr[X-i][Y])
cnt++;
else
break;
}//上下方向
if(cnt>=4)
return 1;
cnt=0;
for(int i=1;i<=4;i++)
{
if(Arr[X][Y] == Arr[X-i][Y-i])
cnt++;
else
break;
}
for(int i=1;i<=4;i++)
{
if(Arr[X][Y] == Arr[X+i][Y+i])
cnt++;
else
break;
}//斜上
if(cnt>=4)
return 1;
cnt =0;
for(int i=1;i<=4;i++)
{
if(Arr[X][Y] == Arr[X+i][Y-i])
cnt++;
else
break;
}
for(int i=1;i<=4;i++)
{
if(Arr[X][Y] == Arr[X-i][Y+i])
cnt++;
else
break;
}//斜下
if(cnt>=4)
return 1;
else
return 10;
}
void display(void)//显示落子后棋盘
{
system("clear");
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++)
{
printf("%c ",Arr[i][j]);
}
printf("\n");
}
}
int play(void)//落子
{
printf("请%c下子",Piece);
for(;;)
{
printf("\33[%d;%dH",X+1,Y*2+1);//使用方向键控制落子
switch(getch())
{
case 183: X>0 && X--; break;
case 184: X<14 && X++;break;
case 186: Y>0 && Y--; break;
case 185: Y<14 && Y++;break;
case 10:
if('*' != Arr[X][Y])
continue;
else
Arr[X][Y]=Piece;
return 1;
}
/*scanf("%d %d",&X,&Y); //使用坐标控制落子
if(X>14 || X<0 || Y>14 || Y<0)
{
printf("坐标非法,请重新输入 ");
continue;
}
else if('@' == Arr[X][Y] || 'O' == Arr[X][Y])
{
printf("当前坐标有棋子,请重新输入 ");
continue;
}
Arr[X][Y]=Piece;
return 1;*/
}
}
void map(void)//初始化显示棋盘
{
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++)
{
Arr[i][j]='*';
}
}
}
int main(int argc,const char* argv[])//主函数
{
map();
for(;;)
{
display();
if(1 == play())
{
if(1==test())
{
display();
printf("\33[%d;%dH",17,1);
printf("%c胜利,游戏结束",Piece);
return 0;
}
else if('@'==Piece)
Piece='O';
else
Piece='@';
}
}
}