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

正文內(nèi)容

中國(guó)象棋游戲的的設(shè)計(jì)和實(shí)現(xiàn)(文件)

 

【正文】 組裝至此,已具備了實(shí)現(xiàn)一款中國(guó)象棋對(duì)弈程序引擎部分的所有要素。就當(dāng)前局面生成某一方所有合法著法。AlphaBeta搜索之補(bǔ)充,以提高搜索效率。為某一特定局面進(jìn)行評(píng)分。這種連接方式實(shí)現(xiàn)起來(lái)非常簡(jiǎn)單。初始化的內(nèi)容包括:對(duì)引擎部分所用到的變量的初始化。因此,在這里將要完成棋盤(pán)、棋子的顯示走棋起始位置和目標(biāo)位置的提示框的顯示。因此,要想讓棋子文件的背景“隱藏”需要通過(guò)一些“與”和“異或”操作來(lái)屏蔽掉棋子的背景。在OnLButtonDown函數(shù)里處理如下兩種操作:如果用戶點(diǎn)擊鼠標(biāo)的位置落在己方的棋子上,表示用戶選中了該棋子,下一步將移動(dòng)該子進(jìn)行走棋(也可能用戶下一步將會(huì)選擇己方另外的棋子,總之這一操作會(huì)記錄下用戶所選的將要走的棋子)。如此,在OnLButtonDown函數(shù)里,實(shí)現(xiàn)了人與機(jī)器的對(duì)弈(當(dāng)然每走一步棋,也還需要繪圖函數(shù)來(lái)顯示棋盤(pán)局面的更新)。然而,在給程序加入這些功能(后面將會(huì)在講到其實(shí)現(xiàn))后,程序出現(xiàn)了異常:有時(shí)對(duì)用戶方的功能完全正確,而對(duì)電腦方的有些功能卻不起作用!是由于程序在進(jìn)行搜索時(shí)會(huì)占用大量的CPU時(shí)間,因而阻塞了位于同一線程內(nèi)的其他指令,使之無(wú)法正常工作。該函數(shù)的第一個(gè)參數(shù)AFX_THREADPROC ThinkProc指定了線程函數(shù)。 pDlgThink()。如:紅炮二平五、黑馬8進(jìn)7此類。主要討論的是如何對(duì)列表框控件(List Box)進(jìn)行操作,以顯示或刪除著法名稱。但是顯示的內(nèi)容依然是最早加進(jìn)來(lái)的項(xiàng)。 悔棋和還原悔棋和還原是棋類軟件中較為基本的功能。此后當(dāng)悔棋的時(shí)候,需要撤銷著法;還原的時(shí)候,需要執(zhí)行著法。 short nChessID。一個(gè)回合的結(jié)束意味著前一次操作沒(méi)有悔棋功能的產(chǎn)生,因此還原隊(duì)列也應(yīng)被清空。然后將其從中剔除。輪到走棋的一方,將某個(gè)棋子從一個(gè)交叉點(diǎn)走到另一個(gè)交叉點(diǎn),或者吃掉對(duì)方的棋子而占領(lǐng)其交叉點(diǎn),都算走一著。它只能在‘九宮‘之內(nèi)活動(dòng),可上可下,可左可右,每次走動(dòng)只能按豎線或橫線走動(dòng)一格。 *相(象):相(象)的主要作用是防守,保護(hù)自己的帥(將)。因此,一車可以控制十七個(gè)點(diǎn),故有’一車十子寒‘之稱。如果在要去的方向有別的棋子擋住,馬就無(wú)法走過(guò)去,俗稱’蹩馬腿‘。走法記錄界面(圖6)如下:圖6 走法記錄界面其他輔助功能界面(圖7)如下: 圖7 其他輔助功能界面“IT開(kāi)拓者3網(wǎng)絡(luò)工作室”成立于2010年,是一個(gè)專業(yè)的計(jì)算機(jī)軟件開(kāi)發(fā)團(tuán)隊(duì)。在懂的以上規(guī)則之后并可進(jìn)行游戲,執(zhí)行該軟件后,并可進(jìn)入游戲界面。 *馬:馬走動(dòng)的方法是一直一斜,即先橫著或直著走一格,然后再斜著走一個(gè)對(duì)角線,俗稱’馬走日‘。相(象)的活動(dòng)范圍限于’河界‘以內(nèi)的本方陣地,不能過(guò)河,且如果它走的’田‘字中央有一個(gè)棋子,就不能走,俗稱’塞象眼‘。 *仕(士):仕(士)是帥(將)的貼身保鏢,它也只能在九宮內(nèi)走動(dòng)。如果有一方的主帥被對(duì)方吃了,就算那一方輸。4 系統(tǒng)實(shí)現(xiàn)首先,執(zhí)行該軟件,系統(tǒng)并不需要很高的配置,內(nèi)存在512M以上就可以很流暢地執(zhí)行。然后從列表框中刪除它。在對(duì)弈過(guò)程中,每一回合都將棋局信息(這里指前面所說(shuō)的需要保存的信息)保存至走法隊(duì)列,以供悔棋所用。因此保存了全部棋子的信息。在程序中保存了如下信息:棋局表示中所定義的棋盤(pán)數(shù)組;各棋子的貼圖位置。想要從列表框中刪除項(xiàng)時(shí),可以使用(()1)。//用來(lái)獲得剛下的一步棋的走法;void CChessDlg::AddChessRecord(int nFromX,int nFromY,int nToX,int nToY,int nUserChessColor,int nSourceID) //將走法添加進(jìn)下棋記錄;然后,顯示在Listbox中。其功能就是將被移動(dòng)的棋子類型以及走法的起點(diǎn)坐標(biāo)、終點(diǎn)坐標(biāo)這些信息轉(zhuǎn)換成中國(guó)象棋所規(guī)范的著法名稱。}然后,只要將原先調(diào)搜索函數(shù)并完成走棋的代碼代之以調(diào)用AfxBeginThread來(lái)啟動(dòng)新線程即可,實(shí)現(xiàn)了程序的多線程,不能正常工作的問(wèn)題也就隨之解決了。線程函數(shù)必須被定義為全局函數(shù),其返回值類型必須是UINT,必須有一個(gè)LPVOID類型的參數(shù)。啟動(dòng)一個(gè)新的線程的方法非常簡(jiǎn)單,只需調(diào)用函數(shù)AfxBeginThread即可,函數(shù)原型:CWinThread* AfxBeginThread( AFX_THREADPROC ThinkProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL )。此外還有其它部分對(duì)程序同樣必不可少,但這些部分主要由MFC自動(dòng)生成,無(wú)需人為改動(dòng),故在此不多做介紹。在收到用戶傳達(dá)的走棋信息后,可先判斷該著法是否合法(是否符合中國(guó)象棋的游戲規(guī)則),如果合法,則執(zhí)行之。其中第二個(gè)參數(shù)CPoint point是在本程序中所要用到的,它給出了當(dāng)鼠標(biāo)左鍵被按下時(shí),鼠標(biāo)指針的位置坐標(biāo)。所以在OnPaint()函數(shù)里做的工作主要都是在貼位圖。包括對(duì)悔棋、還原隊(duì)列的清空,棋盤(pán)、棋子樣式的默認(rèn)形式,下棋模式的默認(rèn)選擇,以及著法名稱列表的初始化等。代碼主要分布于以下三大部分:一、初始化部分 BOOL CCChessUIDlg::OnInitDialog(){}OnInitDialog()負(fù)責(zé)的是對(duì)話框的初始化。同樣,程序顯示計(jì)算機(jī)走棋的起點(diǎn)坐標(biāo)和終點(diǎn)坐標(biāo)來(lái)做出回應(yīng))。對(duì)著法按其歷史得分進(jìn)行降序排序,以提高搜索效率。使用搜索求出最佳著法。包括棋盤(pán)局面和著法的表示。而且,在程序中并沒(méi)有直接地重新考慮雙方兌子之后的控制區(qū)域及機(jī)動(dòng)性變化情況(之所以說(shuō)沒(méi)有“直接地重新考慮”,是因?yàn)樗阉骼^續(xù)展開(kāi)結(jié)點(diǎn)后仍會(huì)考慮這些因素,只是目前不知這樣效果是否受影響——考察這兩種方法在效果上的差異需要一定數(shù)量的試驗(yàn)數(shù)據(jù)的支持)。多攻擊\單保護(hù)的情況,并且攻擊者最小子力小于被攻擊者子力與保護(hù)者子力之和,則攻擊方可能以一子換兩子。之后,再根據(jù)關(guān)系表來(lái)具體考察棋子的相互關(guān)系,進(jìn)行關(guān)系打分。 //存放每一位置被保護(hù)的信息BYTE m_FlexibilityPos[10][9]。 對(duì)棋子間相互關(guān)系的打分,要用到以下幾個(gè)數(shù)據(jù):int m_BaseValue[15]。如:一個(gè)馬可能在對(duì)方的炮的攻擊之下同時(shí)它又攻擊著對(duì)方的車。棋子的機(jī)動(dòng)性棋子的機(jī)動(dòng)性指棋子的靈活度(可移動(dòng)性)。所以在評(píng)估局面時(shí),首先要考慮雙方的子力總和的對(duì)比。就不同的棋類可能要考慮的因素略有差異。 局面評(píng)估前文已經(jīng)講過(guò)了棋局表示、著法生成、搜索算法(包括搜索輔助), 在象棋程序中如果說(shuō)搜索算法是心臟,那么局面評(píng)估就是大腦。在搜索的過(guò)程中,每當(dāng)發(fā)現(xiàn)一個(gè)好的走法,就給該走法累加一個(gè)增量以記錄其“歷史得分”,一個(gè)多次被搜索并認(rèn)為是好的走法的“歷史得分”就會(huì)較高。因而,要想保證AlphaBeta搜索算法的效率就需要調(diào)整樹(shù)的結(jié)構(gòu),即調(diào)整待搜索的結(jié)點(diǎn)的順序,使得“裁剪”可以盡可能早地發(fā)生。 //撤銷著法 if (val = beta) //裁剪 return beta。 //則由局面評(píng)估函數(shù)返回估值 GenerateLegalMoves()。因?yàn)槟菢拥脑?,下一步你的?duì)手就會(huì)帶給你一個(gè)分值不高于8的局面。依次查看結(jié)點(diǎn)C的各個(gè)子結(jié)點(diǎn)的分值,其第一個(gè)子結(jié)點(diǎn)返回了8……采用 “
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1