本文共 3012 字,大约阅读时间需要 10 分钟。
对于中国象棋,每一个字都有自己的规则,正所谓无规矩不成方圆。
棋盘先设定好,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:/*HeaderCtal*/将或帅 { if(map[nowx][nowy].num==0&&map[nowx][nowy].Id!=NONE&&oldx==nowx) { /*Face to Face*/ y1=oldy;y2=nowy; if(nowywap(&y1,&y2); 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;}来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-983493/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10748419/viewspace-983493/