象棋c语言算法,中国象棋的算法是怎样的?

int StepJudge(int oldx,int oldy,int nowx,int nowy)

/* oldx,oldy 棋字原来位置 */

/* oldx,oldy 棋字新位置 */

/* 判断从原位置到新位置的合法性 */

{

int index,count=0;

int nox,noy;

int x,y,x1,x2,y1,y2;

BYTE ChessId; /* 棋字是哪一方的,有RED,BLUE,NONE三种值 */

ChessId=map[oldx][oldy].Id;

if(ChessId==NONE) return 0;

if(oldx==nowx&&oldy==nowy) return 0;

if(nowx>8||nowx<0||nowy<0||nowy>9) return 0;

nox=nowx-oldx;noy=nowy-oldy;

switch(map[oldx][oldy].num)

{

case 0:/*HeaderCapital*/将或帅

{

if(map[nowx][nowy].num==0&&map[nowx][nowy].Id!=NONE&&oldx==nowx)

{

/*Face to Face*/

y1=oldy;y2=nowy;

if(nowy

for(y=y1+1;y

if(count==0) return 1;

}

if(abs(nox)>1||abs(noy)>1||abs(nox)==1&&abs(noy)==1) return 0;

if(nowy>2&&nowy<7||nowx<3||nowx>5) return 0;

break;

}

case 14: case 15:/*Genaral*/车

{

if(abs(nox)!=0&&abs(noy)!=0) return 0;

if(abs(nox)>1&&noy==0)

{

x1=oldx;x2=nowx;

if(nowx

for(x=x1+1;x

}

if(nox==0&&abs(noy)>1)

{

y1=oldy;y2=nowy;

if(nowy

for(y=y1+1;y

}

break;

}

case 10: case 11:/*Horse*/马

{

if(abs(nox)==2&&abs(noy)==1||abs(nox)==1&&abs(noy)==2)

{

if(abs(nox)==1&&map[oldx][oldy+noy/2].Id!=NONE) return 0;

if(abs(nox)==2&&map[oldx+nox/2][oldy].Id!=NONE) return 0;

break;

}

else return 0;

}

case 12: case 13:/*Gun*/炮

{

if(abs(nox)>0&&abs(noy)>0) return 0;

if(abs(nox)>0&&noy==0)

{

x1=oldx;x2=nowx;

if(nowx

for(x=x1+1;x

}

else if(nox==0&&abs(noy)>0)

{

y1=oldy;y2=nowy;

if(nowy

for(y=y1+1;y

}

if(count==0&&map[nowx][nowy].Id!=NONE) return 0;

if(count==1&&map[nowx][nowy].Id==NONE) return 0;

if(count>1) return 0;

break;

}

case 3: case 4:/*Minister*/象或相

{

if(abs(nox)!=2||abs(noy)!=2) return 0;

else if(map[oldx+nox/2][oldy+noy/2].Id!=NONE) return 0;

if(nowy==0||nowy==4||nowy==5||nowy==9)

if(nowx==2||nowx==6) break;

if(nowy==2||nowy==7)

if(nowx==0||nowx==4||nowx==8 ) break;

}

case 1: case 2:/*Shi*/士或仕

{

if(abs(nox)!=1||abs(noy)!=1) return 0;

if(nowy>2&&nowy<7||nowx<3||nowx>5) return 0;

break;

}

case 5: case 6: case 7: case 8: case 9: /*Soldier*/兵或卒

{

if(abs(nox)>0&&abs(noy)>0) return 0;

if(ChessId==GREEN&&GreenChess[0].y<3||ChessId==RED&&RedChess[0].y<3)

{

if(oldy>4)

{

if(nox==0&&noy!=1) return 0;

if(abs(nox)!=1&&noy==0) return 0;

}

if(oldy<5) if(nox!=0||noy!=1) return 0;

}

if(ChessId==GREEN&&GreenChess[0].y>6||ChessId==RED&&RedChess[0].y>6)

{

if(oldy<5)

{

if(nox==0&&noy!=-1) return 0;

if(abs(nox)!=1&&noy==0) return 0;

}

if(oldy>4) if(nox!=0||noy!=-1) return 0;

}

index=map[oldx][oldy].num;

if(ChessId==GREEN)

if(GreenChess[0].y<3&&GreenChess[index].y>4||GreenChess[0].y>6&&GreenChess[index].y<5)

GreenChess[index].FixLevel=ADVANCED_SOLDIER_LEVEL;

if(ChessId==RED)

if(RedChess[0].y<3&&RedChess[index].y>4||RedChess[0].y>6&&RedChess[index].y<5)

RedChess[index].FixLevel=ADVANCED_SOLDIER_LEVEL;//兵过河后等级值加1

break;

}

}

if(ChessId==map[nowx][nowy].Id) return 2;

else return 1;

}

网上找的一个算法,大家研究下。

人机互弈又是怎样实现的呢?

[本帖最后由 lxbkey 于 2008-7-20 12:00 编辑]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值