// five.cpp: implementation of the five class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "wzq.h"
#include "five.h"
#include "stdio.h"
#include "dialogs.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
five::five()
{
dialogs d;
d.DoModal();
flag=d.m_flag;
count=0;
n1=0;
n2=0;
m[0].x=0;
m[0].y=-1;
m[1].x=1;
m[1].y=-1;
m[2].x=1;
m[2].y=0;
m[3].x=1;
m[3].y=1;
m[4].x=0;
m[4].y=1;
m[5].x=-1;
m[5].y=1;
m[6].x=-1;
m[6].y=0;
m[7].x=-1;
m[7].y=-1;
memset(qipan,0,sizeof(qipan));
memset(oy,0,sizeof(oy));
for(int m=3;m<22;m++)
{
for(int n=3;n<22;n++)
oy[m][n]=qipan[m-3][n-3];
for(n=0;n<3;n++)
oy[m][n]=3;
for(n=22;n<25;n++)
oy[m][n]=3;
}
for(m=0;m<3;m++)
{
for(int n=0;n<25;n++)
oy[m][n]=3;
}
for(m=22;m<25;m++)
{
for(int n=0;n<25;n++)
oy[m][n]=3;
}
memset(x1,0,sizeof(x1));
memset(x2,0,sizeof(x2));
memset(y1,0,sizeof(y1));
memset(y2,0,sizeof(y2));
}
five::~five()
{
}
int five::luozi(CPoint point)
{
if(qipan[point.x][point.y]==0)
{
if(count%2==0)
{
x1[n1]=point.x;
y1[n1]=point.y;
n1++;
qipan[point.x][point.y]=1;
oy[point.x+3][point.y+3]=1;
}
else
{
x2[n2]=point.x;
y2[n2]=point.y;
n2++;
qipan[point.x][point.y]=2;
oy[point.x+3][point.y+3]=2;
}
count++;
return 1;
}
return -1;
}
int five::win(CPoint point)
{
int x=point.x;
int y=point.y;
int color=(count-1)%2+1;
int flag=1;
while(x-1>=0&&y-1>=0)
{
if(qipan[x-1][y-1]==color)
{
flag++;
x--;y--;
}
else
break;
}
x=point.x;
y=point.y;
while(x+1<19&&y+1<19)
{
if(qipan[x+1][y+1]==color)
{
flag++;
x++;y++;
}
else
break;
}
if(flag>=5)
return color;
flag=1;
x=point.x;
y=point.y;
while(x-1>=0)
{
if(qipan[x-1][y]==color)
{
flag++;
x--;
}
else
break;
}
x=point.x;
y=point.y;
while(x+1<19)
{
if(qipan[x+1][y]==color)
{
flag++;
x++;
}
else
break;
}
if(flag>=5)
return color;
x=point.x;
y=point.y;
flag=1;
while(y-1>=0)
{
if(qipan[x][y-1]==color)
{
flag++;
y--;
}
else
break;
}
x=point.x;
y=point.y;
while(y+1<19)
{
if(qipan[x][y+1]==color)
{
flag++;
y++;
}
else
break;
}
if(flag>=5)
return color;
x=point.x;
y=point.y;
flag=1;
while(x-1>=0&&y+1<19)
{
if(qipan[x-1][y+1]==color)
{
flag++;
x--;y++;
}
else
break;
}
x=point.x;
y=point.y;
while(x+1<19&&y-1>=0)
{
if(qipan[x+1][y-1]==color)
{
flag++;
x++;y--;
}
else
break;
}
if(flag>=5)
return color;
return -1;
}
void five::clear()
{
count=0;
n1=0;
n2=0;
memset(qipan,0,sizeof(qipan));
memset(oy,0,sizeof(oy));
for(int m=3;m<22;m++)
{
for(int n=3;n<22;n++)
oy[m][n]=qipan[m-3][n-3];
for(n=0;n<3;n++)
oy[m][n]=3;
for(n=22;n<25;n++)
oy[m][n]=3;
}
for(m=0;m<3;m++)
{
for(int n=0;n<25;n++)
oy[m][n]=3;
}
for(m=22;m<25;m++)
{
for(int n=0;n<25;n++)
oy[m][n]=3;
}
memset(x1,0,sizeof(x1));
memset(x2,0,sizeof(x2));
memset(y1,0,sizeof(y1));
memset(y2,0,sizeof(y2));
}
void five::huiqi()
{
if(count%2==1)
{
if(n1>0)
{
n1--;
count--;
qipan[x1[n1]][y1[n1]]=0;
oy[x1[n1]+3][y1[n1]+3]=0;
}
}
else
{
if(n2>0)
{
n2--;
count--;
qipan[x2[n2]][y2[n2]]=0;
oy[x2[n2]+3][y2[n2]+3]=0;
}
}
}
void five::restart()
{
clear();
}
int five::jinshou(CPoint point)
{
int qp[25][25];
for(int m=3;m<22;m++)
{
for(int n=3;n<22;n++)
qp[m][n]=qipan[m-3][n-3];
for(n=0;n<3;n++)
qp[m][n]=2;
for(n=22;n<25;n++)
qp[m][n]=2;
}
for(m=0;m<3;m++)
{
for(int n=0;n<25;n++)
qp[m][n]=2;
}
for(m=22;m<25;m++)
{
for(int n=0;n<25;n++)
qp[m][n]=2;
}
int flag=0;
int x1,x2,x3,x4,y1,y2,y3,y4;
int x=point.x+3;
int y=point.y+3;
int fx[24]={-1,0,1,1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1};
int fy[24]={-1,-1,-1,0,1,1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1,0,1,1,1,0};
for(int i=8;i<16;i++)
{
if(qp[x+fx[i]][y+fy[i]]==1&&qp[x+2*fx[i]][y+2*fy[i]]==0&&qp[x+fx[i+4]][y+fy[i+4]]==1&&qp[x+2*fx[i+4]][y+2*fy[i+4]]==0
&&(qp[x+3*fx[i]][y+3*fy[i]]==0||qp[x+3*fx[i+4]][y+3*fy[i+4]]==0))
flag++;
}
flag=flag/2;
for( i=8;i<16;i++)
{
if(qp[x+fx[i]][y+fy[i]]==1&&qp[x+2*fx[i]][y+2*fy[i]]==1&&qp[x+fx[i+4]][y+fy[i+4]]==0&&qp[x+3*fx[i]][y+3*fy[i]]==0
&&(qp[x+4*fx[i]][y+4*fy[i]]==0||qp[x+2*fx[i+4]][y+2*fy[i+4]]==0))
flag++;
}
for( i=8;i<16;i++)
{
if(qp[x+fx[i]][y+fy[i]]==0&&qp[x+2*fx[i]][y+2*fy[i]]==1&&qp[x+fx[i+4]][y+fy[i+4]]==1&&qp[x+3*fx[i]][y+3*fy[i]]==0
&&(qp[x+3*fx[i]][y+3*fy[i]]==0&&qp[x+2*fx[i+4]][y+2*fy[i+4]]==0))
flag++;
}
for( i=8;i<16;i++)
{
if(qp[x+3*fx[i]][y+3*fy[i]]==1&&qp[x+2*fx[i]][y+2*fy[i]]==1&&qp[x+fx[i]][y+fy[i]]==0&&qp[x+fx[i+4]][y+fy[i+4]]==0&&qp[x+4*fx[i]][y+4*fy[i]]==0)
flag++;
}
if(flag>1)
return 1;
flag=0;
for( i=8;i<16;i++)
{
if(qp[x+fx[i]][y+fy[i]]==1&&qp[x+2*fx[i]][y+2*fy[i]]==1&&qp[x+3*fx[i]][y+3*fy[i]]==1&&(qp[x+4*fx[i]][y+4*fy[i]]==0
||qp[x+fx[i+4]][y+fy[i+4]]==0))
flag++;
}
for( i=8;i<16;i++)
{
if(qp[x+fx[i]][y+fy[i]]==1&&qp[x+2*fx[i]][y+2*fy[i]]==1&&qp[x+fx[i+4]][y+fy[i+4]]==1&&(qp[x+3*fx[i]][y+3*fy[i]]==0
||qp[x+2*fx[i+4]][y+2*fy[i+4]]==0))
flag++;
}
for(i=8;i<16;i++)
{
if(qp[x+fx[i]][y+fy[i]]==1&&qp[x+2*fx[i]][y+2*fy[i]]==0&&qp[x+3*fx[i]][y+3*fy[i]]==1&&qp[x+4*fx[i]][y+4*fy[i]]==1)
{
flag++;
x1=x+2*fx[i];
y1=y+2*fy[i];
}
}
for(i=8;i<16;i++)
{
if(qp[x+fx[i]][y+fy[i]]==0&&qp[x+2*fx[i]][y+2*fy[i]]==1&&qp[x+3*fx[i]][y+3*fy[i]]==1&&qp[x+fx[i+4]][y+fy[i+4]]==1)
{
flag++;
x2=x+fx[i];
y2=y+fy[i];
if(x1==x2&&y1==y2)
flag--;
}
}
for(i=8;i<16;i++)
{
if(qp[x+fx[i]][y+fy[i]]==0&&qp[x+2*fx[i]][y+2*fy[i]]==1&&qp[x+3*fx[i]][y+3*fy[i]]==1&&qp[x+4*fx[i]][y+4*fy[i]]==1)
{
flag++;
x3=x+fx[i];
y3=y+fy[i];
if((x3==x1&&y3==y1)||(x3==x2&&y3==y2))
flag--;
}
}
for( i=8;i<16;i++)
{
if(qp[x+fx[i]][y+fy[i]]==1&&qp[x+2*fx[i]][y+2*fy[i]]==0&&qp[x+3*fx[i]][y+3*fy[i]]==1&&qp[x+fx[i+4]][y+fy[i+4]]==1)
{
flag++;
x4=x+2*fx[i];
y4=y+2*fy[i];
if((x4==x1&&y4==y1)||(x4==x2&&y4==y2)||(x4==x3&&y4==y3))
flag--;
}
}
if(flag>1)
return 2;
flag=0;
for( i=8;i<16;i++)
{
int co=0;
int c=1;
while(qp[x+c*fx[i]][y+c*fy[i]]==1)
{
co++;
c++;
}
c=1;
while(qp[x+c*fx[i+4]][y+c*fy[i+4]]==1)
{
co++;
c++;
}
if(co>4)
return 4;
}
return 0;
}
void five::save()
{
int a=0;
int b=0;
FILE * fptr=fopen("棋谱.dat","wb");
if(fptr!=NULL)
{
while(a<n1||b<n2)
{
if(a<n1)
{
fwrite(x1+a,4,1,fptr);
fwrite(y1+a,4,1,fptr);
a++;
}
if(b<n2)
{
fwrite(x2+b,4,1,fptr);
fwrite(y2+b,4,1,fptr);
b++;
}
}
fclose(fptr);
}
return;
}
void five::read()
{
clear();
FILE * fptr;
if((fptr=fopen("棋谱.dat","rb"))!=NULL)
{
int a=0;
int b=0;
while(!feof(fptr))
{
if(count%2==0)
{
fread(x1+a,4,1,fptr);
if(feof(fptr)!=0)
break;
fread(y1+a,4,1,fptr);
a++;
n1++;
}
if(count%2==1)
{
fread(x2+b,4,1,fptr);
if(feof(fptr)!=0)
break;
fread(y2+b,4,1,fptr);
b++;
n2++;
}
count++;
}
fclose(fptr);
for(a=0;a<n1;a++)
{
qipan[x1[a]][y1[a]]=1;
oy[x1[a]+3][y1[a]+3]=1;
}
- 1
- 2
前往页