版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 畢業(yè)設(shè)計(jì)說明書</b></p><p> 學(xué)生姓名學(xué) 號(hào)</p><p> 學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院</p><p> 專 業(yè)軟件工程</p><p> 題 目基于MFC的</p><p> 對(duì)戰(zhàn)象棋設(shè)計(jì)與實(shí)現(xiàn)</p><p><b
2、> 畢業(yè)論文獨(dú)創(chuàng)性聲明</b></p><p><b> 本人鄭重聲明:</b></p><p> 本論文是我個(gè)人在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。本論文除引文外所有實(shí)驗(yàn)、數(shù)據(jù)和有關(guān)材料均是真實(shí)的。盡我所知,除了文中特別加以標(biāo)注和致謝的地方外,論文中不包含其他人已經(jīng)發(fā)表或撰寫過的研究成果。其他同志對(duì)本研究所做的任何貢獻(xiàn)均已在論文中作了
3、明確的說明并表示了謝意。</p><p> 作者簽名: </p><p> 日 期: </p><p> 摘 要:中國象棋是我國歷史悠久的智力對(duì)戰(zhàn)游戲,發(fā)展至今已有數(shù)千年的歷史,是中華民族智慧的結(jié)晶。然而,傳統(tǒng)象棋存在著棋盤單一、棋子收拾繁瑣、下棋場(chǎng)地單一、無法及時(shí)找到對(duì)弈玩家?guī)状蟊锥?。隨著計(jì)算機(jī)技術(shù)的發(fā)展
4、,電子版象棋游戲的誕生,很好的解決了這些問題。</p><p> 本設(shè)計(jì)正是開發(fā)這樣一款電子象棋游戲,它采用MFC文檔視圖體系結(jié)構(gòu)和Visual C++開發(fā)工具,實(shí)現(xiàn)了具有背景棋盤和棋子種類的變換,走棋,悔棋,還原和網(wǎng)絡(luò)對(duì)弈功能。本設(shè)計(jì)還進(jìn)行了畫面閃爍消除,視覺效果更加人性化,且鼠標(biāo)操作,簡(jiǎn)單易用,無須安裝,即開即用。 </p><p> 關(guān)鍵詞:中國象棋,MFC文檔視圖,V
5、isual C++,網(wǎng)絡(luò)對(duì)弈,消除閃爍,即開即用</p><p> Abstract:Chinese Chess is our long history of intellectual battle game, the development has several thousand years of history, is the crystallization of the wisdom of the Ch
6、inese nation. However, the traditional chess there is a single board, the pieces pack cumbersome, chess venues single, not been able to find several major drawbacks of the chess players. With the development of computer
7、technology, the electronic version of the birth of a chess game, a good solution to these problems.</p><p> The design is the development of an electronic chess game, which uses MFC document view architectu
8、re and Visual C + + development tools, background board and pieces kind of transformation, playing chess, undo, restore, and network chess function. This design also flickering eliminate, visual effects, more human, mous
9、e operation, easy to use, no need to install.</p><p> Keywords:Chinese chess, MFC document view, Visual C++, network game, eliminate flicker, instant available</p><p><b> 目 錄</b>
10、</p><p><b> 1 緒論4</b></p><p> 1.1 課題背景4</p><p> 1.2 象棋簡(jiǎn)介4</p><p> 1.3 MFC及相關(guān)技術(shù)4</p><p><b> 2 概要設(shè)計(jì)4</b></p>&l
11、t;p> 2.1 設(shè)計(jì)思路分析4</p><p> 2.2 主要功能4</p><p> 2.3 軟件信息4</p><p> 2.4 流程圖4</p><p> 3 程序詳細(xì)設(shè)計(jì)說明4</p><p> 3.1 界面設(shè)計(jì)4</p><p> 3.2
12、 數(shù)據(jù)結(jié)構(gòu)4</p><p> 3.3 棋子走法4</p><p> 3.3.1 車4</p><p> 3.3.2 馬4</p><p> 3.3.3 相(象)4</p><p> 3.3.4 仕(士)4</p><p> 3.3.5 帥(將)4</
13、p><p> 3.3.6 炮(砲)4</p><p> 3.3.7 兵(卒)4</p><p><b> 3.4 功能4</b></p><p> 3.4.1 走棋4</p><p> 3.4.2 悔棋4</p><p> 3.4.3 還原4
14、</p><p> 3.4.4 認(rèn)輸4</p><p> 3.4.5 擺棋4</p><p><b> 3.5 網(wǎng)絡(luò)4</b></p><p> 3.6 關(guān)鍵技術(shù)4</p><p> 3.6.1 遮罩技術(shù)4</p><p> 3.6.2 雙緩沖
15、技術(shù)4</p><p> 4 總結(jié)和進(jìn)一步的研究工作4</p><p><b> 結(jié)束語4</b></p><p><b> 參 考 文 獻(xiàn)4</b></p><p><b> 致 謝4</b></p><p><b>
16、 1 緒論</b></p><p><b> 1.1 課題背景</b></p><p> 隨著時(shí)代的進(jìn)步,電子技術(shù)日新月異的發(fā)展,單純的戶外實(shí)體游戲已經(jīng)無法滿足人們的需求,于是電子游戲誕生了,它創(chuàng)造出的虛擬游戲環(huán)境,幫助人們擺脫實(shí)體的束縛,更增添了游戲的趣味性。計(jì)算機(jī)的發(fā)明,無疑使電子游戲又多了一個(gè)新的載體,帶動(dòng)其不斷地創(chuàng)新、發(fā)展。電腦游戲行業(yè)經(jīng)過
17、二十余年的發(fā)展,已成為與音樂、影視等并駕齊驅(qū)的全球最重要娛樂行業(yè)之一。</p><p> 時(shí)下,與角色扮演類、即時(shí)戰(zhàn)略類游戲相比,棋牌類游戲這種上手快、游戲時(shí)間短的傳統(tǒng)游戲方式,仍在廣大群眾中占有舉足輕重的地位。其中方便、快捷、操作簡(jiǎn)單的棋類游戲,更是占主要位置。</p><p> 作為中華民族悠久文化的代表之一,中國象棋不僅源遠(yuǎn)流長,而且基礎(chǔ)廣泛,作為一項(xiàng)智力運(yùn)動(dòng),中國象棋開始走向世
18、界。為了方便其更好的推廣,并且為了擺脫傳統(tǒng)棋盤、棋子、場(chǎng)地的束縛,網(wǎng)絡(luò)版象棋備受青睞,這也是本款象棋游戲開發(fā)的意義所在。相信未來幾年,象棋這一中國國粹在各個(gè)領(lǐng)域?qū)⒌靡酝茝V,產(chǎn)生巨大影響。 </p><p><b> 1.2 象棋簡(jiǎn)介</b></p><p> 中國象棋歷史悠久。《楚辭 ? 招魂》中有“蓖蔽象棋,有六簿些;分曹并進(jìn),遒相迫些;成梟而牟,呼五白些。”
19、。《說苑》載:雍門子周以琴見 孟嘗 君,說:“足下千乘之君也, …… 燕則斗象棋而舞鄭女?!庇纱丝梢?,遠(yuǎn)在戰(zhàn)國時(shí)代,象棋已在貴族階層中流行開來了。</p><p> 象棋屬于二人對(duì)抗性游戲的一種,暗棋閣也是其中一種傳統(tǒng)玩法,由于用具簡(jiǎn)單,趣味性強(qiáng),成為流行極為廣泛的棋藝活動(dòng)。象棋是我國正式開展的78個(gè)體育運(yùn)動(dòng)項(xiàng)目之一,為促進(jìn)該項(xiàng)目在世界范圍內(nèi)的普及和推廣,已將“中國象棋”項(xiàng)目名稱更改為“象棋”。此外,高材質(zhì)的象
20、棋也具有收藏價(jià)值,如:高檔木材、玉石等為材料的象棋。更有文人墨客為象棋譜寫了詩篇,使象棋更具有一種文化色彩。</p><p> 1.2.1 象棋棋盤</p><p> 棋子活動(dòng)的場(chǎng)所,叫作“棋盤”。在長方形的平面上,共有九條平行的豎線和十條平行的橫線,共有九十個(gè)交叉點(diǎn)。</p><p> 棋盤兩端的中間,也就是第四條到第六條豎線之間的正方形部位,有斜交叉線“
21、米”字方格的地方,叫作“九宮”,象征著中軍帳,是將和帥的駐扎地。 </p><p> 整個(gè)棋盤以“楚河●漢界”分為相等的兩部分。為了比賽記錄和學(xué)習(xí)棋譜的統(tǒng)一,現(xiàn)在規(guī)則規(guī)定:從右至左的九條豎線,用中文數(shù)字一至九來表示紅方,用阿拉伯?dāng)?shù)字1至9來表示黑方。己方的棋子始終使用己方的線路編號(hào),無論棋子是否“過河”。 </p><p> 1.2.2 象棋棋子</p><p&
22、gt; 象棋是一種雙方對(duì)弈的競(jìng)技項(xiàng)目。棋子共有紅黑16個(gè),共32個(gè)棋子。</p><p> 棋子種類說明如下表1-1:</p><p><b> 表1-1 棋子種類</b></p><p> 將與帥;士與仕;象與相;卒與兵的功能實(shí)際上完全相同,僅是為了區(qū)分黑紅雙方。</p><p> 帥(將)是棋中的首腦,也是
23、戰(zhàn)術(shù)核心。它只能在本方九宮之內(nèi)活動(dòng),可上下左右沿著橫線或者豎線移動(dòng)一格。帥與將不能在同一直線上直接對(duì)面,否則走方判負(fù)。這個(gè)也就是判定函數(shù)ShuaiCanTo()實(shí)現(xiàn)的功能的依據(jù)。 </p><p> 仕(士)是將(帥)的貼身保鏢,主要任務(wù)是防守,它也只能在九宮內(nèi)走動(dòng),且只能斜走,不先后左右移動(dòng)。</p><p> 相(象)的主要作用也是防守,保護(hù)自己的帥(將)。它的走法是每次沿對(duì)角線走
24、兩格,俗稱“象飛田”。相(象)的活動(dòng)范圍限于河界以內(nèi)的本方陣地,不能過河,實(shí)際是7個(gè)特殊棋位,且若它走的田字中央有一個(gè)棋子,不管是對(duì)方還是本方棋子,都不能走,俗稱“塞象眼”。 </p><p> 車在象棋中威力最猛,只要起始位置和目的位置中間沒有其他棋子,它就可以到達(dá)它橫豎線所在的任何地方。俗稱“一車十子寒”。 </p><p> 炮不吃子時(shí),移動(dòng)走法與車完全一樣。但當(dāng)吃子時(shí),它和目標(biāo)
25、棋子中間必須有一個(gè)且僅此一個(gè)棋子(無論己方或?qū)Ψ狡遄樱E谑窍笃謇锩嫖ㄒ灰粋€(gè)可以越子的棋種,威力也很大。 </p><p> 馬是先直后斜,即先直著走一格,然后再斜著走一個(gè)對(duì)角線,俗稱“馬走日”。馬一個(gè)可到周圍八個(gè)點(diǎn),故有“八面威風(fēng)”之說。但如果在要去的方向的第一步有別的棋子擋住,馬就無法走過去,俗稱“蹩馬腿”和“塞象眼”類似。 </p><p> 兵(卒)不能后退且只能一步一步走,未
26、過河前,只能向前。過河以后,允許左右移動(dòng)。雖過河后只能一步一步走,但兵(卒)的威力也大大增強(qiáng),故有“過河的卒子頂半個(gè)車”之說。 </p><p> 1.2.3 術(shù)語[8]</p><p> (1) “馬走日字,象飛田.車走直路,炮翻山.士走斜路護(hù)將邊.小卒子一去不回還. 車走直路馬踏斜,相飛田子炮打隔,卒子過河了不得。”</p><p> ?。?)“馬后炮”:
27、泛指炮在馬后,以馬限制對(duì)方將帥的退路,兼以炮向?qū)Ψ浇袑ⅰ?</p><p> ?。?)“天地炮”:一炮從中路牽制對(duì)方中士中象,另一炮從底線牽制對(duì)方底士底象。 </p><p> ?。?)“鐵門栓”:以炮鎮(zhèn)中路限制對(duì)方士象的活動(dòng),兼以車或兵(卒)守著對(duì)方的將(帥)門。 </p><p> ?。?)“夾車炮”:車炮或車雙炮前后互相配合的一種戰(zhàn)術(shù)。 </p>
28、<p> (6)“炮碾丹沙”:車炮在底線成將, 從而殺去障礙 (主要是士象)成殺勢(shì)。 </p><p> (7)“車炮抽殺”:泛指炮在車后時(shí),一面跳炮吃子,一面露車叫將,令對(duì)方顧此失彼的一種戰(zhàn)術(shù)。 </p><p> ?。?)“海底撈月”:車炮或車兵在對(duì)方底線逼使對(duì)方將帥離開中路的一種戰(zhàn)術(shù)。 </p><p> ?。?)“兩頭蛇”:把三路兵和七路兵挺
29、起的陣式。 </p><p> 1.3 MFC及相關(guān)技術(shù)</p><p> MFC:微軟基礎(chǔ)類(Microsoft Foundation Classes),C++是一種應(yīng)用程序框架,隨微軟Visual C++開發(fā)工具一起發(fā)布。該類庫提供一組通用的可重用的類庫供開發(fā)人員使用,大部分類均從CObject 直接或間接派生,只有少部分類例外。</p><p> MF
30、C應(yīng)用程序的總體結(jié)構(gòu)通常由開發(fā)人員從MFC類派生的幾個(gè)類和一個(gè)CWinApp類對(duì)象(應(yīng)用程序?qū)ο螅┙M成。MFC 提供了MFC AppWizard 自動(dòng)生成框架。</p><p> Windows 應(yīng)用程序中,MFC 的主包含文件為"Afxwin.h"。</p><p> 此外MFC的部分類為MFC/ATL 通用,可以在Win32 應(yīng)用程序中單獨(dú)包含并使用這些類。&l
31、t;/p><p> 1.3.1 單文檔程序</p><p> 1.應(yīng)用類及全局對(duì)象(CChess_mApp)</p><p> 應(yīng)用類封裝了Windows應(yīng)用的初始化,運(yùn)行以及終止的全過程。對(duì)于每一個(gè)基于框架的應(yīng)用,它必須有一個(gè)且只能有一個(gè)派生于CWinApp的類對(duì)象。這個(gè)對(duì)象是全局對(duì)象,因此它在創(chuàng)建任何窗口前首先被構(gòu)造。類CWinApp提供了幾個(gè)關(guān)鍵的可重載的
32、虛成員函數(shù),他們是InitInstance,Run,ExitInstance以及OnIdle等。而且,在程序中可以隨時(shí)調(diào)用全局函數(shù)AfxGetApp,以便獲得CWinApp類對(duì)象的指針。</p><p> 2.文檔類(CChess_mDoc)</p><p> 文檔類實(shí)際上是一種數(shù)據(jù)結(jié)構(gòu),該類實(shí)現(xiàn)了對(duì)這種結(jié)構(gòu)的封裝以利于管理,通常,它不但包含應(yīng)用中所需的數(shù)據(jù),而且也包含了處理這些數(shù)據(jù)的
33、方法,另外,文檔類還可以為應(yīng)用提供與其存儲(chǔ)的數(shù)據(jù)相關(guān)的服務(wù)。</p><p> 3.視圖類(CChess_mView)</p><p> 該類占有框架窗口的客戶區(qū),主要負(fù)責(zé)顯示文檔數(shù)據(jù),也為文檔對(duì)象和用戶之間提供了用以交互的可視接口,另外,也完成了與文檔打印相關(guān)的操作,通常,一般的繪制操作都是在該類中完成,因此有時(shí)也稱視圖類窗口為“繪制窗口”。</p><p>
34、 4.框架類(CMainFrame)</p><p> 框架類表示應(yīng)用程序的主框架窗口,其主要作用是響應(yīng)標(biāo)準(zhǔn)的窗口消息,不過,它通常先將消息按照一定的次序傳遞給視圖類以及文檔類等其他命令處理類,另外,它還為視圖類提供可視化的邊框,同時(shí)也包括標(biāo)題欄,一些標(biāo)準(zhǔn)的窗口組件等。</p><p> 5.“關(guān)于”對(duì)話框類(CAboutDlg)</p><p> 該類封裝
35、了用于顯示軟件版本,版權(quán)等相關(guān)信息的“關(guān)于”對(duì)話框,通常不需要對(duì)它進(jìn)行任何的編程。而只需要使用對(duì)話框資源編輯器對(duì)對(duì)話框模板進(jìn)行簡(jiǎn)單的編輯即可。</p><p> 1.3.2 GDI繪圖</p><p> GDI是Graphics Device Interface的縮寫,含義是圖形設(shè)備接口,它的主要任務(wù)是負(fù)責(zé)系統(tǒng)與繪圖程序之間的信息交換,處理所有Windows程序的圖形輸出。</
36、p><p> 在Windows操作系統(tǒng)下,絕大多數(shù)具備圖形的的應(yīng)用程序都離不開GDI,他們利用GDI所提供的眾多函數(shù)可以方便地在屏幕,打印機(jī)及其他輸出設(shè)備上輸出圖形、文本等。GDI的出現(xiàn)時(shí)程序員無需關(guān)心硬件設(shè)備及設(shè)備驅(qū)動(dòng),就可以將應(yīng)用程序的輸出轉(zhuǎn)化為硬件設(shè)備上的輸出。這實(shí)現(xiàn)了程序開發(fā)者與硬件設(shè)備的隔離,大大方便了開發(fā)工作。</p><p> 想要在屏幕或者其他輸出設(shè)備上輸出圖形或者文字,就
37、必須先獲得一個(gè)稱為設(shè)備描述表(DC:Device Context)的對(duì)象的句柄,以它為參考,調(diào)用各種GDI函數(shù)來實(shí)現(xiàn)各種文字或圖形的輸出。</p><p> 設(shè)備描述表是GDI內(nèi)部保存數(shù)據(jù)的一種數(shù)據(jù)結(jié)構(gòu),此結(jié)構(gòu)中的屬性內(nèi)容與特定的輸出設(shè)備(顯示器、打印機(jī)等)相關(guān),屬性定義了GDI函數(shù)的工作細(xì)節(jié)。屬性包括文字的顏色及x坐標(biāo)和y坐標(biāo)映射到窗體顯示區(qū)域的方式等。</p><p> 一旦獲得設(shè)
38、備描述表的句柄,系統(tǒng)就是使用默認(rèn)的屬性值填充設(shè)備描述表結(jié)構(gòu)。</p><p> 如果有必要,可以使用一些GDI函數(shù)獲得和改變?cè)O(shè)備描述表中的屬性值。</p><p> 繪圖結(jié)束后必須釋放設(shè)備描述表句柄。</p><p> GDI函數(shù)大致可分類為:</p><p> 設(shè)備上下文函數(shù)(如GetDC、CreateDC、DeleteDC)、 畫
39、線函數(shù)(如LineTo、Polyline、Arc)、填充畫圖函數(shù)(如Ellipse、FillRect、Pie)、畫圖屬性函數(shù)(如SetBkColor、SetBkMode、SetTextColor)、文本、字體函數(shù)(如TextOut、GetFontData)、位圖函數(shù)(如SetPixel、BitBlt、StretchBlt)、坐標(biāo)函數(shù)(如DPtoLP、LPtoDP、ScreenToClient、ClientToScreen)、映射函數(shù)(如
40、SetMapMode、SetWindowExtEx、SetViewportExtEx)、元文件函數(shù)(如PlayMetaFile、SetWinMetaFileBits)、區(qū)域函數(shù)(如FillRgn、FrameRgn、InvertRgn)、路徑函數(shù)(如BeginPath、EndPath、StrokeAndFillPath)、裁剪函數(shù)(如SelectClipRgn、SelectClipPath)等。</p><p>
41、 1.3.3 消息機(jī)制</p><p> MFC傳輸?shù)南⒂腥N類型:命令消息,控件通知和窗口消息。</p><p> 命令消息一般與用戶請(qǐng)求有關(guān),當(dāng)用戶單擊一個(gè)菜單項(xiàng)時(shí),命令消息產(chǎn)生,并發(fā)送給能處理這個(gè)消息的類對(duì)象(如編輯文本等)。</p><p> 控件消息在某些重要事件發(fā)送時(shí),由控件窗口發(fā)送給父窗體處理,如打開一個(gè)對(duì)話框。</p><
42、;p> 窗口消息(Window Message)一般與窗口的內(nèi)部運(yùn)作有關(guān),如創(chuàng)建窗口消息W M PA I N T和繪制窗口W M C R E AT E等。通常,消息是從系統(tǒng)發(fā)送到窗口,或從窗口發(fā)送到窗口。每個(gè)窗口使用窗口進(jìn)程來處理發(fā)送給它的消息。系統(tǒng)或應(yīng)用程序有兩種傳輸消息的方法:發(fā)送消息或寄送消息。</p><p> 鼠標(biāo)和鍵盤消息一般是寄送消息,而所有其他消息通常都是發(fā)送消息。發(fā)送消息時(shí),直接調(diào)用窗
43、口的窗口進(jìn)程,通信是即時(shí)的,直到窗口進(jìn)程為調(diào)用函數(shù)返回一個(gè)結(jié)果時(shí),應(yīng)用程序才能繼續(xù)。寄送消息時(shí),把消息發(fā)送到擁有那個(gè)窗口的應(yīng)用程序的消息隊(duì)列中。當(dāng)應(yīng)用程序空閑時(shí),它會(huì)搜索消息隊(duì)列,并處理優(yōu)先級(jí)較高的消息,然后從隊(duì)列中刪除它,并把處理結(jié)果發(fā)送給既定窗口。所以通信可能延遲。在消息隊(duì)列中,寄送的消息接受特殊的鼠標(biāo)和鍵盤處理。通常,應(yīng)該盡量發(fā)送一個(gè)消息,除非想把動(dòng)作延遲到所有鼠標(biāo)和鍵盤消息被處理之后。</p><p>&
44、lt;b> 2 概要設(shè)計(jì)</b></p><p> 2.1 設(shè)計(jì)思路分析</p><p> 本程序采用MVC模式,將棋子信息與顯示分離,統(tǒng)一由control控制。棋盤用9*10的數(shù)組map存儲(chǔ)(0~13表示各個(gè)棋子,14表為空),存儲(chǔ)用于判斷當(dāng)前位置為何棋子或者空。32個(gè)棋子由一個(gè)統(tǒng)一的棋子型CChess數(shù)組存儲(chǔ),統(tǒng)一管理顯示。每個(gè)棋子包含了自身的type,na
45、me,及其在棋盤中的位置x,y。</p><p> 棋子走法是利用鼠標(biāo)的消息處理函數(shù),獲得棋子種類,當(dāng)前坐標(biāo)和下一步坐標(biāo),共五個(gè)信息,再利用規(guī)定的CanGoTo()函數(shù)判斷能否到達(dá)。若能到達(dá),則把當(dāng)前棋子的坐標(biāo)改為下一步坐標(biāo),并把棋盤中當(dāng)前位置的map改為空,即表示無棋子。如果下一步坐標(biāo)的位置上有棋子,則將該棋子的type改為15,這樣繪圖時(shí)就不會(huì)顯示該棋子的位圖。</p><p>
46、因?yàn)槠遄游粓D周圍有白色邊框,通過“遮罩技術(shù)”可以消除邊框,實(shí)現(xiàn)棋子透明覆在棋盤上,更具美感。</p><p> 利用“內(nèi)存DC雙緩沖技術(shù)”消除閃爍,將棋盤和棋子信息一次性顯示,并實(shí)現(xiàn)棋子黏在鼠標(biāo)上,動(dòng)態(tài)移動(dòng)。</p><p> 網(wǎng)絡(luò)部分,繼承MFC中的CAsyncSocket和CSocket進(jìn)行開發(fā)。Socket編程分為兩種:面向連接協(xié)議網(wǎng)絡(luò)通信編程和面向無連接的網(wǎng)絡(luò)通信編程。本設(shè)計(jì)采
47、用連接協(xié)議的Socket編程模型,保證網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)及時(shí)、正確的到達(dá)。</p><p><b> 2.2 主要功能</b></p><p> 通過計(jì)算機(jī)的鼠標(biāo)鍵盤操作操作界面,必須按照象棋的規(guī)則進(jìn)行對(duì)弈,如果在對(duì)弈過程中,一方出招錯(cuò)誤,電腦會(huì)予以簡(jiǎn)單提示,并無視錯(cuò)誤操作。對(duì)弈過程中只能按照電腦預(yù)訂順序,即紅先黑后的順序依次出招,指導(dǎo)一方勝出,電腦顯示哪方勝出為
48、止。 </p><p> 可以采用鼠標(biāo)操作進(jìn)行對(duì)弈;</p><p> 可以實(shí)現(xiàn)走棋、悔棋、還原、認(rèn)輸功能;</p><p> 可以滿足兩人局域網(wǎng)內(nèi)對(duì)弈;</p><p> 可以在任意時(shí)間重新開始游戲;</p><p> 可以進(jìn)行簡(jiǎn)單錯(cuò)誤判斷,并直接返回到前一步棋子狀態(tài);</p><p
49、> 可以進(jìn)行背景棋盤和棋子種類的變換;</p><p> 可以實(shí)現(xiàn)自由設(shè)置棋譜(怪棋);</p><p> 可以實(shí)現(xiàn)棋子黏在鼠標(biāo)上移動(dòng),增加美感</p><p><b> 2.3 軟件信息</b></p><p> 軟件名稱:基于MFC的局域網(wǎng)內(nèi)對(duì)戰(zhàn)象棋設(shè)計(jì)與實(shí)現(xiàn)</p><p>
50、; 開發(fā)平臺(tái):Microsoft Visual C++ 6.0</p><p><b> 用戶:象棋愛好者</b></p><p> 本設(shè)計(jì)在各個(gè)方面均具有可行性,方便易用,無需安裝即可使用</p><p><b> 2.4 流程圖</b></p><p> ?。?)游戲交互圖,如圖2-1
51、所示</p><p> 圖2-1 游戲交互圖</p><p><b> (2)程序流程圖</b></p><p> 首先,選擇是否建立主機(jī),否則為客戶機(jī)。若建立主機(jī),則建立一個(gè)端口,用于和客戶機(jī)的交互連接,然后等待知道有客戶機(jī)連上??蛻魴C(jī)建立,則選擇主機(jī)的ip地址和端口。游戲雙方先后點(diǎn)擊開始,開始游戲。紅方、黑方在到自己狀態(tài)時(shí),可以移動(dòng)自
52、己的棋子,悔棋,還原,認(rèn)輸?shù)鹊?。走棋,點(diǎn)擊鼠標(biāo)左鍵選中棋子,移動(dòng),放到想到達(dá)的地方,系統(tǒng)調(diào)用CanGoTo函數(shù),判斷是否可到,若可到,則棋子放到目的地,否則返回棋子原來的地方能夠。走棋成功后,發(fā)送消息給對(duì)方,對(duì)方接收消息后,進(jìn)行相應(yīng)的操作。進(jìn)行若干步之后,若帥或者將被吃掉,則判定勝負(fù)。</p><p> 具體流程,見圖2-2程序流程圖。</p><p><b> 圖2-2程序
53、流程圖</b></p><p> 3 程序詳細(xì)設(shè)計(jì)說明</p><p><b> 3.1 界面設(shè)計(jì)</b></p><p> 本程序界面簡(jiǎn)單明了,包括棋盤顯示,listbox,開始、悔棋、還原、認(rèn)輸四個(gè)按鈕,還有用于聊天的edit和發(fā)送按鈕。菜單欄包括文件,控制,背景,幫助。</p><p> 其
54、中l(wèi)istbox 是記錄每步棋子走棋的信息和聊天信息,也是實(shí)現(xiàn)悔棋功能的一個(gè)重要存儲(chǔ)器。它是一個(gè)棧,可以記錄,刪除,提取每步棋子的信息。悔棋操作可以從中得到相應(yīng)的數(shù)據(jù)來實(shí)現(xiàn)悔棋功能。文件內(nèi)有新游戲、擺棋操作,控制內(nèi)有悔棋、還原、認(rèn)輸操作,背景內(nèi)有棋盤和棋子的切換操作。</p><p> 主界面,如圖3-1所示</p><p><b> 圖3-1 主界面</b>&l
55、t;/p><p> 3.1.1 棋盤、棋子的位圖載入與切換</p><p> ?。?)棋盤、棋子的位圖載入</p><p> 本設(shè)計(jì)實(shí)現(xiàn)了棋盤和棋子的自由無限制轉(zhuǎn)換,采用了外部圖片載入的方式,加載的位圖,棋盤棋子一起加載,沒有自己繁瑣的自繪棋盤棋子過程。</p><p> 本設(shè)計(jì)有6種棋盤,3種棋子可以搭配。若程序在開始時(shí)就全部加載,會(huì)浪
56、費(fèi)大量?jī)?nèi)存,因?yàn)橛螒蜻^程中只需要一副棋盤棋子,且不利于更多棋盤和棋子種類的更新,也不利于后期維護(hù)。故本程序采用外部圖片載入的方式,載入棋盤棋子,每次切換調(diào)用SetBoardandPiece(CString strBoard , CString strPiece)重新對(duì)棋盤棋子的位圖進(jìn)行賦值。</p><p> strBoard,strPiece代表棋盤,棋子的存放文件夾相對(duì)物理地址。</p>&l
57、t;p> HBITMAP CChess_mView::LoadFileBmp(CString filePath)</p><p><b> {</b></p><p> Return(HBITMAP)LoadImage(AfxGetInstanceHandle(),filePath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);<
58、;/p><p><b> }</b></p><p> void CChess_mView::SetBoardandPiece(CString strBoard, CString strPiece )</p><p><b> {</b></p><p> //0紅兵 1紅袍 2紅車 3紅馬 4
59、紅相 5紅士 6紅帥 7黑兵8 黑袍 9黑車10黑馬11黑象12黑士13黑將 大于13不是棋子</p><p> ChessList[13] = LoadFileBmp(strPiece + "BK.BMP");</p><p> ChessList[12] = LoadFileBmp(strPiece + "BA.BMP");</p>
60、;<p> ChessList[11] = LoadFileBmp(strPiece + "BB.BMP");</p><p> ChessList[10] = LoadFileBmp(strPiece + "BN.BMP");</p><p> ChessList[9] = LoadFileBmp(strPiece + &quo
61、t;BR.BMP");</p><p> ChessList[8] = LoadFileBmp(strPiece + "BC.BMP");</p><p> ChessList[7] = LoadFileBmp(strPiece + "BP.BMP");</p><p> ChessList[6] = Load
62、FileBmp(strPiece + "RK.BMP");</p><p> ChessList[5] = LoadFileBmp(strPiece + "RA.BMP");</p><p> ChessList[4] = LoadFileBmp(strPiece + "RB.BMP");</p><p&g
63、t; ChessList[3] = LoadFileBmp(strPiece + "RN.BMP");</p><p> ChessList[2] = LoadFileBmp(strPiece + "RR.BMP");</p><p> ChessList[1] = LoadFileBmp(strPiece + "RC.BMP&quo
64、t;);</p><p> ChessList[0] = LoadFileBmp(strPiece + "RP.BMP");</p><p> ChessList[14] = LoadFileBmp(strPiece + "SEL.BMP");//光標(biāo)位圖</p><p> ChessList[15] = LoadFil
65、eBmp(strBoard); </p><p> ChessList[16] = LoadFileBmp(strPiece + "mask.bmp"); //用于遮罩技術(shù)(見關(guān)鍵技術(shù))</p><p><b> }</b></p><p> ?。?)棋盤、棋子的切換</p><p
66、> 當(dāng)點(diǎn)擊菜單欄背景的棋盤或者棋子,可以選擇不同的棋盤和棋子。減少玩家的視覺審美疲勞。每按一個(gè)按鈕,其實(shí)是改變了存放棋盤或棋子的函數(shù)SetBoardandPiece(CString strBoard , CString strPiece)中的strBoard 或strPiece,即棋譜棋子的存放文件夾相對(duì)物理地址,完成了棋盤棋子的種類切換,并用Invalidate(FALSE)及時(shí)更新顯示。</p><p&g
67、t; 例如點(diǎn)擊棋盤的水滴棋盤</p><p> void CChess_mView::OnDrop() </p><p><b> {</b></p><p> m_strBoard = "res\\images\\drops.bmp";</p><p> SetBoardandPiece(
68、"res\\images\\drops.bmp",m_strPiece);</p><p> Invalidate(FALSE);</p><p><b> }</b></p><p> 運(yùn)行圖,如圖3-1所示:</p><p> 圖3-2 棋盤、棋子的切換</p><p&
69、gt; 3.1.2 光標(biāo)生成</p><p> 雙方局域網(wǎng)內(nèi)對(duì)戰(zhàn),消息傳遞過來,執(zhí)行操作了,但是我不能馬上知道對(duì)方動(dòng)了哪個(gè)棋子;可能已經(jīng)動(dòng)了,但是我不知道,浪費(fèi)時(shí)間。</p><p> 光標(biāo)的生成,可以起到提醒對(duì)方我已經(jīng)走過棋了,也利于在我方還沒有出招之前始終知道對(duì)方的上一步是怎么走的,只有在我方出招之后對(duì)方的操作痕跡才可能被銷毀,這樣的設(shè)計(jì)增強(qiáng)了棋譜的可讀性,也減輕了玩家的記憶負(fù)
70、擔(dān)。</p><p> 光標(biāo)在棋盤載入的時(shí)候就一起載入了ChessList[14] = LoadFileBmp(strPiece + "SEL.BMP");</p><p> 在選中棋子時(shí),即鼠標(biāo)左鍵按下后,鼠標(biāo)move的時(shí)候就把光標(biāo)位圖貼到選中子的周圍,鼠標(biāo)up再把位圖貼到up的位置上。</p><p> 具體代碼見鼠標(biāo)的消息處理函數(shù),O
71、nLButtonDown(),OnMouseMove(),OnLButtonUp()</p><p> 運(yùn)行結(jié)果,如圖3-2所示:</p><p><b> 圖3-3 光標(biāo)生成</b></p><p><b> 3.2 數(shù)據(jù)結(jié)構(gòu)</b></p><p> 本設(shè)計(jì)主要包含CChess,CCh
72、ess_mView,Cmanager,CNet,CNetControl四個(gè)類。</p><p> CNet,CNetControl兩個(gè)類用于網(wǎng)絡(luò)部分,后面網(wǎng)絡(luò)功能部分再詳解。</p><p> (1)CChess類是棋子類,存儲(chǔ)了棋子的相關(guān)屬性信息。</p><p> class CChess </p><p><b>
73、{</b></p><p><b> public:</b></p><p> int type;//0紅兵 1紅袍 2紅車 3紅馬 4紅相 5紅士 6紅帥 7黑兵8 黑袍 9黑車10黑馬11黑象12黑士13黑將 大于13不是棋子</p><p> CString name;</p><p><b
74、> int x;</b></p><p><b> int y;</b></p><p><b> };</b></p><p> Type即棋子的類別用于判定屬于哪種棋子。name棋子的名字,例如“炮”。x,y是棋子在邏輯坐標(biāo)軸上的坐標(biāo)。</p><p> (2)Cma
75、nager類是棋子控制類,是游戲內(nèi)核。</p><p> class CManager </p><p><b> {</b></p><p><b> public:</b></p><p> CChess nChessinfo[32];//記錄32個(gè)棋子的信息</p>&
76、lt;p> int map[9][10];//記錄棋盤上的信息</p><p> int PlayerAc;//用來判斷是哪個(gè)棋手</p><p> void InitData();//數(shù)據(jù)初始化</p><p> int m_State;// 游戲狀態(tài) -1、游戲等待中,等待開始 0、游戲中 紅方走棋 1、游戲中 黑方走棋</p>
77、<p> int top; //記錄游戲步數(shù)</p><p> int Marry[500][8]; //記錄 前一個(gè)的標(biāo)號(hào),type,x,y 后一個(gè)的標(biāo)號(hào),type,x,y 共八個(gè)信息</p><p> int MarryTop; //記錄游戲步數(shù),為了還原時(shí)能夠判斷</p><p> int count;//記錄listb
78、ox的步數(shù) 包括游戲步奏和聊天記錄</p><p><b> public:</b></p><p> int Search(int x,int y);//找是第幾顆棋子 共32顆(0~31),若不存在棋子,返回32</p><p> bool CanGoTo(int Old_Point_x,int Old_Point_y,int Now
79、_Point_x,int Now_Point_y,int chesstype);//判斷棋子能否到達(dá),是每個(gè)棋子的走法判斷</p><p> bool ShuaiCanGoTo(int Old_Point_x,int Old_Point_y,int Now_Point_x,int Now_Point_y,int chesstype); //是關(guān)于將帥問題的能否到達(dá)判斷,將帥不共線 </p><
80、;p><b> };</b></p><p> ?。?)CChess_mView 類是程序的顯示類,也包含少部分的棋子控制操作功能和很多消息響應(yīng)函數(shù),由于篇幅問題沒有全部顯示。</p><p> class CChess_mView : public CView</p><p><b> {</b></p
81、><p> protected:CChess_mView();</p><p> DECLARE_DYNCREATE(CChess_mView)</p><p> // Attributes</p><p><b> public:</b></p><p> CChess_mDoc* Ge
82、tDocument();</p><p> CNetControl *m_pControl; //網(wǎng)絡(luò)控制顯示</p><p> int choosed;//記錄前一個(gè)棋子是第幾個(gè)棋子</p><p> int OldType;//記錄前一個(gè)棋子的類型</p><p> int OldX;//記錄前一個(gè)棋子的橫坐標(biāo)</p
83、><p> int OldY;//記錄前一個(gè)棋子的縱坐標(biāo)</p><p><b> ///用于右鍵功能</b></p><p> int Rchoosed;//記錄當(dāng)前一個(gè)棋子是第幾個(gè)棋子 </p><p> int ROldX;//記錄前一個(gè)棋子的橫坐標(biāo)</p><p> int
84、 ROldY;//記錄前一個(gè)棋子的縱坐標(biāo)</p><p><b> //變量定義</b></p><p> HBITMAP ChessList[17];//位圖數(shù)組</p><p> CString m_strPiece;//棋子根目錄</p><p> CString m_strBoard;//棋盤根目錄
85、</p><p> int m_nBoardIndex,m_nPieceIndex; //背景設(shè)置選擇</p><p> //定義畫圖用CDC</p><p> CDC Background;//背景句柄</p><p> CDC ChessAll; //最終刷新句柄</p><p> CDC Buffe
86、r;//緩沖句柄 用于雙緩沖</p><p> CListBox m_listbox; //用于記錄每步棋子走棋的信息和聊天信息</p><p> CButton m_ok; //開始按鈕</p><p> CButton m_goback; //悔棋按鈕</p><p> CButton m_huanyuan; //還原按鈕<
87、/p><p> CButton m_renshu; //認(rèn)輸按鈕</p><p> CButton m_send;//聊天發(fā)送按鈕</p><p> CEdit m_edit;//用于聊天的edit</p><p> int down_move;//用于鼠標(biāo)按下時(shí)的控制</p><p> int move_up;
88、 //用于鼠標(biāo)彈上時(shí)的控制</p><p> int goback_huanyuan; //用于只有在有悔棋額情況下才能還原的控制</p><p> // Operations</p><p><b> public:</b></p><p> void OnOk();//開始</p><p&
89、gt; void OnGoBack();//悔棋</p><p> void OnHuanYuan();//還原</p><p> void OnRenShu();//認(rèn)輸</p><p> void OnSend();//發(fā)送聊天信息</p><p><b> //函數(shù)定義</b></p>&l
90、t;p> void InitData();//初始化</p><p> void NewGame();//新游戲</p><p> void TextOutTop();//提示現(xiàn)在出牌</p><p> void PrintAll(); //把界面存儲(chǔ)于buffer中</p><p> void P
91、rintAllMsg(); //用于網(wǎng)絡(luò)刷新和整體刷新</p><p> void PrintAllDMsg();//用于網(wǎng)絡(luò)動(dòng)棋子的時(shí)候整體刷新</p><p> HBITMAP LoadFileBmp(CString filePath); //載入位圖</p><p> void SetBoardandPiece(CString strBoard,CStr
92、ing strPiece);//給棋盤棋子賦值</p><p> // Overrides</p><p> // ClassWizard generated virtual function overrides</p><p> //{{AFX_VIRTUAL(CChess_mView)</p><p><b> publ
93、ic:</b></p><p> virtual void OnDraw(CDC* pDC); // overridden to draw this view</p><p> virtual BOOL PreCreateWindow(CREATESTRUCT& cs);</p><p> protected:</p>&l
94、t;p> virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);</p><p> virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);</p><p> virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);&
95、lt;/p><p> //}}AFX_VIRTUAL</p><p> // Implementation</p><p><b> public:</b></p><p> virtual ~CChess_mView();</p><p> #ifdef _DEBUG</p>
96、<p> virtual void AssertValid() const;</p><p> virtual void Dump(CDumpContext& dc) const;</p><p><b> #endif</b></p><p> protected:</p><p> //
97、{{AFX_MSG(CChess_mView)</p><p> …………….(省略)</p><p> //}}AFX_MSG</p><p> DECLARE_MESSAGE_MAP()</p><p><b> };</b></p><p><b> 3.3 棋子走法&
98、lt;/b></p><p> 棋子走棋規(guī)則在“1.2.2 象棋棋子”已有介紹,這里不再累述。</p><p> 這里主要介紹各個(gè)棋子的程序具體實(shí)現(xiàn)。具體見CanGoTo(int Old_Point_x,int Old_Point_y,int Now_Point_x,int Now_Point_y,int chesstype)和ShuaiCanGoTo(int Old_Poin
99、t_x,int Old_Point_y,int Now_Point_x,int Now_Point_y,int chesstype)函數(shù)。</p><p> 首先,不管是什么棋子,都不能吃自己一方的棋子。</p><p> if (map[Old_Point_x][Old_Point_y]/7==map[Now_Point_x][Now_Point_y]/7)</p>&
100、lt;p> return false;</p><p><b> 3.3.1 車</b></p><p> 車只要中間沒有棋子阻礙,可以到達(dá)它橫豎線所在的任何地方。所以只需判斷始末位置為端點(diǎn)的線段上的棋子個(gè)數(shù),即判斷map[][]不為空的個(gè)數(shù)。若只有一個(gè),則表示目標(biāo)位置沒有棋子,可以直達(dá)。若有兩個(gè),且目標(biāo)位置不為空,則表示吃子,可達(dá)。</p>
101、<p><b> //車</b></p><p> if (9==chesstype||2==chesstype)</p><p><b> {</b></p><p><b> //同一行</b></p><p> if (Old_Point_y==N
102、ow_Point_y)</p><p><b> {</b></p><p> int maxcol=(Old_Point_x>Now_Point_x)?Old_Point_x:Now_Point_x;</p><p> int mincol=(Old_Point_x>Now_Point_x)?Now_Point_x:Old_
103、Point_x;</p><p><b> int n=0;</b></p><p> //判斷移動(dòng)前后位置之間有無其他子</p><p> for (int i=mincol;i<=maxcol;i++)</p><p><b> {</b></p><p>
104、 if(14!=map[i][Old_Point_y])</p><p><b> n++;</b></p><p><b> }</b></p><p><b> if(1==n)</b></p><p> return true;</p><p
105、> else if((2==n)&&(14!=map[Now_Point_x][Old_Point_y]))</p><p> return true;</p><p> else return false;</p><p><b> }</b></p><p><b> //同
106、一列</b></p><p><b> else</b></p><p> if (Old_Point_x==Now_Point_x)</p><p><b> {</b></p><p> int maxrow=(Old_Point_y>Now_Point_y)?Old_
107、Point_y:Now_Point_y;</p><p> int minrow=(Old_Point_y>Now_Point_y)?Now_Point_y:Old_Point_y;</p><p><b> int n=0;</b></p><p> for(int i=minrow;i<=maxrow;i++)</p
108、><p><b> {</b></p><p> if(14!=map[Old_Point_x][i])</p><p><b> n++;</b></p><p><b> }</b></p><p><b> if(1==n)<
109、/b></p><p> return true;</p><p> else if((2==n)&&(14!=map[Now_Point_x][Now_Point_y]))</p><p> return true;</p><p> else return false;</p><p>
110、;<b> }</b></p><p><b> }</b></p><p><b> 3.3.2 馬</b></p><p> 馬走日,所以要判斷始末位置的X和Y的差值的乘積是不是2或者-2。若是,則判斷有沒有蹩馬腿,即同側(cè)的第一個(gè)位置map[][]必須為空。 </p>&l
111、t;p><b> //馬</b></p><p> if (3==chesstype||10==chesstype)</p><p><b> {</b></p><p> int row=Now_Point_x-Old_Point_x;</p><p> int col=Now_P
112、oint_y-Old_Point_y;</p><p><b> //日字的范圍</b></p><p> if((2!=row*col)&&(-2!=row*col))</p><p> return false;</p><p> //是否有同側(cè)的子堵塞</p><p>
113、; if (-2==row)</p><p><b> {</b></p><p> if (14==map[Old_Point_x-1][Old_Point_y])</p><p> return true;</p><p><b> else </b></p><p
114、> return false;</p><p><b> }</b></p><p><b> else</b></p><p> if (2==row)</p><p><b> {</b></p><p> if(14==map[O
115、ld_Point_x+1][Old_Point_y])</p><p> return true;</p><p><b> else</b></p><p> return false;</p><p><b> }</b></p><p><b> e
116、lse</b></p><p> if (-2==col)</p><p><b> {</b></p><p> if(14==map[Old_Point_x][Old_Point_y-1])</p><p> return true;</p><p><b>
117、else</b></p><p> return false;</p><p><b> }</b></p><p><b> else</b></p><p> if (2==col)</p><p><b> {</b><
118、/p><p> if(14==map[Old_Point_x][Old_Point_y+1])</p><p> return true;</p><p><b> else</b></p><p> return false;</p><p><b> }</b>&l
119、t;/p><p> else return false;</p><p><b> } </b></p><p> 3.3.3 相(象)</p><p> 相和象活動(dòng)范圍不同,所以要分開判斷。但相(象)的走法判斷和馬類似,都是先判斷差值,來確定田字范圍,再判斷有沒有塞象眼,即田字中間有沒有棋子。</p&g
120、t;<p><b> //黑象</b></p><p> if (11==chesstype)</p><p><b> {</b></p><p> if((Now_Point_y>=0)&&(Now_Point_y<=4))</p><p>&l
121、t;b> {</b></p><p> int row=Now_Point_x-Old_Point_x;</p><p> int col=Now_Point_y-Old_Point_y;</p><p><b> //田字范圍</b></p><p> if ((-2==row)&&
122、amp;(-2==col)&&(14==map[Old_Point_x-1][Old_Point_y-1]))</p><p><b> {</b></p><p> return true;</p><p><b> }</b></p><p><b> else
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文--mfc圖像變換系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)論文-- 基于java的手機(jī)游戲《中國象棋》的設(shè)計(jì)與實(shí)現(xiàn)
- 軟件工程畢業(yè)論文-網(wǎng)絡(luò)對(duì)戰(zhàn)游戲平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于mfc的小球進(jìn)帳篷游戲設(shè)計(jì)——畢業(yè)論文
- 基于mfc的小球進(jìn)帳篷游戲設(shè)計(jì)——畢業(yè)論文
- 畢業(yè)論文---基于java的中國象棋游戲設(shè)計(jì)
- 基于qt的中國象棋-畢業(yè)論文
- 中國象棋游戲博弈算法的研究與實(shí)現(xiàn)-畢業(yè)論文
- 五子棋手機(jī)網(wǎng)絡(luò)對(duì)戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)——畢業(yè)論文
- 跨平臺(tái)網(wǎng)絡(luò)對(duì)戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)-電子信息工程畢業(yè)論文
- 中國象棋對(duì)戰(zhàn)平臺(tái)博弈系統(tǒng)畢業(yè)設(shè)計(jì)
- 畢業(yè)論文---五子棋手機(jī)網(wǎng)絡(luò)對(duì)戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)
- 軟件工程畢業(yè)論文-網(wǎng)絡(luò)對(duì)戰(zhàn)五子棋平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
- 軟件工程畢業(yè)論文-五子棋對(duì)戰(zhàn)游戲平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
- mfc小型局域網(wǎng)聊天室的實(shí)現(xiàn)畢業(yè)論文
- 基于flash的網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 畢業(yè)論文---基于mfc的圖像邊緣檢測(cè)提取算法仿真
- 基于flash的網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)[畢業(yè)論文]
- 基于cms的網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 畢業(yè)論文---基于fpga的ddc的設(shè)計(jì)與實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論