📄 qishu.cpp
字号:
// qishu.cpp: implementation of the qishu class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "chineseqi.h"
#include "qishu.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
qishu::qishu()
{
clearqi();
}
qishu::~qishu()
{
}
void qishu:: clearqi()
{
int i,j;
mydeadcount=0;
otherdeadcount=0;
for (i=0;i<9;i++)
for(j=0;j<10;j++)
qi[j][i]=0;
for(i=0;i<16;i++)
{
mydead[i]=0;
otherdead[i]=0;
}
makedead.x=-1;
makedead.y=-1;
jiang=FALSE;
}
void qishu::initqi()
{
clearqi();
qi[0][0]=-1;
qi[0][8]=-1;
qi[0][1]=-2;
qi[0][7]=-2;
qi[0][2]=-4;
qi[0][6]=-4;
qi[0][3]=-5;
qi[0][5]=-5;
qi[0][4]=-6;
qi[2][1]=qi[2][7]=-3;
qi[3][0]=qi[3][2]=qi[3][4]=qi[3][6]=qi[3][8]=-7;
qi[6][0]=qi[6][2]=qi[6][4]=qi[6][6]=qi[6][8]=7;
qi[7][1]=qi[7][7]=3;
qi[9][0]=qi[9][8]=1;
qi[9][1]=qi[9][7]=2;
qi[9][2]=qi[9][6]=4;
qi[9][3]=qi[9][5]=5;
qi[9][4]=6;
suaiwei.x=4;
suaiwei.y=9;
}
BOOL qishu:: movbin(int fx,int fy,int tx,int ty)
{
if (ty==fy&&fx==tx) return FALSE;
if (tx<0|| ty<0 ) return FALSE;
if (tx>8 || ty>9) return FALSE;
if( qi[ty][tx]>0 ) return FALSE;
if (abs(ty-fy)>1||abs(tx-fx)>1) return FALSE;
if (ty!=fy&&fx!=tx) return FALSE;
if ( ty>fy) return FALSE;
if (fy>4)
{
if (fx!=tx) return FALSE;
}
return TRUE;
}
BOOL qishu::movma(int fx,int fy,int tx,int ty)
{
if (ty==fy&&fx==tx) return FALSE;
if (tx>8 || ty>9) return FALSE;
if (tx<0|| ty<0 ) return FALSE;
if(abs(fx-tx)>2||abs(fy-ty)>2) return FALSE;
if(qi[ty][tx]>0) return FALSE;
if(abs(fy-ty)==2)
{
if(abs(fx-tx)!=1) return FALSE;
if(fy>ty)
{
if(qi[fy-1][fx]!=0)
return FALSE;
}
else
{
if (qi[fy+1][fx]!=0)
return FALSE;
}
}
else if (abs(fx-tx)==2)
{
if(abs(fy-ty)!=1) return FALSE;
if(fx>tx)
{
if(qi[fy][fx-1]!=0)
return FALSE;
}
else
{
if (qi[fy][fx+1]!=0)
return FALSE;
}
}
else
{
return FALSE;
}
return TRUE;
}
BOOL qishu::movxiang(int fx,int fy,int tx,int ty)
{
if (tx>8 || ty>9) return FALSE;
if (tx<0|| ty<0 ) return FALSE;
if (ty==fy&&fx==tx) return FALSE;
if(ty<5) return FALSE;
if (qi[ty][tx]>0) return FALSE;
if(abs(fx-tx)!=2||abs(fy-ty)!=2) return FALSE;
if(qi[(ty+fy)/2][(tx+fx)/2]!=0) return FALSE;
return TRUE;
}
BOOL qishu:: movshi(int fx,int fy,int tx,int ty)
{
if (tx>8 || ty>9) return FALSE;
if (tx<0|| ty<0 ) return FALSE;
if (ty==fy&&fx==tx) return FALSE;
if (qi[ty][tx]>0) return FALSE;
if (abs(tx-fx)>1|| abs(ty-fy)>1) return FALSE;
if (ty<7||tx<3||tx>5) return FALSE;
if(ty==fy||tx==fx) return FALSE;
return TRUE;
}
BOOL qishu::win()
{
int i,j;
for(i=0;i<9;i++)
for(j=0;j<10;j++)
{
if(qi[j][i]==-6)
return FALSE;
}
return TRUE;
}
BOOL qishu::lose()
{
int i,j;
int x,y;
int tmp;
for(i=0;i<9;i++)
for(j=0;j<10;j++)
{
if(qi[j][i]>0)
{
switch (qi[j][i])
{
case 1:
for(x=0;x<9;x++)
{
for(y=0;y<10;y++)
if(movzhu(i,j,x,y))
{
tmp=qi[y][x];
qi[y][x]=1;
qi[j][i]=0;
if(!willdead())
{
qi[y][x]=tmp;
qi[j][i]=1;
return FALSE;
}
jiang=FALSE;
qi[j][i]=1;
qi[y][x]=tmp;
}
}
break;
case 2:
for(x=0;x<9;x++)
{
for(y=0;y<10;y++)
if(movma(i,j,x,y))
{
tmp=qi[y][x];
qi[y][x]=2;
qi[j][i]=0;
if(!willdead())
{
qi[y][x]=tmp;
qi[j][i]=2;
return FALSE;
}
jiang=FALSE;
qi[j][i]=2;
qi[y][x]=tmp;
}
}
break;
case 3:
for(x=0;x<9;x++)
{
for(y=0;y<10;y++)
if(movpao(i,j,x,y))
{
tmp=qi[y][x];
qi[y][x]=3;
qi[j][i]=0;
if(!willdead())
{
qi[y][x]=tmp;
qi[j][i]=3;
return FALSE;
}
jiang=FALSE;
qi[y][x]=tmp;
qi[j][i]=3;
}
}
break;
case 4:
for(x=0;x<9;x++)
{
for(y=0;y<10;y++)
if(movxiang(i,j,x,y))
{
tmp=qi[y][x];
qi[y][x]=4;
qi[j][i]=0;
if(!willdead())
{
qi[y][x]=tmp;
qi[j][i]=4;
return FALSE;
}
jiang=FALSE;
qi[y][x]=tmp;
qi[j][i]=4;
}
}
break;
case 5:
for(x=0;x<9;x++)
{
for(y=0;y<10;y++)
if(movshi(i,j,x,y))
{
tmp=qi[y][x];
qi[y][x]=5;
qi[j][i]=0;
if(!willdead())
{
qi[y][x]=tmp;
qi[j][i]=5;
return FALSE;
}
jiang=FALSE;
qi[y][x]=tmp;
qi[j][i]=5;
}
}
break;
case 6:
for(x=0;x<9;x++)
{
for(y=0;y<10;y++)
if(movsuai(i,j,x,y))
{
tmp=qi[y][x];
qi[y][x]=6;
qi[j][i]=0;
if(!willdead())
{
qi[y][x]=tmp;
qi[j][i]=6;
return FALSE;
}
jiang=FALSE;
qi[y][x]=tmp;
qi[j][i]=6;
}
}
break;
case 7:
for(x=0;x<9;x++)
{
for(y=0;y<10;y++)
if(movbin(i,j,x,y))
{
tmp=qi[y][x];
qi[y][x]=7;
qi[j][i]=0;
if(!willdead())
{
qi[y][x]=tmp;
qi[j][i]=7;
return FALSE;
}
jiang=FALSE;
qi[y][x]=tmp;
qi[j][i]=7;
}
}
break;
}
}
}
return TRUE;
}
BOOL qishu:: movpao(int fx,int fy,int tx,int ty)
{
int has;
int i;
if (tx>8 || ty>9) return FALSE;
if (tx<0|| ty<0 ) return FALSE;
if (ty==fy&&fx==tx) return FALSE;
if (qi[ty][tx]>0) return FALSE;
if(fx!=tx && ty!=fy) return FALSE;
has=0;
if(fy!=ty)
{
if(fy>ty)
{
for(i=ty+1;i<fy;i++)
{
if(qi[i][fx]!=0)
has++;
}
if (has>1) return FALSE;
if (has==1 )
{
if (qi[ty][tx]<0) return TRUE;
else return FALSE;
}
if (qi[ty][tx]!=0) return FALSE;
}
else
{
for(i=fy+1;i<ty;i++)
{
if(qi[i][fx]!=0)
has++;
}
if (has>1) return FALSE;
if (has==1 )
{
if (qi[ty][tx]<0) return TRUE;
else return FALSE;
}
if (qi[ty][tx]!=0) return FALSE;
}
}
else
{
if(fx>tx)
{
for(i=tx+1;i<fx;i++)
{
if(qi[fy][i]!=0)
has++;
}
if (has>1) return FALSE;
if (has==1 )
{
if (qi[ty][tx]<0) return TRUE;
else return FALSE;
}
if (qi[ty][tx]!=0) return FALSE;
}
else
{
for(i=fx+1;i<tx;i++)
{
if(qi[fy][i]!=0)
has++;
}
if (has>1) return FALSE;
if (has==1 )
{
if (qi[ty][tx]<0) return TRUE;
else return FALSE;
}
if (qi[ty][tx]!=0) return FALSE;
}
}
return TRUE;
}
BOOL qishu::movzhu(int fx,int fy,int tx,int ty)
{
int i;
if (tx>8 || ty>9) return FALSE;
if (tx<0|| ty<0 ) return FALSE;
if (qi[ty][tx]>0) return FALSE;
if (ty==fy&&fx==tx) return FALSE;
if(fx!=tx && ty!=fy) return FALSE;
if(fy!=ty)
{
if(fy>ty)
{
for(i=ty+1;i<fy;i++)
{
if(qi[i][fx]!=0)
return FALSE;
}
}
else
{
for(i=fy+1;i<ty;i++)
{
if(qi[i][fx]!=0)
return FALSE;
}
}
}
else
{
if(fx>tx)
{
for(i=tx+1;i<fx;i++)
{
if(qi[fy][i]!=0)
return FALSE;
}
}
else
{
for(i=fx+1;i<tx;i++)
{
if(qi[fy][i]!=0)
return FALSE;
}
}
}
return TRUE;
}
BOOL qishu::movsuai(int fx,int fy,int tx,int ty)
{
int i;
if (tx>8 || ty>9) return FALSE;
if (tx<0|| ty<0 ) return FALSE;
if( qi[ty][tx]>0 )return FALSE;
if (ty==fy&&fx==tx) return FALSE;
if(ty<7 && qi[ty][tx]==-6 && tx==fx)
{
for(i=ty+1;i<fy;i++)
if (qi[i][fx]!=0) return FALSE;
return TRUE;
}
if (ty<7 || tx<3 || tx>5 ) return FALSE;
if (abs(tx-fx)>1|| abs(ty-fy)>1) return FALSE;
if(fx!=tx && ty!=fy) return FALSE;
suaiwei.x=tx;
suaiwei.y=ty;
return TRUE;
}
BOOL qishu::save(int x,int y)
{
int i;
for(i=x+1;i<9;i++)
{
if(qi[y][i]==1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -