關於中國象棋中走字合法性判斷的演算法(有我用TC2.0寫的演算法) (轉)
對於中國象棋,每一個字都有自己的規則,正所謂無規矩不成方圓。
棋盤先設定好,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(nowy
}
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
if(nox==0&&abs(noy)>1)
{
y1=oldy;y2=nowy;
if(nowy
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
else if(nox==0&&abs(noy)>0)
{
y1=oldy;y2=nowy;
if(nowy
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/10752043/viewspace-987830/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python_pygame_alpha-beta剪枝演算法_玩中國象棋PythonGAM演算法
- Python中判斷字母大小寫常用的方法!Python
- LeetCode 1812[判斷國際象棋棋盤中一個格子的顏色]LeetCode
- js函式中的if判斷和a==b判斷JS函式
- 我所知道的JavaScript中判斷資料型別JavaScript資料型別
- C語言判斷素數,判斷質素演算法C語言演算法
- js中的型別判斷JS型別
- L2-012 關於堆的判斷
- 判斷欄位中是否有漢字
- 演算法之複雜度判斷演算法複雜度
- mybatis中 if 標籤 test 等於判斷MyBatis
- 演算法題:反轉一個單連結串列&判斷連結串列是否有環演算法
- 牛客網高頻演算法題系列-BM6-判斷連結串列中是否有環演算法
- 【每日一題】1812. 判斷國際象棋棋盤中一個格子的顏色每日一題
- 【SHELL】Shell中的條件判斷
- 關於Web開發中的“程式=資料結構+演算法”Web資料結構演算法
- (轉)git中關於fetch的使用Git
- JavaScript 判斷物件中是否有某屬性JavaScript物件
- 演算法問題——判斷陣列中是否含有某一字串演算法陣列字串
- 判斷兩字串的字符集是否相同《演算法很美》字串演算法
- Python中判斷字典的值常用的方法!Python
- 關於Web開發中“程式=資料結構+演算法”的思考Web資料結構演算法
- js判斷json中資料的真假JSON
- jQuery中判斷input的disabled屬性jQuery
- 如何判斷sql中的索引是否生效SQL索引
- 如何判斷股票有沒有主力?主力的判斷方法
- 我用演算法學golang(刪除有序陣列中的重複項 )演算法Golang陣列
- appium 自動化中關於斷言問題,有沒有更好的斷言方法,求大神賜教!APP
- xm外匯中如何判斷回撥趨勢的方法有哪些?
- 演算法題:判斷括號字串是否有效演算法字串
- 關於谷歌中國的最新宣告(這個必須轉載)谷歌
- 【LeetCode回溯演算法#06】復原IP地址詳解(練習如何處理邊界條件,判斷IP合法性)LeetCode演算法
- POJ1860 Currency Exchange【Bellman_ford演算法:判斷是否有正環】演算法
- 數學期望在演算法中的應用演算法
- python中字串格式判斷Python字串
- Python中None如何判斷PythonNone
- javascript中如何判斷變數的型別?JavaScript變數型別
- JS中判斷null、undefined與NaN的方法JSNullUndefinedNaN
- 3. Python中的分支判斷、迴圈Python