freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

中國象棋游戲設(shè)計(jì)及實(shí)現(xiàn)-閱讀頁

2025-07-14 18:45本頁面
  

【正文】 配置來說這點(diǎn)開銷基本上不會(huì)對(duì)程序的效率產(chǎn)生什么影響。根據(jù)所要保存的數(shù)據(jù)定義了如下基本結(jié)構(gòu)類型:typedef struct{ CHESSMOVE cmChessMove。//被吃掉的棋子}UNDOMOVE。還原功能是與悔棋功能相對(duì)應(yīng)的,只有當(dāng)產(chǎn)生了悔棋功能之后,還原功能才會(huì)被激活。 在悔棋中主要完成了以下任務(wù):下棋回合數(shù)減一;將當(dāng)前局面信息保存至走法隊(duì)列,以供還原所用;從走法隊(duì)列中取出上一回合的棋局信息,恢復(fù)到當(dāng)前局面,然后將其從隊(duì)列中剔除掉;將顯示著法名稱的列表框中的本回合的著法名稱保存到一個(gè)著法名稱隊(duì)列,以供還原所用。而在還原中所做的剛好和悔棋相反:下棋回合數(shù)加一;將當(dāng)前局面信息保存至隊(duì)列,以供悔棋所用;從隊(duì)列中取出最近一次悔棋前的棋局信息,恢復(fù)到當(dāng)前局面,然后將其從隊(duì)列中剔除;從走法隊(duì)列中取出最近一次存入的著法名稱(兩項(xiàng),因?yàn)槊炕睾蠒?huì)產(chǎn)生兩步著法) ,將其重新顯示到列表框中。以上便是悔棋和還原功能所完成的具體操作,其代碼分別寫入悔棋和還原按鈕(Button)的事件處理函數(shù)中。如:炮八進(jìn)四、馬二進(jìn)三此類。實(shí)現(xiàn)此功能代碼如下: void CGradientProgressCtrl::OnPaint() { CPaintDC dc(this)。 GetClientRect(rect)。 (::GetSysColor(COLOR_3DFACE))。rect,amp。 VERIFY(())。 } CRect rectClient。 float maxWidth((float)m_nCurrentPosition/(float)m_nUpper*(float))。dc,rectClient,(int)maxWidth)。 (%d%%,(int)(100*(float)m_nCurrentPosition/m_nUpper))。 (TRANSPARENT)。rectClient,DT_VCENTER|DT_CENTER|DT_SINGLELINE)。 (TRANSPARENT)。rectClient,DT_VCENTER|DT_CENTER|DT_SINGLELINE)。 return (CProgressCtrl::SetPos(nPos))。 return CProgressCtrl::StepIt()。首先,在 ChessDlg 下定義以下函數(shù): thisGetMoveStr(nFromX,nFromY,nToX,nToY,nSourceID)。當(dāng)列表框中的項(xiàng)的數(shù)目超過列表框的顯示范圍時(shí),列表框會(huì)自動(dòng)添加垂直滾動(dòng)條(前提是其 VerticalScrollbar 屬性要為 True——該屬性默認(rèn)即為 True) 。在控件屬性里選擇 Vertical Scroll,使得列表框可垂直滾動(dòng)以顯示最新的著法名稱。減一之后正好是最后一項(xiàng)的行號(hào)。主要代碼如下:int CSearchEngine::IsGameOver(BYTE position[][9], int nDepth){ int i,j。 //檢查紅方九宮是否有帥 for(i=7。i++) for(j=3。j++) { if(position[i][j]==B_KING)BlackLive=TRUE。 } //檢查黑方九宮是否有將 for(i=0。i++) for(j=3。j++) { if(position[i][j]==B_KING)BlackLive=TRUE。 }i=(m_nMaxDepthnDepth+1)%2。//紅方不在if(!RedLive)if(i)return 19990+nDepth。//偶數(shù)層返回極小值//黑方不在if(!BlackLive)if(i)return 19990nDepth。 //偶數(shù)層返回極大值return 0。主要工作都在對(duì)話框類的兩個(gè)文件 和 下展開??梢园延嘘P(guān)中國象棋的棋局初始化情況也放在了這里面。包括對(duì)棋盤上的棋子位置進(jìn)行初始化(棋盤數(shù)組的初始化) ,對(duì)搜索深度、當(dāng)前走棋方標(biāo)志、棋局是否結(jié)束標(biāo)志等的初始化;對(duì)棋盤、棋子的貼圖位置(即棋盤、棋子在程序中實(shí)際顯示位置)的初始化;對(duì)程序輔助部分所用到的一些變量的初始化。繪圖部分void CCChessUIDlg::OnPaint() {……}OnPaint()函數(shù)負(fù)責(zé)的是程序界面的繪圖。由于棋盤、棋子等都是以位圖的形式給出的。需要注意的是由于位圖文件不能像 GIF 文件那樣有透明的背景并且棋子是圓形的而位圖文件只能是矩形的,所以如果直接貼圖的話會(huì)在棋盤上留下一塊白色的邊框——棋子的背景。走棋部分(用戶動(dòng)作響應(yīng)部分)為 WM_LBUTTONDOWN 消息添加消息響應(yīng)事件,可得到如下函數(shù): void CCChessUIDlg::OnLButtonDown(UINT nFlags, CPoint point){……}當(dāng)用戶在窗口客戶區(qū)按下鼠標(biāo)左鍵時(shí),程序就會(huì)調(diào)用 OnLButtonDown(UINT nFlags, CPoint point)函數(shù)來進(jìn)行響應(yīng)??梢酝ㄟ^這一信息來得知用戶的走法。如果之前用戶已經(jīng)選過了棋子,那么這一次的點(diǎn)擊(如果不是另選本方的其它棋子的話)表達(dá)了用戶的一次走棋過程。緊接著調(diào)用引擎的搜索函數(shù)計(jì)算出計(jì)算機(jī)對(duì)用戶著法的應(yīng)著,然后執(zhí)行該應(yīng)著。以上三部分并非界面程序的全部,而僅僅是與程序密切相關(guān)的部分。 系統(tǒng)實(shí)現(xiàn)現(xiàn)在已具備了實(shí)現(xiàn)一款中國象棋對(duì)弈程序引擎部分的所有要素,將上述模塊分別寫 頭文件。包括棋盤局面和著法的表示。就當(dāng)前局面生成某一方所有合法著法。使用搜索求出最佳著法。AlphaBeta 搜索之補(bǔ)充,以提高搜索效率。對(duì)著法按其歷史得分進(jìn)行降序排序,以提高搜索效率。為某一特定局面進(jìn)行評(píng)分。同樣,程序顯示計(jì)算機(jī)走棋的起點(diǎn)坐標(biāo)和終點(diǎn)坐標(biāo)來做出回應(yīng)) 。這種連接方式實(shí)現(xiàn)起來非常簡(jiǎn)單。下面簡(jiǎn)單介紹一下象棋相關(guān)規(guī)則:對(duì)局時(shí),由執(zhí)紅棋的一方先走,雙方輪流各走一著,直至分出勝、負(fù)、和,對(duì)局即終了。雙方各走一著,稱為一個(gè)回合。各種棋子的走法:帥(將):帥和將是棋中的首腦,是雙方竭力爭(zhēng)奪的目標(biāo)。帥與將不能在同一直線上直接對(duì)面,否則走方判負(fù)。它的行棋路徑只能是九宮內(nèi)的斜線。它的走法是每次循對(duì)角線走兩格,俗稱“象走田” 。 車:車在象棋中威力最大,無論橫線、豎線均可行走,只要無子阻攔,步數(shù)不受限制。炮:炮在不吃子的時(shí)候,走動(dòng)與車完全相同。馬一次可走的選擇點(diǎn)可以達(dá)到四周的八個(gè)點(diǎn),故有“八面威風(fēng)”之說。兵(卒):兵(卒)在未過河前,只能向前一步步走,過河以后,除不能后退外,允許左右移動(dòng),但也只能一次一步。棋盤界面(圖 3)所示:圖 3 棋盤界面從界面上方的菜單欄中可以進(jìn)行相關(guān)設(shè)置參數(shù)設(shè)置界面(圖 4)如下: 圖 4 參數(shù)設(shè)置界面等你將參數(shù)設(shè)置完畢之后,既可進(jìn)入游戲。例如,您是紅方,第一步走的是兵七進(jìn)一或兵三進(jìn)一,電腦則會(huì)炮 2 進(jìn) 4 或炮 8 進(jìn)4(圖 7): 圖 7 程序運(yùn)行界面以上是系統(tǒng)實(shí)現(xiàn)的所有界面及功能測(cè)試。從最初的茫然,到慢慢的進(jìn)入狀態(tài),再到對(duì)思路逐漸的清晰,整個(gè)寫作過程難以用語言來表達(dá)?;叵脒@段日子的經(jīng)歷和感受,我感慨萬千,在這次畢業(yè)設(shè)計(jì)的過程中,我擁有了無數(shù)難忘的回憶和收獲。我想這是一次意志的磨練,是對(duì)我實(shí)際能力的一次提升,也會(huì)對(duì)我未來的學(xué)習(xí)和工作有很大的幫助。在此更要感謝我的導(dǎo)師和專業(yè)老師,是你們的細(xì)心指導(dǎo)和關(guān)懷,使我能夠順利的完成畢業(yè)論文。老 師的嚴(yán)謹(jǐn)治學(xué)態(tài)度、淵博的知識(shí)、無私的奉獻(xiàn)精神使我深受啟迪。在此我要向我的導(dǎo)師致以最衷心的感謝和深深的敬意。然而,由于時(shí)間關(guān)系,程序也存在著幾點(diǎn)不足:第一:沒對(duì)計(jì)算機(jī)下棋引擎部分作更深一步的挖掘和研究。這在一定程度上影響了程序中下棋引擎的工作效率。盡管,這些問題最終都得以解決,但卻影響了程序開發(fā)的進(jìn)程。 參 考 文 獻(xiàn)[1] 游戲編程(人機(jī)博弈)[M]. 重慶:重慶大學(xué)出版社,2022.[2] C++.NET 小游戲開發(fā)時(shí)尚編程百例[M] .西安:機(jī)械工業(yè)出版社,2022.[3] C++ 高級(jí)編程技術(shù)——開發(fā)實(shí)例剖析[M].西安:電子工業(yè)出版社,1999.[4] C++.NET 基礎(chǔ)教程與上機(jī)指導(dǎo)[M].北京:清華大學(xué)出版社,2022.[5] C++ 編程深入引導(dǎo) [M].長(zhǎng)春:中國水利水電出版社,2022.[6] Frederic [EB/OL].~auntyellow/puter/,202237。ois Dominic (一):引言[EB/OL].~auntyellow/puter/,202235。ois Dominic (三/OL):著法的產(chǎn)生[EB].~auntyellow/puter/,202235。ois Dominic (四/OL):基本搜索方法[EB].~auntyellow/puter/,202235。ois Dominic (六/OL):局面評(píng)估函數(shù)[EB].~auntyellow/puter/,202235。artificial intelligence。AlphaBeta search
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1