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

正文內(nèi)容

我國(guó)象棋游戲的設(shè)計(jì)c-資料下載頁(yè)

2025-06-30 00:25本頁(yè)面
  

【正文】 可少,但這些部分主要由 MFC 自動(dòng)生成,無(wú)需人為改動(dòng),故在此不多做介紹。. . . .學(xué)習(xí)參考 多線程如采用單線程方式,按照如下順序編寫代碼:用戶走棋 —〉計(jì)算機(jī)思考并走棋按這種方式編寫的程序似乎毫無(wú)問(wèn)題,程序運(yùn)行一切正常。然而,在給程序加入這些功能(后面將會(huì)在講到其實(shí)現(xiàn))后,程序出現(xiàn)了異常:有時(shí)對(duì)用戶方的功能完全正確,而對(duì)電腦方的有些功能卻不起作用!是由于程序在進(jìn)行搜索時(shí)會(huì)占用大量的 CPU 時(shí)間,因而阻塞了位于同一線程內(nèi)的其他指令,使之無(wú)法正常工作。解決方案就是另外開(kāi)一個(gè)線程,讓各程序分開(kāi)于多個(gè)線程。啟動(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 )。該函數(shù)啟動(dòng)一個(gè)新的線程并返回一個(gè)指向該新線程對(duì)象的指針,然后新的線程與啟動(dòng)該新線程的線程同時(shí)運(yùn)行。該函數(shù)的第一個(gè)參數(shù) AFX_THREADPROC ThinkProc 指定了線程函數(shù)。線程函數(shù)的內(nèi)容即為新線程所要執(zhí)行的內(nèi)容,線程函數(shù)執(zhí)行完畢,新線程結(jié)束(自動(dòng)銷毀) 。線程函數(shù)必須被定義為全局函數(shù),其返回值類型必須是 UINT,必須有一個(gè)LPVOID 類型的參數(shù)。可以把調(diào)用引擎部分的搜索函數(shù)的代碼以及完成走棋動(dòng)作的代碼放入所定義的思考線程內(nèi),如下:DWORD WINAPI ThinkProc(LPVOID pParam){CChessDlg* pDlg=(CChessDlg*)pParam。 pDlgThink()。 //計(jì)算機(jī)思考并走棋return 0。}然后,只要將原先調(diào)搜索函數(shù)并完成走棋的代碼代之以調(diào)用. . . .學(xué)習(xí)參考AfxBeginThread 來(lái)啟動(dòng)新線程即可,實(shí)現(xiàn)了程序的多線程,不能正常工作的問(wèn)題也就隨之解決了。 著法名稱顯示每當(dāng)下棋方(用戶或是計(jì)算機(jī))走一步棋,在棋盤旁邊的一個(gè)列表框控件(List Box)中按照中國(guó)象棋關(guān)于著法描述的規(guī)范要求顯示出該著法的名稱。如:紅炮二平五、黑馬 8 進(jìn) 7 此類。為了獲得該著法名稱,寫了一個(gè)六百余行的函數(shù)。其功能就是將被移動(dòng)的棋子類型以及走法的起點(diǎn)坐標(biāo)、終點(diǎn)坐標(biāo)這些信息轉(zhuǎn)換成中國(guó)象棋所規(guī)范的著法名稱。由于該函數(shù)主要涉及的是中國(guó)象棋關(guān)于著法表示的規(guī)范要求,故在此不對(duì)其具體實(shí)現(xiàn)做額外的解釋。主要討論的是如何對(duì)列表框控件(List Box)進(jìn)行操作,以顯示或刪除著法名稱。首先,在 ChessDlg 下定義以下函數(shù):thisGetMoveStr(nFromX,nFromY,nToX,nToY,nSourceID)。//用來(lái)獲得剛下的一步棋的走法;void CChessDlg::AddChessRecord(int nFromX,int nFromY,int nToX,int nToY,int nUserChessColor,int nSourceID) //將走法添加進(jìn)下棋記錄;然后,顯示在 Listbox 中。當(dāng)列表框中的項(xiàng)的數(shù)目超過(guò)列表框的顯示范圍時(shí),列表框會(huì)自動(dòng)添加垂直滾動(dòng)條(前提是其 VerticalScrollbar 屬性要為 True——該屬性默認(rèn)即為True) 。但是顯示的內(nèi)容依然是最早加進(jìn)來(lái)的項(xiàng)。在控件屬性里選擇 Vertical Scroll,使得列表框可垂直滾動(dòng)以顯示最新的著法名稱。想要從列表框中刪除項(xiàng)時(shí),可以使用(()1)。減一之后正好是最后一項(xiàng)的行號(hào)。 悔棋和還原悔棋和還原是棋類軟件中較為基本的功能。要實(shí)現(xiàn)悔棋和還原功能,首先要明確哪些信息應(yīng)當(dāng)被保存以供悔棋和還原所使用。在程序中保存了如下信息:棋局表示中所定義的棋盤數(shù)組;各棋子的貼圖位置。這里需要特別說(shuō)明的是通常象棋程序處于程序效率的考慮并不保存所有棋子的信息,而只是保存之前一步的走棋信息。此后當(dāng)悔棋的時(shí)候,需要撤銷著法;還原的時(shí)候,需要執(zhí)行著法。然而,在編寫自己的程序時(shí)一來(lái)考慮到程序的可讀性和不易出錯(cuò)性,二來(lái)考慮到對(duì)當(dāng)今的計(jì)算機(jī)的配置來(lái)說(shuō)這點(diǎn)開(kāi)銷基本. . . .學(xué)習(xí)參考上不會(huì)對(duì)程序的效率產(chǎn)生什么影響。因此保存了全部棋子的信息。根據(jù)所要保存的數(shù)據(jù)定義了如下基本結(jié)構(gòu)類型:typedef struct{CHESSMOVE cmChessMove。short nChessID。//被吃掉的棋子}UNDOMOVE。在對(duì)弈過(guò)程中,每一回合都將棋局信息(這里指前面所說(shuō)的需要保存的信息)保存至走法隊(duì)列,以供悔棋所用。還原功能是與悔棋功能相對(duì)應(yīng)的,只有當(dāng)產(chǎn)生了悔棋功能之后,還原功能才會(huì)被激活。一個(gè)回合的結(jié)束意味著前一次操作沒(méi)有悔棋功能的產(chǎn)生,因此還原隊(duì)列也應(yīng)被清空。在悔棋中主要完成了以下任務(wù):;,以供還原所用;,恢復(fù)到當(dāng)前局面,然后將其從隊(duì)列中剔除掉;列,以供還原所用。然后從列表框中刪除它。而在還原中所做的剛好和悔棋相反:;,以供悔棋所用;,恢復(fù)到當(dāng)前局面,然后將其從隊(duì)列中剔除;(兩項(xiàng),因?yàn)槊炕睾蠒?huì)產(chǎn)生兩步著法) ,將其重新顯示到列表框中。然后將其從中剔除。以上便是悔棋和還原功能所完成的具體操作,其代碼分別寫入悔棋和還原按鈕(Button)的事件處理函數(shù)中。4 系統(tǒng)實(shí)現(xiàn)首先,執(zhí)行該軟件,系統(tǒng)并不需要很高的配置,CPU 在 以上,內(nèi)存在512M 以上就可以很流暢地執(zhí)行。下面簡(jiǎn)單介紹一下象棋相關(guān)規(guī)則:對(duì)局時(shí),由執(zhí)紅棋的一方先走,雙方輪流各走一著,直至分出勝、負(fù)、和,對(duì)局即終了。輪到走棋的一方,將某個(gè)棋子從一個(gè)交叉點(diǎn)走到另一個(gè)交叉點(diǎn),或者吃掉對(duì)方的棋子而占領(lǐng)其交叉點(diǎn),都算走一著。雙方各走一著,稱為一個(gè). . . .學(xué)習(xí)參考回合。如果有一方的主帥被對(duì)方吃了,就算那一方輸。各種棋子的走法:*帥(將):帥和將是棋中的首腦,是雙方竭力爭(zhēng)奪的目標(biāo)。它只能在‘九宮‘之內(nèi)活動(dòng),可上可下,可左可右,每次走動(dòng)只能按豎線或橫線走動(dòng)一格。帥與將不能在同一直線上直接對(duì)面,否則走方判負(fù)。 *仕(士):仕(士)是帥(將)的貼身保鏢,它也只能在九宮內(nèi)走動(dòng)。它的行棋路徑只能是九宮內(nèi)的斜線。 *相(象):相(象)的主要作用是防守,保護(hù)自己的帥(將) 。它的走法是每次循對(duì)角線走兩格,俗稱’象走田‘。相(象)的活動(dòng)范圍限于’河界‘以內(nèi)的本方陣地,不能過(guò)河,且如果它走的’田‘字中央有一個(gè)棋子,就不能走,俗稱’塞象眼‘。 *車:車在象棋中威力最大,無(wú)論橫線、豎線均可行走,只要無(wú)子阻攔,步數(shù)不受限制。因此,一車可以控制十七個(gè)點(diǎn),故有’一車十子寒‘之稱。 *炮:炮在不吃子的時(shí)候,走動(dòng)與車完全相同。 *馬:馬走動(dòng)的方法是一直一斜,即先橫著或直著走一格,然后再斜著走一個(gè)對(duì)角線,俗稱’馬走日‘。馬一次可走的選擇點(diǎn)可以達(dá)到四周的八個(gè)點(diǎn),故有’八面威風(fēng)‘之說(shuō)。如果在要去的方向有別的棋子擋住,馬就無(wú)法走過(guò)去,俗稱’蹩馬腿‘。 *兵(卒):兵(卒)在未過(guò)河前,只能向前一步步走,過(guò)河以后,除不能后退外,允許左右移動(dòng),但也只能一次一步。在懂的以上規(guī)則之后并可進(jìn)行游戲,執(zhí)行該軟件后,并可進(jìn)入游戲界面。棋盤界面(圖 4)所示:圖 4 棋盤界面. . . .學(xué)習(xí)參考從界面上方的菜單欄中可以進(jìn)行相關(guān)設(shè)置參數(shù)設(shè)置界面(圖 5)如下: 圖 5 參數(shù)設(shè)置界面等你將參數(shù)設(shè)置完畢之后,既可進(jìn)入游戲。走法記錄界面(圖 6)如下:圖 6 走法記錄界面其他輔助功能界面(圖 7)如下: 圖 7 其他輔助功能界面歡迎您的光臨,Word !希望您提出您寶貴的意見(jiàn),你的意見(jiàn)是我進(jìn)步的動(dòng)力。贈(zèng)語(yǔ); 如果我們做與不做都會(huì)有人笑,如果做不好與做得好還會(huì)有人笑,那么我們索性就做得更好,來(lái)給人笑吧! 現(xiàn)在你不玩命的學(xué),以后命玩你。我不知道年少輕狂,我只知道勝者為王。不要做金錢、權(quán)利的奴隸;應(yīng)學(xué)會(huì)做“金錢、權(quán)利”的主人。什么時(shí)候離光明最近?那就是你覺(jué)得黑暗太黑的時(shí)候。最值得欣賞的風(fēng)景,是自己奮斗的足跡。 壓力不是有人比你努力,而是那些比你牛幾倍的人依然比你努力
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1