📄 chuangniu.cpp
字号:
}
void ClearQipan(void)
{
int i,j;
for(i=0;i<12;i++)
for(j=0;j<12;j++)
{
Map[i][j]=IDT_KONG;
bakMap[i][j]=Map[i][j];
}
}
void DrawOneQizi(int x,int y,int nID,HWND hwnd)
{
Map[x][y]=nID;
InvalidateRect(hwnd,NULL,FALSE);
}
BOOL DrawLine(int xSource,int ySource,int xTarget,int yTarget,HWND hwnd,int* iflag,HWND hchildwnd2)
{
int i,temp;
if(*iflag==0)
{
*iflag=1;
DrawOneQizi(xTarget,yTarget,IDT_LNIU,hwnd);
QiziLink[0].hang=xTarget;
QiziLink[0].lie=yTarget;
QiziLink[0].link=10;
ChuanQiziNum=1;
return TRUE;
}
if(xTarget==QiziLink[0].hang&&yTarget==QiziLink[0].lie&&QiziLink[0].link==10&&(xSource!=xTarget||ySource!=yTarget))
{
if(QiziLink[2].hang==-1)
return FALSE;
QiziLink[0].link=-1;
temp=Map[xTarget][yTarget];
Map[xTarget][yTarget]=IDT_NIU;
if(DrawLine(xSource,ySource,xTarget,yTarget,hwnd,iflag,hchildwnd2))
{
for(i=0;i<ChuanQiziNum;i++)
{
Map[QiziLink[i].hang][QiziLink[i].lie]=IDT_KONG;
bakMap[QiziLink[i].hang][QiziLink[i].lie]=IDT_KONG;
InvalidateRect(hwnd,NULL,FALSE);
}
InitQiziLink();
*iflag=0;
ShuaXinLink(hchildwnd2);
}
else
{
Map[xTarget][yTarget]=temp;
QiziLink[0].link=10;
}
return FALSE;
}
if(((xSource!=xTarget)&&(ySource!=yTarget))||(Map[xTarget][yTarget]!=IDT_NIU)||((xSource==xTarget)&&(ySource==yTarget)))
return FALSE;
if((xSource==xTarget)&&(ySource!=yTarget))
{
if(ySource<yTarget)
{
for(i=ySource+1;i<yTarget;i++)
{
if((Map[xSource][i]!=IDT_KONG)&&(Map[xSource][i]!=IDT_KONGYC)&&(Map[xSource][i]!=IDT_NIU))
return FALSE;
}
for(i=ySource;i<yTarget;i++)
{
switch(Map[xSource][i])
{
case IDT_KONG:
Map[xSource][i]=IDT_KONGXC;
DeleteNode(xSource,i);
break;
case IDT_NIU:
Map[xSource][i]=IDT_XIANXC;
break;
case IDT_KONGYC:
Map[xSource][i]=IDT_KONGJ;
break;
case IDT_LNIU:
Map[xSource][i]=IDT_XIANXIA;
break;
case IDT_LXIANSHANG:
Map[xSource][i]=IDT_XIANXC;
break;
case IDT_LXIANYOU:
Map[xSource][i]=IDT_XIANXY;
break;
case IDT_LXIANZUO:
Map[xSource][i]=IDT_XIANXZ;
break;
}
QiziLink[ChuanQiziNum].hang=xSource;
QiziLink[ChuanQiziNum].lie=i;
ChuanQiziNum++;
}
Map[xSource][i]=IDT_LXIANSHANG;
}
if(ySource>yTarget)
{
for(i=ySource-1;i>yTarget;i--)
{
if((Map[xSource][i]!=IDT_KONG)&&(Map[xSource][i]!=IDT_KONGYC)&&(Map[xSource][i]!=IDT_NIU))
return FALSE;
}
for(i=ySource;i>yTarget;i--)
{
switch(Map[xSource][i])
{
case IDT_KONG:
Map[xSource][i]=IDT_KONGXC;
DeleteNode(xSource,i);
break;
case IDT_NIU:
Map[xSource][i]=IDT_XIANXC;
break;
case IDT_KONGYC:
Map[xSource][i]=IDT_KONGJ;
break;
case IDT_LNIU:
Map[xSource][i]=IDT_XIANSHANG;
break;
case IDT_LXIANXIA:
Map[xSource][i]=IDT_XIANXC;
break;
case IDT_LXIANYOU:
Map[xSource][i]=IDT_XIANSY;
break;
case IDT_LXIANZUO:
Map[xSource][i]=IDT_XIANSZ;
break;
}
QiziLink[ChuanQiziNum].hang=xSource;
QiziLink[ChuanQiziNum].lie=i;
ChuanQiziNum++;
}
Map[xSource][i]=IDT_LXIANXIA;
}
}
if((xSource!=xTarget)&&(ySource==yTarget))
{
if(xSource<xTarget)
{
for(i=xSource+1;i<xTarget;i++)
{
if((Map[i][ySource]!=IDT_KONG)&&(Map[i][ySource]!=IDT_KONGXC)&&(Map[i][ySource]!=IDT_NIU))
return FALSE;
}
for(i=xSource;i<xTarget;i++)
{
switch(Map[i][ySource])
{
case IDT_KONG:
Map[i][ySource]=IDT_KONGYC;
DeleteNode(i,ySource);
break;
case IDT_NIU:
Map[i][ySource]=IDT_XIANYC;
break;
case IDT_KONGXC:
Map[i][ySource]=IDT_KONGJ;
break;
case IDT_LNIU:
Map[i][ySource]=IDT_XIANYOU;
break;
case IDT_LXIANSHANG:
Map[i][ySource]=IDT_XIANSY;
break;
case IDT_LXIANXIA:
Map[i][ySource]=IDT_XIANXY;
break;
case IDT_LXIANZUO:
Map[i][ySource]=IDT_XIANYC;
break;
}
QiziLink[ChuanQiziNum].hang=i;
QiziLink[ChuanQiziNum].lie=ySource;
ChuanQiziNum++;
}
Map[i][ySource]=IDT_LXIANZUO;
}
if(xSource>xTarget)
{
for(i=xSource-1;i>xTarget;i--)
{
if((Map[i][ySource]!=IDT_KONG)&&(Map[i][ySource]!=IDT_KONGXC)&&(Map[i][ySource]!=IDT_NIU))
return FALSE;
}
for(i=xSource;i>xTarget;i--)
{
switch(Map[i][ySource])
{
case IDT_KONG:
Map[i][ySource]=IDT_KONGYC;
DeleteNode(i,ySource);
break;
case IDT_NIU:
Map[i][ySource]=IDT_XIANYC;
break;
case IDT_KONGXC:
Map[i][ySource]=IDT_KONGJ;
break;
case IDT_LNIU:
Map[i][ySource]=IDT_XIANZUO;
break;
case IDT_LXIANSHANG:
Map[i][ySource]=IDT_XIANSZ;
break;
case IDT_LXIANXIA:
Map[i][ySource]=IDT_XIANXZ;
break;
case IDT_LXIANYOU:
Map[i][ySource]=IDT_XIANYC;
break;
}
QiziLink[ChuanQiziNum].hang=i;
QiziLink[ChuanQiziNum].lie=ySource;
ChuanQiziNum++;
}
Map[i][ySource]=IDT_LXIANYOU;
}
}
InvalidateRect(hwnd,NULL,FALSE);
return TRUE;
}
int DeleteNode(int x,int y)
{
int j=nodehead.link,num,k=nodehead.link;
if(mapbiao[nodehead.link].hang==x&&mapbiao[nodehead.link].lie==y)
{
nodehead.link=mapbiao[j].link;
nodenum--;
return 1;
}
for(j=mapbiao[nodehead.link].link,num=0;num<nodenum;j=mapbiao[j].link,num++)
{
if(mapbiao[j].hang==x&&mapbiao[j].lie==y)
{
mapbiao[k].link=mapbiao[j].link;
nodenum--;
return 1;
}
k=j;
}
return 0;
}
void InitQiziLink(void)
{
int i;
for(i=0;i<144;i++)
{
QiziLink[i].hang=-1;
QiziLink[i].lie=-1;
QiziLink[i].link=-1;
}
ChuanQiziNum=0;
}
void ShuaXinLink(HWND hchildwnd2)
{
int i,k;
TCHAR szShengyu[30];
QiziNumber=70;
nodenum=0;
for(i=0;i<144;i++)
if(Map[mapbiao[i].hang][mapbiao[i].lie]==IDT_KONG)
{
nodehead.link=i;
break;
}
k=nodehead.link;
for(i=0;i<144;i++)
{
if(Map[mapbiao[i].hang][mapbiao[i].lie]>4)
QiziNumber--;
if(Map[mapbiao[i].hang][mapbiao[i].lie]==IDT_KONG)
{
mapbiao[k].link=i;
nodenum++;
k=i;
}
}
wsprintf(szShengyu,"剩余: %d",QiziNumber);
SetWindowText(hchildwnd2,szShengyu);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -