分享
 
 
 

关于中国象棋中走字合法性判断的算法(有我用TC2.0写的算法)

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

对于中国象棋,每一个字都有自己的规则,正所谓无规矩不成方圆。

棋盘先设定好,a:array[1..10][1..9] of MapStruct;

是个二维数组,每个单元符全自定义的棋盘结构

不要定义一个棋字结构

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<oldy) Swap(&y1,&y2);

for(y=y1+1;y<y2;y++) if(map[nowx][y].Id!=NONE) count++;

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<oldx) Swap(&x1,&x2);

for(x=x1+1;x<x2;x++) if(map[x][nowy].Id!=NONE) return 0;

}

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

{

y1=oldy;y2=nowy;

if(nowy<oldy) Swap(&y1,&y2);

for(y=y1+1;y<y2;y++) if(map[nowx][y].Id!=NONE) return 0;

}

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<oldx) Swap(&x1,&x2);

for(x=x1+1;x<x2;x++) if(map[x][nowy].Id!=NONE) count++;

}

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

{

y1=oldy;y2=nowy;

if(nowy<oldy) Swap(&y1,&y2);

for(y=y1+1;y<y2;y++) if(map[nowx][y].Id!=NONE) count++;

}

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;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有