




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、/ CChessMove.h #include "CChessDef.h" / Data Define / CCHESSMOVE MoveList1280 ; / 存儲(chǔ)產(chǎn)生的著法隊(duì)列 int nMoveCount ; / 存儲(chǔ)當(dāng)前搜索深度已產(chǎn)生的著法數(shù) / Function Prototype / / 判斷ptPosition處是否有同一方的子,若有返回true,否則返回false inline bool HaveFriend( POINT ptPosition, int fSide ); / 判斷 x, y 處是否有同一方的子,若有返回true,否則返回false inl
2、ine bool HaveFriend( BYTE x, BYTE y, int fSide ); / 判斷ptPosition處是否有子,若有返回true,否則返回false inline bool HaveMan( POINT ptPosition ); / 判斷 x, y 處是否有子,若有返回true,否則返回false inline bool HaveMan( BYTE x, BYTE y ); / 檢查將帥是否碰面,若碰面返回對(duì)方王的 y 值坐標(biāo),不碰面則返回-1。 / 其中x, y分別為當(dāng)前走棋方的王所在位置坐標(biāo),fSide為當(dāng)前走棋方 int IsKingFaceToFace(
3、int x, int y, int fSide ); / 產(chǎn)生fSide方所有著法,返回產(chǎn)生的著法總數(shù)。nDepth為當(dāng)前搜索深度,用于傳給AddMoveToQueue函數(shù) int GenerateMove( int fSide, int nDepth ); / 將產(chǎn)生的著法加入著法隊(duì)列。nDepth為當(dāng)前搜索深度 inline void AddMoveToQueue( POINT ptFrom, POINT ptTo, int nDepth ); / 將產(chǎn)生的著法加入著法隊(duì)列。nDepth為當(dāng)前搜索深度 inline void AddMoveToQueue( POINT ptFrom, BY
4、TE x, BYTE y, int nDepth ); / Programmer-Defined Function / inline bool HaveFriend( POINT ptPosition, int fSide ) if( CChessBoardptPosition.xptPosition.y = 0 ) return false; else if( SideOfMan CChessBoardptPosition.xptPosition.y = fSide ) return true; else return false; inline bool HaveFriend( BYTE
5、x, BYTE y, int fSide ) if( CChessBoardxy = 0 ) return false; else if( SideOfMan CChessBoardxy = fSide ) return true; else return false; inline bool HaveMan( POINT ptPosition ) if( CChessBoardptPosition.xptPosition.y = 0 ) return false; else return true; inline bool HaveMan( BYTE x, BYTE y ) if( CChe
6、ssBoardxy = 0 ) return false; else return true; int IsKingFaceToFace( int x, int y, int fSide ) bool bMayKingFaceToFace = false; int i, j ; if( fSide = RED ) for( i = 9; i >= 7; i - ) / 檢查黑將是否在同列 if( CChessBoardxi = BLACK_K ) bMayKingFaceToFace = true; break; if( bMayKingFaceToFace = false ) retu
7、rn -1; for( j = y + 1; j <= i - 1 ; j + ) / 黑將在同列,檢查中間是否有隔擋 if( CChessBoardxj != 0 ) / 有其他子 return -1; return i; / 將帥碰面,返回黑將的 y 值坐標(biāo) else / fSide = BLACK for( i = 0; i <= 2; i + ) / 檢查紅帥是否在同列 if( CChessBoardxi = RED_K ) bMayKingFaceToFace = true; break; if( bMayKingFaceToFace = false ) return -
8、1; for( j = y - 1; j >= i + 1 ; j - ) / 紅帥在同列,檢查中間是否有隔擋 if( CChessBoardxj != 0 ) / 有其他子 return -1; return i; / 將帥碰面,返回紅帥的 y 值坐標(biāo) int GenerateMove( int fSide, int nDepth ) BYTE nCChessID ; POINT ptFrom , ptTo , ptHalf ; int i; nMoveCount = 0; int x, y; for( x = 0; x <= 8; x + ) for( y = 0; y <
9、;= 9; y + ) if( CChessBoardxy != 0 ) nCChessID = CChessBoardxy; if( SideOfMan nCChessID != fSide ) /該子顏色與所要生成著法的顏色不同 continue; ptFrom.x = x ; ptFrom.y = y ; switch( nCChessID ) /=生成紅帥的著法 case RED_K: / 將帥碰面 i = IsKingFaceToFace( ptFrom.x, ptFrom.y, fSide ); if( i != -1 ) AddMoveToQueue( ptFrom, ptFro
10、m.x, i, nDepth ); /縱向 ptTo.x = ptFrom.x ; /向前 ptTo.y = ptFrom.y + 1 ; if( ptTo.y <= 2 ) && ( ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); /向后 ptTo.y = ptFrom.y - 1 ; if( ptTo.y >= 0 ) && ( ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDep
11、th ); /橫向 ptTo.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
12、( ptTo, fSide ) ) && ( IsKingFaceToFace( ptTo.x, ptTo.y, fSide ) = -1 ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); break; /=生成黑將的著法 case BLACK_K: / 將帥碰面 i = IsKingFaceToFace( ptFrom.x, ptFrom.y, fSide ); if( i != -1 ) AddMoveToQueue( ptFrom, ptFrom.x, i, nDepth ); /縱向 ptTo.x = ptFrom.x ; /向前
13、ptTo.y = ptFrom.y - 1 ; if( ptTo.y >= 7 ) && ( ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); /向后 ptTo.y = ptFrom.y + 1 ; if( ptTo.y <= 9 ) && ( ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); /橫向 ptTo.y = ptFrom.y ; /向左 ptTo.x = ptF
14、rom.x + 1 ; if( ptTo.x <= 5 ) && ( ! HaveFriend( ptTo, fSide ) ) && ( IsKingFaceToFace( ptTo.x, ptTo.y, fSide ) = -1 ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); /向右 ptTo.x = ptFrom.x - 1 ; if( ptTo.x >= 3 ) && ( ! HaveFriend( ptTo, fSide ) ) && ( IsKingFaceToFac
15、e( ptTo.x, ptTo.y, fSide ) = -1 ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); break; /=生成紅車的著法 case RED_J: /縱向 ptTo.x = ptFrom.x ; /向前 for( ptTo.y = ptFrom.y + 1; ptTo.y <= 9; ptTo.y + ) if( HaveMan( ptTo ) ) if( ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); break; AddMoveTo
16、Queue( ptFrom, ptTo, nDepth ); /向后 for( ptTo.y = ptFrom.y - 1; ptTo.y >= 0; ptTo.y - ) if( HaveMan( ptTo ) ) if( ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); break; AddMoveToQueue( ptFrom, ptTo, nDepth ); /橫向 ptTo.y = ptFrom.y ; /向左 for( ptTo.x = ptFrom.x - 1; ptTo.x >
17、= 0; ptTo.x - ) if( HaveMan( ptTo ) ) if( ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); break; AddMoveToQueue( ptFrom, ptTo, nDepth ); /向右 for( ptTo.x = ptFrom.x + 1; ptTo.x <= 8; ptTo.x + ) if( HaveMan( ptTo ) ) if( ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, pt
18、To, nDepth ); break; AddMoveToQueue( ptFrom, ptTo, nDepth ); break; /=生成黑車的著法 case BLACK_J: /縱向 ptTo.x = ptFrom.x ; /向前 for( ptTo.y = ptFrom.y - 1; ptTo.y >= 0; ptTo.y - ) if( HaveMan( ptTo ) ) if( ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); break; AddMoveToQueue( ptFrom
19、, ptTo, nDepth ); /向后 for( ptTo.y = ptFrom.y + 1; ptTo.y <= 9; ptTo.y + ) if( HaveMan( ptTo ) ) if( ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); break; AddMoveToQueue( ptFrom, ptTo, nDepth ); /橫向 ptTo.y = ptFrom.y ; /向左 for( ptTo.x = ptFrom.x + 1; ptTo.x <= 8; ptTo.x +
20、 ) if( HaveMan( ptTo ) ) if( ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); break; AddMoveToQueue( ptFrom, ptTo, nDepth ); /向右 for( ptTo.x = ptFrom.x - 1; ptTo.x >= 0; ptTo.x - ) if( HaveMan( ptTo ) ) if( ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth );
21、 break; AddMoveToQueue( ptFrom, ptTo, nDepth ); break; /=生成紅馬的著法 case RED_M: /ptHalf用來存儲(chǔ)馬腿的位置,以判斷該位置是否有子憋馬腿 ptHalf.x = ptFrom.x ; ptHalf.y = ptFrom.y + 1 ; if( ptHalf.y <= 8 && ! HaveMan( ptHalf ) ) /11點(diǎn)方向 ptTo.x = ptFrom.x - 1 ; ptTo.y = ptFrom.y + 2 ; if( ptTo.x >= 0 && ! Hav
22、eFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); /1點(diǎn)方向 ptTo.x = ptFrom.x + 1 ; ptTo.y = ptFrom.y + 2 ; if( ptTo.x <= 8 && ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); ptHalf.x = ptFrom.x + 1 ; ptHalf.y = ptFrom.y ; if( ptHalf.x <= 7 && !
23、 HaveMan( ptHalf ) ) /2點(diǎn)方向 ptTo.x = ptFrom.x + 2 ; ptTo.y = ptFrom.y + 1 ; if( ptTo.y <= 9 && ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); /4點(diǎn)方向 ptTo.x = ptFrom.x + 2 ; ptTo.y = ptFrom.y - 1 ; if( ptTo.y >= 0 && ! HaveFriend( ptTo, fSide ) ) AddMoveToQu
24、eue( ptFrom, ptTo, nDepth ); ptHalf.x = ptFrom.x ; ptHalf.y = ptFrom.y - 1 ; if( ptHalf.y >= 1 && ! HaveMan( ptHalf ) ) /5點(diǎn)方向 ptTo.x = ptFrom.x + 1 ; ptTo.y = ptFrom.y - 2 ; if( ptTo.x <= 8 && ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); /7點(diǎn)方向 ptTo.x =
25、ptFrom.x - 1 ; ptTo.y = ptFrom.y - 2 ; if( ptTo.x >= 0 && ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); ptHalf.x = ptFrom.x - 1 ; ptHalf.y = ptFrom.y ; if( ptHalf.x >= 1 && ! HaveMan( ptHalf ) ) /8點(diǎn)方向 ptTo.x = ptFrom.x - 2 ; ptTo.y = ptFrom.y - 1 ; if( p
26、tTo.y >= 0 && ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); /10點(diǎn)方向 ptTo.x = ptFrom.x - 2 ; ptTo.y = ptFrom.y + 1 ; if( ptTo.y <= 9 && ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); break; /=生成黑馬的著法 case BLACK_M: /ptHalf用來存儲(chǔ)馬腿的位置,以判
27、斷該位置是否有子憋馬腿 ptHalf.x = ptFrom.x ; ptHalf.y = ptFrom.y + 1 ; if( ptHalf.y <= 8 && ! HaveMan( ptHalf ) ) /5點(diǎn)方向 ptTo.x = ptFrom.x - 1 ; ptTo.y = ptFrom.y + 2 ; if( ptTo.x >= 0 && ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); /7點(diǎn)方向 ptTo.x = ptFrom.x + 1 ; pt
28、To.y = ptFrom.y + 2 ; if( ptTo.x <= 8 && ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); ptHalf.x = ptFrom.x + 1 ; ptHalf.y = ptFrom.y ; if( ptHalf.x <= 7 && ! HaveMan( ptHalf ) ) /8點(diǎn)方向 ptTo.x = ptFrom.x + 2 ; ptTo.y = ptFrom.y + 1 ; if( ptTo.y <= 9 &am
29、p;& ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); /10點(diǎn)方向 ptTo.x = ptFrom.x + 2 ; ptTo.y = ptFrom.y - 1 ; if( ptTo.y >= 0 && ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); ptHalf.x = ptFrom.x ; ptHalf.y = ptFrom.y - 1 ; if( ptHalf.y >=
30、1 && ! HaveMan( ptHalf ) ) /11點(diǎn)方向 ptTo.x = ptFrom.x + 1 ; ptTo.y = ptFrom.y - 2 ; if( ptTo.x <= 8 && ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); /1點(diǎn)方向 ptTo.x = ptFrom.x - 1 ; ptTo.y = ptFrom.y - 2 ; if( ptTo.x >= 0 && ! HaveFriend( ptTo, fSide ) ) AddMoveToQueue( ptFrom, ptTo, nDepth ); ptHalf.x = ptFrom.x - 1 ; ptHalf.y = ptFrom.y ; if( ptHalf.x >= 1 &&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 風(fēng)電工程培訓(xùn)課件下載
- 腎內(nèi)科飲食護(hù)理宣教
- 愛護(hù)眼睛健康小班教育指南
- 大班學(xué)校安全教育
- 氣血淤積健康指導(dǎo)
- 2025年5山東省威海市中考招生考試數(shù)學(xué)真題試卷(真題+答案)
- 預(yù)防網(wǎng)戀主題班會(huì)課件
- 預(yù)防梅毒的課件模板
- 外科急腹癥患者術(shù)后護(hù)理
- 顧客管理課件
- 2025濟(jì)寧市泗水縣泗河街道社區(qū)工作者考試真題
- 初二化學(xué)全套試題及答案
- 融資代建合同模板5篇
- 甲方工期回復(fù)函
- 直播肖像權(quán)使用合同協(xié)議
- 2024年山東滕州市屬國(guó)有企業(yè)第三批次招聘120人筆試參考題庫(kù)附帶答案詳解
- 中科曙光2025測(cè)評(píng)
- 貨場(chǎng)租賃協(xié)議
- 兒科換錯(cuò)藥護(hù)理不良事件
- 英語(yǔ)四六級(jí)資料 全國(guó)大學(xué)英語(yǔ)四六級(jí)全部詞匯
- 創(chuàng)業(yè)支持體系提升評(píng)估與反饋機(jī)制的建立流程
評(píng)論
0/150
提交評(píng)論