c++課程設(shè)計五子棋游戲_第1頁
c++課程設(shè)計五子棋游戲_第2頁
c++課程設(shè)計五子棋游戲_第3頁
c++課程設(shè)計五子棋游戲_第4頁
c++課程設(shè)計五子棋游戲_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、江西理工大學(xué)應(yīng)用科學(xué)學(xué)院Visual C+課程設(shè)計論文題 目:_ 五子棋游戲設(shè)計 _系 別:_ 經(jīng)濟管理系_班 級:_信管091班_小組成員: 陳亮(09)_ 彭巍(19) 楊海軍(14)_ 翁勇勇(05) 目 錄 摘 要 .31 緒論 31.1 課題背景 31.2 課程設(shè)計目的. 42 設(shè)計方案簡述 .42.1 可行性分析.42.2 需求分析.43 詳細(xì)設(shè)計.53.1窗體設(shè)計.53.2游戲項目開發(fā).63.2.1棋盤設(shè)置.63.2.2放置棋子功能的開發(fā).73.3.3游戲獲勝決斷的開發(fā).133.2.4游戲的調(diào)試與運行.214 設(shè)計結(jié)果及分析.234.1 程序的結(jié)果.23 4.2結(jié)果分析.245總

2、 結(jié) .24 摘 要網(wǎng)絡(luò)游戲的出現(xiàn)代表了一種全新娛樂方式的誕生。目前網(wǎng)絡(luò)游戲正以其獨特的魅力吸引著眾多的玩家。隨著游戲產(chǎn)業(yè)的蓬勃發(fā)展,將需要越來越多的人加入到游戲開發(fā)中來。本畢業(yè)設(shè)計所完成的五子棋游戲(網(wǎng)絡(luò)版)是在Windows XP下使用Microsoft Visual C+6.0開發(fā)的C/S系統(tǒng),可以實現(xiàn)網(wǎng)絡(luò)間的雙人對戰(zhàn),并且可以提供多媒體播放功能。系統(tǒng)的多媒體播放功能可以播放MP3、WMA等主流格式的音樂。本論文從基本網(wǎng)絡(luò)套節(jié)字開始入手,介紹了一些本系統(tǒng)相關(guān)的理論知識,隨后詳細(xì)介紹了五子棋游戲(網(wǎng)絡(luò)版)的開發(fā)過程。包括服務(wù)器端、客戶端的socket編程,五子棋服務(wù)器和客戶端通信的實現(xiàn),五

3、子棋判斷算法的實現(xiàn),主界面視圖,多媒體播放以及定時器等附加功能的實現(xiàn)。最后對系統(tǒng)進(jìn)行測試并對所做工作進(jìn)行總結(jié)。關(guān)鍵詞 程序設(shè)計;Fivechess;MFC;1緒論 娛樂是人類不可或缺的生活內(nèi)容,目前市場上的游戲種類繁多讀者將所學(xué)的語言應(yīng)用到實際,用學(xué)習(xí)的c+語言編程開發(fā)一個簡易的計算機單機游戲,即五子棋游戲。1.1 課題背景 中國民族原創(chuàng)網(wǎng)絡(luò)游戲為中國網(wǎng)絡(luò)游戲產(chǎn)業(yè)所做出了巨大貢獻(xiàn),民族原創(chuàng)網(wǎng)絡(luò)游戲已經(jīng)成為產(chǎn)業(yè)發(fā)展的主導(dǎo)力量。同樣在中國自主研發(fā)的民族原創(chuàng)網(wǎng)絡(luò)游戲已經(jīng)真正成為中國游戲市場的主導(dǎo)力量。網(wǎng)絡(luò)游戲是通過信息網(wǎng)絡(luò)傳播和實現(xiàn)的互動娛樂形式,是一種網(wǎng)絡(luò)與文化相結(jié)合的產(chǎn)業(yè)。近年來,網(wǎng)絡(luò)文化市場發(fā)

