象棋招法CChessMoveWord文档下载推荐.docx

上传人:b****5 文档编号:21380674 上传时间:2023-01-30 格式:DOCX 页数:37 大小:20.32KB
下载 相关 举报
象棋招法CChessMoveWord文档下载推荐.docx_第1页
第1页 / 共37页
象棋招法CChessMoveWord文档下载推荐.docx_第2页
第2页 / 共37页
象棋招法CChessMoveWord文档下载推荐.docx_第3页
第3页 / 共37页
象棋招法CChessMoveWord文档下载推荐.docx_第4页
第4页 / 共37页
象棋招法CChessMoveWord文档下载推荐.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

象棋招法CChessMoveWord文档下载推荐.docx

《象棋招法CChessMoveWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《象棋招法CChessMoveWord文档下载推荐.docx(37页珍藏版)》请在冰豆网上搜索。

象棋招法CChessMoveWord文档下载推荐.docx

//////////////////Programmer—DefinedFunction//////////////////////////////////

inlineboolHaveFriend(POINTptPosition,intfSide)

{

if(CChessBoard[ptPosition.x][ptPosition.y]==0)

returnfalse;

elseif(SideOfMan[CChessBoard[ptPosition。

x][ptPosition。

y]]==fSide)

returntrue;

else

returnfalse;

inlineboolHaveFriend(BYTEx,BYTEy,intfSide)

if(CChessBoard[x][y]==0)

elseif(SideOfMan[CChessBoard[x][y]]==fSide)

}

inlineboolHaveMan(POINTptPosition)

if(CChessBoard[ptPosition.x][ptPosition。

y]==0)

returntrue;

inlineboolHaveMan(BYTEx,BYTEy)

if(CChessBoard[x][y]==0)

intIsKingFaceToFace(intx,inty,intfSide)

boolbMayKingFaceToFace=false;

inti,j;

if(fSide==RED)

for(i=9;

i〉=7;

i-—)//检查黑将是否在同列

{

if(CChessBoard[x][i]==BLACK_K)

bMayKingFaceToFace=true;

break;

}

if(bMayKingFaceToFace==false)

return-1;

for(j=y+1;

j〈=i—1;

j++)//黑将在同列,检查中间是否有隔挡

if(CChessBoard[x][j]!

=0)//有其他子

returni;

//将帅碰面,返回黑将的y值坐标

else//fSide==BLACK

for(i=0;

i<

=2;

i++)//检查红帅是否在同列

if(CChessBoard[x][i]==RED_K)

break;

for(j=y—1;

j>

=i+1;

j-—)//红帅在同列,检查中间是否有隔挡

if(CChessBoard[x][j]!

returni;

//将帅碰面,返回红帅的y值坐标

intGenerateMove(intfSide,intnDepth)

BYTEnCChessID;

POINTptFrom,ptTo,ptHalf;

inti;

nMoveCount=0;

intx,y;

for(x=0;

x<

=8;

x++)

for(y=0;

y<

=9;

y++)

if(CChessBoard[x][y]!

=0)

nCChessID=CChessBoard[x][y];

if(SideOfMan[nCChessID]!

=fSide)//该子颜色与所要生成着法的颜色不同

continue;

ptFrom.x=x;

ptFrom.y=y;

switch(nCChessID)

//==========生成红帅的着法

caseRED_K:

//将帅碰面

i=IsKingFaceToFace(ptFrom.x,ptFrom。

y,fSide);

if(i!

=-1)

AddMoveToQueue(ptFrom,ptFrom.x,i,nDepth);

//纵向

ptTo.x=ptFrom.x;

//向前

ptTo。

y=ptFrom。

y+1;

if((ptTo.y〈=2)&&(!

HaveFriend(ptTo,fSide)))

AddMoveToQueue(ptFrom,ptTo,nDepth);

//向后

y-1;

if((ptTo.y〉=0)&

&

(!

AddMoveToQueue(ptFrom,ptTo,nDepth);

//横向

y=ptFrom.y;

//向左

ptTo.x=ptFrom。

x-1;

if((ptTo.x>

=3)&

HaveFriend(ptTo,fSide))

&&

(IsKingFaceToFace(ptTo。

x,ptTo。

y,fSide)==—1))

AddMoveToQueue(ptFrom,ptTo,nDepth);

//向右

ptTo.x=ptFrom.x+1;

if((ptTo。

x〈=5)&

HaveFriend(ptTo,fSide))

&

(IsKingFaceToFace(ptTo.x,ptTo.y,fSide)==—1))

AddMoveToQueue(ptFrom,ptTo,nDepth);

//==========生成黑将的着法

caseBLACK_K:

i=IsKingFaceToFace(ptFrom。

x,ptFrom.y,fSide);

=—1)

