#include<stdio.h>
#include<unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include "bmp.h"
#include "ts.h"
#include "wuziqi.h"
extern int wu_point[17][17];
void Go_point(int *XP,int *YP,int *mark_who) //落棋函数
{
int x2=(int)((*XP)*800.0/1024.0+0.5);//计算 触摸屏 坐标(1034*600) 改为(800*480)
int y2=(int)((*YP)*480.0/600.0+0.5);
//int x2=*XP;
//int y2=*YP;
int x2_p=(x2-60)/30+1;//坐标对于棋盘的X
if((x2-60)%30>15)
{
x2_p=x2_p+1;
}
int y2_p=(y2-30)/30+1;//坐标对于棋盘的Y
if((y2-30)%30>15)
{
x2_p=x2_p+1;
}
if(wu_point[x2_p][y2_p]==0 && *mark_who==1 && x2_p<17 && y2_p<17)//若([x2_p],[y2_p])没有棋子,则下棋
{
wu_point[x2_p][y2_p]=1;
yuan((x2_p-1)*30+60,(y2_p-1)*30+30,10,0x000000);//黑棋下棋结束
printf("black_X: %d balck_Y: %d\n",x2_p,y2_p);
*mark_who=2;
}
else if(wu_point[x2_p][y2_p]==0 && *mark_who==2 && x2_p<17 && y2_p<17)//若([x2_p],[y2_p])没有棋子,则下棋
{
wu_point[x2_p][y2_p]=2;
yuan((x2_p-1)*30+60,(y2_p-1)*30+30,10,0xFFFFFF);//白棋下棋结束
printf("white_X: %d white_Y: %d\n",x2_p,y2_p);
*mark_who=1;
}
*XP=x2_p;//把棋子在数组中对应的位置给XP,YP传出去
*YP=y2_p;
}
int panduan(int x,int y) //判断是否胜利
{
int temp;//保存下棋方的颜色
int count=1;//统计个数,针对的同一线
int i=1;//走一格
int j=1;//和i同时用来代表走斜的
int whoWin=0;//1代表黑方,2代表白方
temp=wu_point[x][y];
//水平的左边
while(temp==wu_point[x-i][y]&&x>=5&&x<17&&y>=1&&y<17&&count<5)
{
i++;
count++;
if(count==5)//首先count是5才能来判断谁赢了,不然连资格都没有
{
if(temp==1)
whoWin=1;
else
whoWin=2;
}
}
//水平的右边
i=1;
count=1;//清理掉之前的数据
while(temp==wu_point[x+i][y]&&x>0&&x<13&&y>0&&y<17&&count<5)
{
i++;
count++;
if(count==5)//首先count是5才能来判断谁赢了,不然连资格都没有
{
if(temp==1)
whoWin=1;
else
whoWin=2;
}
}
//解决垂直的方向
//垂直上方
i=1;
count=1;//清理掉之前的数据
while(temp==wu_point[x][y-i]&&x>0&&x<17&&y>4&&y<17&&count<5)
{
i++;
count++;
if(count==5)//首先count是5才能来判断谁赢了,不然连资格都没有
{
if(temp==1)
whoWin=1;
else
whoWin=2;
}
}
//垂直下方
i=1;
while(temp==wu_point[x][y+i]&&x>0&&x<17&&y>0&&y<13&&count<5)
{
i++;
count++;
if(count==5)//首先count是5才能来判断谁赢了,不然连资格都没有
{
if(temp==1)
whoWin=1;
else
whoWin=2;
}
}
//解决左上的斜线
i=1;
j=1;
count=1;
while(temp==wu_point[x-i][y-j]&&x>4&&x<17&&y>4&&y<17&&count<5)
{
i++;
j++;
count++;
if(count==5)//首先count是5才能来判断谁赢了,不然连资格都没有
{
if(temp==1)
whoWin=1;
else
whoWin=2;
}
}
//解决右下的斜线
i=1;
j=1;
count=1;
while(temp==wu_point[x+i][y+j]&&x>0&&x<13&&y>0&&y<13&&count<5)
{
i++;
j++;
count++;
if(count==5)//首先count是5才能来判断谁赢了,不然连资格都没有
{
if(temp==1)
whoWin=1;
else
whoWin=2;
}
}
//解决右上的斜线
i=1;
j=1;
count=1;
while(temp==wu_point[x+i][y-j]&&x>0&&x<13&&y>4&&y<17&&count<5)
{
i++;
j++;
count++;
if(count==5)//首先count是5才能来判断谁赢了,不然连资格都没有
{
if(temp==1)
whoWin=1;
else
whoWin=2;
}
}
//解决左下的斜线
i=1;
j=1;
count=1;
while(temp==wu_point[x-i][y+j]&&x>4&&x<17&&y>0&&y<13&&count<5)
{
i++;
j++;
count++;
if(count==5)//首先count是5才能来判断谁赢了,不然连资格都没有
{
if(temp==1)
whoWin=1;
else
whoWin=2;
}
}
return whoWin;
}
void star_game(int fd_s,int *XP,int *YP) //开始游戏
{
chessboard();//画棋盘
int mark_who=1;//谁的回合,1——黑 2——白
int win_who=0;//谁赢 1-黑胜 2-白胜
//int wu_point[15][15];//构建棋盘点,0-无 1-黑 2-白
for(int i=0;i<17;i++)
{
for(int j=0;j<17;j++)
{
if(i==0 ||i==16 ||j==0 ||j==16)
{
wu_point[i][j]=3;
}
else
{
wu_point[i][j]=0;
}
}
}
while(1)
{
int a1=get_touch(fd_s,XP,YP);
Go_point(XP,YP,&mark_who);
win_who= panduan(*XP,*YP);//接受判断结果
if(win_who==1)
{
printf("BLACK WIN!!!\n");
break;
}
if(win_who==2)
{
printf("WHITE WIN!!!\n");
break;
}
}
}
评论5