4、展很快,隨著互聯(lián)網(wǎng)的迅速普及、寬帶的接入社區(qū)和家庭,我國網(wǎng)絡(luò)游戲市場發(fā)展迅速并進(jìn)入了一個高速增長期,并已經(jīng)創(chuàng)造了較大的產(chǎn)值,帶動了相關(guān)產(chǎn)業(yè)的發(fā)展,對促進(jìn)我國網(wǎng)絡(luò)經(jīng)濟和娛樂業(yè)的發(fā)展、豐富互聯(lián)網(wǎng)時代人民群眾的文化娛樂生活起到了積極作用。1.2 課程設(shè)計目的在程序設(shè)計中,通過設(shè)計、編制、調(diào)試一個五子棋的程序,加深對語法及語義分析原理的理解,并實現(xiàn)對命令語句的靈活應(yīng)用。在程序設(shè)計中,可以用兩種方法解決問題:一是傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計方法,二是更先進(jìn)的面向?qū)ο蟪绦蛟O(shè)計方法。由于多個函數(shù)均需要訪問某些數(shù)據(jù),這些數(shù)據(jù)常被設(shè)計為全局變量。而在面向?qū)ο蟪绦蛟O(shè)計中關(guān)鍵是如何將問題域中的實體(即日常所見的概念)抽取出

5、來,作為C+程序中的類,而屬性與行為作為類的兩類要素通常是必不可少的,甚至還應(yīng)考慮類必須滿足的約束。2 設(shè)計方案簡述 如下是描述整五子棋游戲的流程, 開發(fā)一個五子棋游戲需要從兩方面入手。一是游戲規(guī)則,二是技術(shù)。其實,任何軟件開發(fā)都是這兩大類。根據(jù)項目的特點,將不相關(guān)的功能分塊份階段進(jìn)行。大致流程如下:1.畫棋盤;2畫棋子;3增加下棋制約條件;4.每下一步,判斷輸贏;5.調(diào)試運行。2.1 可行性分析 游戲設(shè)計已經(jīng)成為現(xiàn)在社會的一種熱門行業(yè)。五子棋是一種受大眾廣泛喜愛的游戲,其規(guī)則簡單,變化多端,非常富有趣味性和消遣性。這里設(shè)計和實現(xiàn)了一個簡單的五子棋單機游戲。主要應(yīng)用了Visual C+編程來完