AddMoveToQueue(ptFrom,ptFrom。

x,i,nDepth);

x=ptFrom。

x;

y=ptFrom.y-1;

if((ptTo.y>

=7)&&

HaveFriend(ptTo,fSide)))

AddMoveToQueue(ptFrom,ptTo,nDepth);

y〈=9)&&

(!

ptTo.y=ptFrom.y;

x=ptFrom.x+1;

x<

=5)&

&(IsKingFaceToFace(ptTo。

x,ptTo.y,fSide)==—1))

AddMoveToQueue(ptFrom,ptTo,nDepth);

ptTo.x=ptFrom.x—1;

=3)&&(!

&&(IsKingFaceToFace(ptTo。

x,ptTo。

//==========生成红车的着法

caseRED_J:

x=ptFrom.x;

for(ptTo.y=ptFrom.y+1;

ptTo.y〈=9;

ptTo.y++)

if(HaveMan(ptTo))

if(!

for(ptTo.y=ptFrom。

y-1;

y〉=0;

y--)

if(!

ptTo.y=ptFrom。

y;

for(ptTo。

x=ptFrom.x—1;

x〉=0;

ptTo.x--)

x=ptFrom.x+1;

ptTo.x<

x++)

AddMoveToQueue(ptFrom,ptTo,nDepth);

//==========生成黑车的着法

caseBLACK_J:

x=ptFrom.x;

for(ptTo.y=ptFrom.y-1;

ptTo.y>

=0;

y+1;

ptTo.y〈=9;

y++)

y;

x=ptFrom.x+1;

x〈=8;

ptTo.x++)

x=ptFrom.x—1;

x>

=0;

ptTo.x——)

//==========生成红马的着法

caseRED_M:

//ptHalf用来存储马腿的位置,以判断该位置是否有子憋马腿

ptHalf.x=ptFrom.x;

ptHalf。

y+1;

if(ptHalf.y<

=8&

!

HaveMan(ptHalf))

//11点方向

x—1;

y+2;

if(ptTo.x>

=0&

&!

//1点方向

x=ptFrom.x+1;

y+2;

if(ptTo.x<

=8&&!

ptHalf.x=ptFrom。

x+1;

ptHalf.y=ptFrom.y;

if(ptHalf.x<

=7&&

//2点方向

ptTo.x=ptFrom.x+2;

ptTo.y=ptFrom.y+1;

if(ptTo.y<

=9&

//4点方向

x+2;

ptTo.y=ptFrom.y-1;

if(ptTo。

y>

=0&&

y=ptFrom.y—1;

if(ptHalf。

=1&&

//5点方向

ptTo.x=ptFrom.x+1;

ptTo.y=ptFrom.y-2;

x〈=8&&

//7点方向

ptTo.x=ptFrom.x-1;

y=ptFrom.y-2;

x〉=0&

x-1;

ptHalf.y=ptFrom。

=1&&!

//8点方向

x-2;

ptTo.y=ptFrom.y—1;

//10点方向

x—2;

if(ptTo.y〈=9&&!

//==========生成黑马的着法

caseBLACK_M:

ptHalf.x=ptFrom.x;

&!

if(ptTo.x〉=0&&!

x+1;

ptTo.y=ptFrom.y+2;

y=ptFrom.y;

=7&

y<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1