33,010
社区成员
发帖
与我相关
我的任务
分享
//这里给你个大体思路吧
int a[N][N]={0}; // 棋盘
struct chess // 棋子
{
int x;
int y; // x,y表示当前坐标的位置
int bw; // 1表示白棋准备落子,2表示黑棋落子,无棋为0
int IsWin; // 是否胜出……
// int oldX;
// int oldY; // 落子前保存上次落子的x,y坐标,即另一方上次落子坐标
}chess;
int IsWin(int x,int y) //判断输赢函数
{
int i;
int n0,n1; //用来统计子数
int x0,y0,x1,y1;
for(i=0;i<4;i++)
{
n0=n1=0;
switch(i)
{
case 0: //统计横向棋子数
for(x0=x+1,y0=y;x0<N&&a[x0][y0]==a[x][y];x0++)
n0++;
for(x1=x-1,y1=y;x1>=0&&a[x1][y1]==a[x][y];x1--)
n1++;
break;
case 1: //纵向
for(x0=x,y0=y-1;y0>=0&&a[x0][y0]==a[x][y];y0--)
n0++;
for(x1=x,y1=y+1;y1<N&&a[x1][y1]==a[x][y];y1++)
n1++;
break;
case 2: //斜下
for(x0=x-1,y0=y-1;y0>=0&&x0>=0&&a[x0][y0]==a[x][y];x0--,y0--)
n0++;
for(x1=x+1,y1=y+1;x1<N&&y1<N&&a[x1][y1]==a[x][y]);x1++,y1++)
n1++;
break;
case 3: //斜上
for(x0=x-1,y0=y+1;y0<N&&x0>=0&&a[x0][y0]==a[x][y];x0--,y0++)
n0++;
for(x1=x+1,y1=y-1;x1<N&&y1>=0&&a[x1][y1]==a[x][y]);x1++,y1--)
n1++;
break;
}
if(n0+n1>=4) //判断棋子是否满5,要包落子a[x][y]
break;
}
if(n0+n1>=4)
return 1;
else
return 0;
}
if(a[chess.x][chess.y]==0) //判断是否能落子
chess.IsWin=IsWin(chess.x,chess.y); //判断输赢……
else
{}
if(chess.IsWin) //根据输赢来进行相应操作……
{}
else
chess.bw^=1; // 换另一方走棋
//备注:剩下的就是界面实现及键盘操作响应了,自己完成吧,还有按方向键chess的x,y坐标也相应变化,时间有限 ,想再详细的话那就是我写的了,而不是你写,这里就给你列个大冈吧。自己慢慢写,多想想……