6、成這個游戲的設(shè)計的。本文主要介紹了本游戲開發(fā)環(huán)境Microsoft Visual C+ 6.0,使用當(dāng)前優(yōu)秀的開發(fā)工具VC+編程。包含了五子棋程序的棋盤初始化、游戲規(guī)則、勝負(fù)判斷。思路簡單明了,程序也較為簡單??梢造`活運用一學(xué)過的c+ 知識來編寫程序。 2.2 需求分析 近年來,隨著網(wǎng)絡(luò)的發(fā)展,游戲成為許多人關(guān)注的焦點。與傳統(tǒng)的影音產(chǎn)業(yè)一樣,游戲產(chǎn)業(yè)也是娛樂行業(yè)的一個重要組成部分,基于數(shù)字化的網(wǎng)絡(luò)游戲更讓人們找到了前所未有的感受,并已經(jīng)成為全球互聯(lián)產(chǎn)業(yè)的熱點。五子棋,亦稱“連五子”、“串珠”、“五目”、“五格”等等,日文稱之為“連珠”,英文則稱之為“Gobang”或“Renju”或“FIR(F

7、ive In a Row)”,是起源于中國古代的傳統(tǒng)黑白棋種之一,是一種體現(xiàn)民族特色的休閑游戲,同時能較好的鍛煉人的思維。具有廣闊的開發(fā)前景。3 詳細(xì)設(shè)計3.1 窗體設(shè)計利用MFC AppWinzard生成五子棋游戲應(yīng)用程序框架具體步驟如下:(1)執(zhí)行VC程序,選擇File|New命令,彈出New對話框.單擊Projects標(biāo)簽,轉(zhuǎn)到Projects選項卡,選擇MFC AppWizard(exe)選項,然后在Project name文本框中輸入Fivechess_44 。Lacation文本框是指項目的本地路徑。(2)單擊按鈕,彈出MFC AppWinzard_Step1對話框。選中單選按鈕,

8、如圖所示。(3)單擊完成按鈕,則建立一個單文檔應(yīng)用框架。 3.2游戲項目開發(fā) 3.2.1棋盤設(shè)計1.在已創(chuàng)建的工程Fivechess_44中添加畫棋盤的函數(shù)。首先在“Fivechess_44.h” 頭文件中定義一個用于顯示棋盤的自定義公有函數(shù):void Checkerboard(CDC*pDC);然后在“Fivechess_44View.cpp”源文件中實現(xiàn)該函數(shù)。代碼如下: void CFivechess_44View:Checkerboard(CDC*pDC) for(int i=0;iMoveTo(i*50,0); /畫筆移動到(i*50,0)點 pDC-LineTo(i*50,1000

9、); / 畫筆從(i*50,0)點到(i*50,1000)點 for(i=0;iMoveTo(0,i*50); pDC-LineTo(1000,i*50); 2.在應(yīng)用程序框架的OnDraw()函數(shù)中調(diào)用該畫棋盤函數(shù),將pDC對象作為實參傳遞給Checkerboard()函數(shù),代碼如下: void CFivechess_44View:OnDraw(CDC* pDC)CFivechess_44Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here Checkerboard(pD

10、C); /調(diào)用自定義的畫鍵盤函數(shù)3.編譯運行得到如下效果:一個空棋盤 3.2.2放置棋子功能的開發(fā) 按照規(guī)劃,棋子使用鼠標(biāo)的左鍵和右鍵(分別用這兩鍵來表示下棋的雙方)來進(jìn)行單機下棋,即是當(dāng)用戶單擊左鍵時,下黑色棋子,用戶單擊右鍵時,下白色棋子。因此,必須為鼠標(biāo)添加鼠標(biāo)左鍵和鼠標(biāo)右鍵單擊的鼠標(biāo)消息處理函數(shù),步驟如下:1.右擊CFivechessView類,調(diào)用添加消息處理函數(shù)的對話框,選擇Add windows MessageHandler2.添加消息處理函數(shù)WM_LBUTTONDOWN和WM_RBUTTONDOWN這兩個消息處理函數(shù)。然后點擊Edit Exisiting退出對話框。并添加消息處

11、理函數(shù)代碼。如下圖所示: 添加鼠標(biāo)左鍵和右鍵的消息處理函數(shù):(1).左鍵消息void CFivechess_44View:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCBrush* brush = new CBrush(RGB(0,0,0) ;/定義黑色畫刷CDC* pDC = this-GetDC(); /獲取當(dāng)前的圖形設(shè)備指針pDC-SelectObject(brush); /選中該黑色畫刷for(int i = 0 ; i 10

12、00 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); CView:OnLButtonDown(nFlags, point);(2).右鍵消息 void CFivechess_44View:OnRButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default CBrush* brush = new CBrush(RGB

13、(255,255,255) ;/定義白色畫刷CDC* pDC = this-GetDC(); /獲取當(dāng)前的圖形設(shè)備指針pDC-SelectObject(brush); /選中該白色畫刷for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); CView:OnRButtonDown(nFlags, point);到此便將畫棋盤和棋子的代碼編好,編譯運行如下:左擊鼠標(biāo)左鍵畫黑點,右擊鼠標(biāo)右鍵畫白點3.但程序至此尚有兩點未

14、解決:其一,下棋子的約束條件,即雙方按順序一人下一次才可第二次落棋子。其二,同一方格不能重復(fù)下棋子;解決第一個問題,添加以下代碼:(1) 在CFivechess_44View中添加一個公有的整形變量int RightORLet; /定義保存左鍵或右鍵下棋的標(biāo)記變量(2) 構(gòu)造函數(shù)將下棋的順序初始化為左鍵先下 CFivechess_44View:CFivechess_44View() / TODO: add construction code here RightORLet=0; /初始化默認(rèn)左鍵先下 (3) 修改鼠標(biāo)的左鍵和右鍵的單擊消息處理函數(shù),在畫棋子之前判斷輪到哪方下棋,代碼如下:左鍵代

15、碼:void CFivechess_44View:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default if(RightORLeft=0 ) CBrush* brush = new CBrush(RGB(0,0,0) ;/定義黑色畫刷CDC* pDC = this-GetDC(); /獲取當(dāng)前的圖形設(shè)備指針pDC-SelectObject(brush); /選中該黑色畫刷for(int i = 0 ; i 1000 ; i+=50)for(i

16、nt j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); RightORLeft+; /鼠標(biāo)狀態(tài)變化為0 CView:OnLButtonDown(nFlags, point);右鍵代碼:void CFivechess_44View:OnRButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default if(RightORLeft=1) CBrush*

17、brush = new CBrush(RGB(255,255,255) ;/定義白色畫刷CDC* pDC = this-GetDC(); /獲取當(dāng)前的圖形設(shè)備指針pDC-SelectObject(brush); /選中該白色畫刷for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); RightORLeft-;/鼠標(biāo)狀態(tài)變化為1,鼠標(biāo)右鍵按下后,再次改變鼠標(biāo)狀態(tài) CView:OnRButtonDown(nFlags,

18、 point); 其二,解決第二個問題:(1)在Fivechess_44View.h頭文件中加入3行公有代碼,并且在該頭文件中包含vector的頭文件,代碼如下:# includelass CFivechess_44View : public CView ;std:vector chessVec ; bool is Location (CPoint cp); void Location(CPoint cp); .; (2)根據(jù)函數(shù)名在正確位置添加或修改以下函數(shù).添加實現(xiàn)放置棋子函數(shù)額判斷放置許可函數(shù): bool CFivechess_44View:isLocation(CPoint cp)bo

19、ol isLoc = true ;for(int i = 0 ; i chessVec.size() ; i+)if(cp.x = chessVeci.x & cp.y = chessVeci.y)isLoc = false ;return isLoc ;void CFivechess_44View:Location(CPoint cp)chessVec.push_back(cp); 修改鼠標(biāo)左鍵和右鍵單擊的消息處理函數(shù)代碼如下,并注意為了消除該缺陷,“鼠標(biāo)消息標(biāo)志變量變化”的位置有所改變,代碼如下,該代碼已經(jīng)將下棋的全部約束條件全部實現(xiàn)了。 void CFivechess_44View:On

20、LButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultif(RightORLeft = 0 ) CBrush* brush = new CBrush(RGB(0,0,0) ;/定義黑色畫刷CDC* pDC = this-GetDC(); /獲取當(dāng)前的圖形設(shè)備指針pDC-SelectObject(brush); /選中該黑色畫刷for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempP

21、oint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); Location(tempPoint); /畫了該點后,將該點插入到向量中 RightORLeft+ ; /鼠標(biāo)消息標(biāo)志變量變化(注意) CView:OnLButtonDown(nFlags, point); void CFivechess_44View:OnRButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default if(RightORL

22、eft = 1 )CBrush* brush = new CBrush(RGB(255,255,255) ; /定義白色畫刷CDC* pDC = this-GetDC(); /選中該白色畫刷pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);Location(tempPoint);RightORLeft- ; /鼠標(biāo)消息標(biāo)志變量變化(注意)CView:OnRButt

23、onDown(nFlags, point);3.2.3游戲獲勝決斷的開發(fā)1.該功能是棋牌游戲中較難的功能。所以編寫程序時要細(xì)心。游戲規(guī)則是這樣能夠的:如果某一方(黑棋或白棋)在同一行或同一列或同一斜線上具有5個同色的棋子,則該顏色的這一方就獲勝。因此可以使用一個整形二維數(shù)組來記錄當(dāng)前的棋局情況,二維數(shù)組的值定義如下:0:表示該位子沒有棋子;1:表示該位置已經(jīng)放了黑色棋子;2:表示該位置已經(jīng)放了白色棋子;解決的問題:問題1:要在下每個棋子后,將數(shù)組變量對應(yīng)位置的數(shù)組元素值做改變,變?yōu)椤?”或“2”,這個只需要在鼠標(biāo)消息處理函數(shù)中調(diào)用Location()函數(shù)后改變數(shù)組元素值即可。問題2:下每個棋子

24、后,判斷在這個棋子同一行同一列或同一斜線上是否具有連續(xù)5個同色的棋子,若有,則宣判該方勝利,并退出游戲,如果沒有,則繼續(xù)游戲,輪到下一方下棋。具體實施步驟如下:(1) 增加棋盤狀態(tài)記錄數(shù)組。在Fivechess_44View.h頭文件中定義一個公有的整形數(shù)組,如下代碼: int chessArr2020;并在視圖類的構(gòu)造函數(shù)中將整形數(shù)組初始化為0,代碼為:CFivechess_44View:CFivechess_44View()/ TODO: add construction code here RightORLeft=0; /初始化棋盤,左鍵先下棋 for(int i=0;i20;i+) f

25、or(int j=0;j 0 & i 0 & i 0 & j 0 & j 0 & j 0 & i 0 & j 0 & i 0 & j 0 & i 0 & j 0 & i GetDC(); /獲取當(dāng)前的圖形設(shè)備指針pDC-SelectObject(brush); /選中該黑色畫刷for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); Location(tempPoint);/畫了該點后,將該點插入到向量中 chess

26、ArrtempPoint.x/50tempPoint.y/50 = 1 ;if( isWin(point) )MessageBox(黑色棋子獲勝!);RightORLeft+ ; CView:OnLButtonDown(nFlags, point);鼠標(biāo)右鍵具有輸贏判斷的鼠標(biāo)消息處理函數(shù)與左鍵類似,代碼如下:void CFivechess_44View:OnRButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default if(RightORLeft = 1 )CBrush* brush = new CBrush(RGB(255,255,255) ;CDC* pDC = this-GetDC();pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論