版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、江 蘇 師 范 大 學(xué) 科 文 學(xué) 院本 科 生 課 程 設(shè) 計(jì)課 程 名 稱: Visual C+ 題 目: 人員管理系統(tǒng) 專 業(yè) 班 級(jí): 11電信1 學(xué) 生 姓 名: 劉海騰 學(xué) 生 學(xué) 號(hào): 118326121 日 期: 2013.12.28 指 導(dǎo) 教 師: 姜芳艽 科文學(xué)院教務(wù)部印制一、課程設(shè)計(jì)目的、任務(wù)和內(nèi)容要求:計(jì)算機(jī)語(yǔ)言程序設(shè)計(jì)是一門以編程實(shí)踐為主的專業(yè)課,目的在于培養(yǎng)學(xué)生利用計(jì)算機(jī)語(yǔ)言進(jìn)行軟件開發(fā)所必需的基本思想和基本技能,進(jìn)一步提高綜合應(yīng)用計(jì)算機(jī)語(yǔ)言的各種編程知識(shí)和技巧進(jìn)行程序設(shè)計(jì)的能力,通過(guò)本次課程設(shè)計(jì),學(xué)生應(yīng)能達(dá)到具備設(shè)計(jì)功能較為復(fù)雜的應(yīng)用程序的能力,同時(shí)培養(yǎng)學(xué)生自主
2、學(xué)習(xí)和獨(dú)立創(chuàng)新的精神。任務(wù)如下: 1進(jìn)行需求分析和概要設(shè)計(jì),給出流程圖。 2寫出詳細(xì)設(shè)計(jì),熟悉其中采用的關(guān)鍵技術(shù)。3給出具體的編碼實(shí)現(xiàn)并調(diào)試。4寫課程設(shè)計(jì)報(bào)告提交源程序。內(nèi)容要求:設(shè)計(jì)并完成軟件系統(tǒng)。要求:1應(yīng)具有簡(jiǎn)潔友好的用戶界面。2要求軟件系統(tǒng)的功能完整。3要求程序具備正確性,可讀性和運(yùn)行的高效性。 二、進(jìn)度安排:第13天: 查找資料,進(jìn)行需求分析和概要設(shè)計(jì);第46天: 各模塊的詳細(xì)設(shè)計(jì);第712天: 軟件實(shí)現(xiàn)與調(diào)試;第1314天:寫課程設(shè)計(jì)報(bào)告并提交源程序。三、主要參考文獻(xiàn):1 四維科技,丁展,湯倩.Visual C+ 游戲開發(fā)技術(shù)與實(shí)例M.北京:人民郵電出版社,20052求是科技,張宏
3、林.Visual C+ 6.0程序設(shè)計(jì)與開發(fā)技術(shù)大全M. 北京:人民郵電出版社,20053汪翔,袁輝.Visual C+ 實(shí)踐與提高(網(wǎng)絡(luò)編程篇)M. 北京:中國(guó)鐵道出版社,20014黃維通.Visual C+ 面向?qū)ο笈c可視化程序設(shè)計(jì)M. 北京:清華大學(xué)出版社,20035謝希任.計(jì)算機(jī)網(wǎng)絡(luò)(第4版)M. 北京:電子工業(yè)出版社,20056(美)W. Richard Stevens. TCP/IP詳解卷1:協(xié)議M. 北京:機(jī)械工業(yè)出版社,20057北京現(xiàn)代富博科技有限公司,陳兵旗,孫明. 北京:Visual C+實(shí)用圖象處理專業(yè)教程M .清華大學(xué)出版社,20048張靜.Windows多媒體編程基
4、礎(chǔ)M.北京:清化大學(xué)出版社,20059劉振安,徐峰.Windows實(shí)用編程指南M.北京:人民郵電出版社,199510劉長(zhǎng)明,楊工明.Visual C+ 實(shí)踐與提高(多媒體篇)M. 北京:中國(guó)鐵道出版社,2001 指導(dǎo)教師簽字: 年 月 日江蘇師范大學(xué)科文學(xué)院課程設(shè)計(jì)報(bào)告目 錄 摘 要 IIAbstract . II1 緒論 . 11.1 課題背景 .11.2 課程設(shè)計(jì)的目的. 12 設(shè)計(jì)方案簡(jiǎn)述 . 22.1 可行性分析.22.2 需求分析.23 詳細(xì)設(shè)計(jì).33.1窗體設(shè)計(jì).33.2游戲項(xiàng)目開發(fā).53.2.1棋牌設(shè)置.53.2.2放置棋子功能的開發(fā).63.3.3游戲獲勝?zèng)Q斷的開發(fā).123.2.
5、4游戲的調(diào)試與運(yùn)行.204 設(shè)計(jì)結(jié)果及分析.224.1 程序的結(jié)果.22 4.2結(jié)果分析.23 5總 結(jié) .24參考文獻(xiàn) .25 摘 要網(wǎng)絡(luò)游戲的出現(xiàn)代表了一種全新娛樂(lè)方式的誕生。目前網(wǎng)絡(luò)游戲正以其獨(dú)特的魅力吸引著眾多的玩家。隨著游戲產(chǎn)業(yè)的蓬勃發(fā)展,將需要越來(lái)越多的人加入到游戲開發(fā)中來(lái)。本畢業(yè)設(shè)計(jì)所完成的五子棋游戲(網(wǎng)絡(luò)版)是在Windows XP下使用Microsoft Visual C+6.0開發(fā)的C/S系統(tǒng),可以實(shí)現(xiàn)網(wǎng)絡(luò)間的雙人對(duì)戰(zhàn),并且可以提供多媒體播放功能。系統(tǒng)的多媒體播放功能可以播放MP3、WMA等主流格式的音樂(lè)。本論文從基本網(wǎng)絡(luò)套節(jié)字開始入手,介紹了一些本系統(tǒng)相關(guān)的理論知識(shí),隨后
6、詳細(xì)介紹了五子棋游戲(網(wǎng)絡(luò)版)的開發(fā)過(guò)程。包括服務(wù)器端、客戶端的socket編程,五子棋服務(wù)器和客戶端通信的實(shí)現(xiàn),五子棋判斷算法的實(shí)現(xiàn),主界面視圖,多媒體播放以及定時(shí)器等附加功能的實(shí)現(xiàn)。最后對(duì)系統(tǒng)進(jìn)行測(cè)試并對(duì)所做工作進(jìn)行總結(jié)。關(guān)鍵詞 程序設(shè)計(jì);Fivechess;MFC;Abstract AbstractOn-line games bring to a new form of entertainment. Until now, on-line games is charming more and more players. As the development of game industry
7、, there will be more and more developers join in the game development team.The on -line Black&White game was developed by Microsoft Visual C+6.0 on Windows XP platform. In this game, two people can play the game on line, and the game also provides multimedia player function.The thesis start
8、 with introduction of network socket programming, the development processing of the on -line Black&White game are introduced in detail as followed. The thesis have a full touch on server and client socket programming, the communication between server and client was implemented, the algorith
9、m of the five-in-a-row game, the multimedia playback functions.Keywords : program; computer; MFC; Fivechess1課題背景 中國(guó)民族原創(chuàng)網(wǎng)絡(luò)游戲?yàn)橹袊?guó)網(wǎng)絡(luò)游戲產(chǎn)業(yè)所做出了巨大貢獻(xiàn),民族原創(chuàng)網(wǎng)絡(luò)游戲已經(jīng)成為產(chǎn)業(yè)發(fā)展的主導(dǎo)力量。同樣在中國(guó)自主研發(fā)的民族原創(chuàng)網(wǎng)絡(luò)游戲已經(jīng)真正成為中國(guó)游戲市場(chǎng)的主導(dǎo)力量。網(wǎng)絡(luò)游戲是通過(guò)信息網(wǎng)絡(luò)傳播和實(shí)現(xiàn)的互動(dòng)娛樂(lè)形式,是一種網(wǎng)絡(luò)與文化相結(jié)合的產(chǎn)業(yè)。近年來(lái),網(wǎng)絡(luò)文化市場(chǎng)發(fā)展很快,隨著互聯(lián)網(wǎng)的迅速普及、寬帶的接入社區(qū)和家庭,我國(guó)網(wǎng)絡(luò)游戲市場(chǎng)發(fā)展迅速并進(jìn)入了一個(gè)高速增長(zhǎng)期,并
10、已經(jīng)創(chuàng)造了較大的產(chǎn)值,帶動(dòng)了相關(guān)產(chǎn)業(yè)的發(fā)展,對(duì)促進(jìn)我國(guó)網(wǎng)絡(luò)經(jīng)濟(jì)和娛樂(lè)業(yè)的發(fā)展、豐富互聯(lián)網(wǎng)時(shí)代人民群眾的文化娛樂(lè)生活起到了積極作用。1.1設(shè)計(jì)目的在程序設(shè)計(jì)中,通過(guò)設(shè)計(jì)、編制、調(diào)試一個(gè)五子棋的程序,加深對(duì)語(yǔ)法及語(yǔ)義分析原理的理解,并實(shí)現(xiàn)對(duì)命令語(yǔ)句的靈活應(yīng)用。在程序設(shè)計(jì)中,可以用兩種方法解決問(wèn)題:一是傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)方法,二是更先進(jìn)的面向?qū)ο蟪绦蛟O(shè)計(jì)方法。由于多個(gè)函數(shù)均需要訪問(wèn)某些數(shù)據(jù),這些數(shù)據(jù)常被設(shè)計(jì)為全局變量。而在面向?qū)ο蟪绦蛟O(shè)計(jì)中關(guān)鍵是如何將問(wèn)題域中的實(shí)體(即日常所見(jiàn)的概念)抽取出來(lái),作為C+程序中的類,而屬性與行為作為類的兩類要素通常是必不可少的,甚至還應(yīng)考慮類必須滿足的約束。2 設(shè)計(jì)
11、方案簡(jiǎn)述 如下是描述整五子棋游戲的流程, 開發(fā)一個(gè)五子棋游戲需要從兩方面入手。一是游戲規(guī)則,二是技術(shù)。其實(shí),任何軟件開發(fā)都是這兩大類。根據(jù)項(xiàng)目的特點(diǎn),將不相關(guān)的功能分塊份階段進(jìn)行。大致流程如下:1.畫棋盤;2畫棋子;3增加下棋制約條件;4.每下一步,判斷輸贏;5.調(diào)試運(yùn)行。2.1 可行性分析 游戲設(shè)計(jì)已經(jīng)成為現(xiàn)在社會(huì)的一種熱門行業(yè)。五子棋是一種受大眾廣泛喜愛(ài)的游戲,其規(guī)則簡(jiǎn)單,變化多端,非常富有趣味性和消遣性。這里設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的五子棋單機(jī)游戲。主要應(yīng)用了Visual C+編程來(lái)完成這個(gè)游戲的設(shè)計(jì)的。本文主要介紹了本游戲開發(fā)環(huán)境Microsoft Visual C+ 6.0,使用當(dāng)前優(yōu)秀
12、的開發(fā)工具VC+編程。包含了五子棋程序的棋盤初始化、游戲規(guī)則、勝負(fù)判斷。思路簡(jiǎn)單明了,程序也較為簡(jiǎn)單??梢造`活運(yùn)用一學(xué)過(guò)的c+ 知識(shí)來(lái)編寫程序。 2.2 需求分析 近年來(lái),隨著網(wǎng)絡(luò)的發(fā)展,游戲成為許多人關(guān)注的焦點(diǎn)。與傳統(tǒng)的影音產(chǎn)業(yè)一樣,游戲產(chǎn)業(yè)也是娛樂(lè)行業(yè)的一個(gè)重要組成部分,基于數(shù)字化的網(wǎng)絡(luò)游戲更讓人們找到了前所未有的感受,并已經(jīng)成為全球互聯(lián)產(chǎn)業(yè)的熱點(diǎn)。五子棋,亦稱“連五子”、“串珠”、“五目”、“五格”等等,日文稱之為“連珠”,英文則稱之為“Gobang”或“Renju”或“FIR(Five In a Row)”,是起源于中國(guó)古代的傳統(tǒng)黑白棋種之一,是一種體現(xiàn)民族特色的休閑游戲,同時(shí)能較好的
13、鍛煉人的思維。具有廣闊的開發(fā)前景。3 詳細(xì)設(shè)計(jì)3.1 窗體設(shè)計(jì)利用MFC AppWinzard生成五子棋游戲應(yīng)用程序框架具體步驟如下:(1)執(zhí)行VC程序,選擇File|New命令,彈出New對(duì)話框.單擊Projects標(biāo)簽,轉(zhuǎn)到Projects選項(xiàng)卡,選擇MFC AppWizard(exe)選項(xiàng),然后在Project name文本框中輸入Fivechess_44 。Lacation文本框是指項(xiàng)目的本地路徑。(2)單擊按鈕,彈出MFC AppWinzard_Step1對(duì)話框。選中單選按鈕,如圖所示。(3)單擊完成按鈕,則建立一個(gè)單文檔應(yīng)用框架。 3.2游戲項(xiàng)目開發(fā) (四號(hào)字 黑體) 3.2.1棋
14、盤設(shè)計(jì)1.在已創(chuàng)建的工程Fivechess_44中添加畫棋盤的函數(shù)。首先在“Fivechess_44.h” 頭文件中定義一個(gè)用于顯示棋盤的自定義公有函數(shù):void Checkerboard(CDC*pDC);然后在“Fivechess_44View.cpp”源文件中實(shí)現(xiàn)該函數(shù)。代碼如下: void CFivechess_44View:Checkerboard(CDC*pDC) for(int i=0;i<20;i+) /連續(xù)畫20條豎線 pDC->MoveTo(i*50,0); /畫筆移動(dòng)到(i*50,0)點(diǎn) pDC->LineTo(i*50,1000); / 畫筆從(i*5
15、0,0)點(diǎn)到(i*50,1000)點(diǎn) for(i=0;i<20;i+) /連續(xù)畫20條橫線 pDC->MoveTo(0,i*50); pDC->LineTo(1000,i*50); 2.在應(yīng)用程序框架的OnDraw()函數(shù)中調(diào)用該畫棋盤函數(shù),將pDC對(duì)象作為實(shí)參傳遞給Checkerboard()函數(shù),代碼如下: void CFivechess_44View:OnDraw(CDC* pDC)CFivechess_44Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data
16、 here Checkerboard(pDC); /調(diào)用自定義的畫鍵盤函數(shù)3.編譯運(yùn)行得到如下效果:一個(gè)空棋盤 3.2.2放置棋子功能的開發(fā) 按照規(guī)劃,棋子使用鼠標(biāo)的左鍵和右鍵(分別用這兩鍵來(lái)表示下棋的雙方)來(lái)進(jìn)行單機(jī)下棋,即是當(dāng)用戶單擊左鍵時(shí),下黑色棋子,用戶單擊右鍵時(shí),下白色棋子。因此,必須為鼠標(biāo)添加鼠標(biāo)左鍵和鼠標(biāo)右鍵單擊的鼠標(biāo)消息處理函數(shù),步驟如下:1.右擊CFivechessView類,調(diào)用添加消息處理函數(shù)的對(duì)話框,選擇Add windows MessageHandler2.添加消息處理函數(shù)WM_LBUTTONDOWN和WM_RBUTTONDOWN這兩個(gè)消息處理函數(shù)。然后點(diǎn)擊Edit
17、Exisiting退出對(duì)話框。并添加消息處理函數(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);
18、 /選中該黑色畫刷for(int i = 0 ; i < 1000 ; i+=50)for(int j = 0 ; j < 1000 ; j+=50)CRect rect(i,j,i+50,j+50); if(rect.PtInRect(point) CPoint tempPoint ;tempPoint = rect.CenterPoint();pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); CView:OnLButtonDown(nFlags, point);(2).右鍵
19、消息 void CFivechess_44View:OnRButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default CBrush* 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(
20、int j = 0 ; j < 1000 ; j+=50)CRect rect(i,j,i+50,j+50);/每格都信定義一矩形 if(rect.PtInRect(point) /如果鼠標(biāo)點(diǎn)在該矩形內(nèi) CPoint tempPoint ;tempPoint = rect.CenterPoint();/獲取矩形中心,用于畫棋子pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); CView:OnRButtonDown(nFlags, point);到此便將畫棋盤和棋子的代碼編好,編譯運(yùn)行
21、如下:左擊鼠標(biāo)左鍵畫黑點(diǎn),右擊鼠標(biāo)右鍵畫白點(diǎn)3.但程序至此尚有兩點(diǎn)未解決:其一,下棋子的約束條件,即雙方按順序一人下一次才可第二次落棋子。其二,同一方格不能重復(fù)下棋子;解決第一個(gè)問(wèn)題,添加以下代碼:(1) 在CFivechess_44View中添加一個(gè)公有的整形變量int RightORLet; /定義保存左鍵或右鍵下棋的標(biāo)記變量(2) 構(gòu)造函數(shù)將下棋的順序初始化為左鍵先下 CFivechess_44View:CFivechess_44View() / TODO: add construction code here RightORLet=0; /初始化默認(rèn)左鍵先下 (3) 修改鼠標(biāo)的左鍵和右
22、鍵的單擊消息處理函數(shù),在畫棋子之前判斷輪到哪方下棋,代碼如下:左鍵代碼: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); /選
23、中該黑色畫刷for(int i = 0 ; i < 1000 ; i+=50)for(int j = 0 ; j < 1000 ; j+=50)CRect rect(i,j,i+50,j+50); if(rect.PtInRect(point) CPoint tempPoint ;tempPoint = rect.CenterPoint();pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); RightORLeft+; /鼠標(biāo)狀態(tài)變化為0 CView:OnLButtonDown(
24、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* brush = new CBrush(RGB(255,255,255) ;/定義白色畫刷CDC* pDC = this->GetDC(); /獲取當(dāng)前的圖形設(shè)備指針pDC->SelectObject(brush); /選中該白色畫刷for(i
25、nt i = 0 ; i < 1000 ; i+=50)for(int j = 0 ; j < 1000 ; j+=50)CRect rect(i,j,i+50,j+50);/每格都信定義一矩形 if(rect.PtInRect(point) /如果鼠標(biāo)點(diǎn)在該矩形內(nèi) CPoint tempPoint ;tempPoint = rect.CenterPoint();/獲取矩形中心,用于畫棋子pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); RightORLeft-;/鼠標(biāo)狀態(tài)變化
26、為1,鼠標(biāo)右鍵按下后,再次改變鼠標(biāo)狀態(tài) CView:OnRButtonDown(nFlags, point); 其二,解決第二個(gè)問(wèn)題:(1)在Fivechess_44View.h頭文件中加入3行公有代碼,并且在該頭文件中包含vector的頭文件,代碼如下:# include< vector >lass CFivechess_44View : public CView ;std:vector<CPoint> chessVec ; bool is Location (CPoint cp); void Location(CPoint cp); .; (2)根據(jù)函數(shù)名在正確位置
27、添加或修改以下函數(shù)<1>.添加實(shí)現(xiàn)放置棋子函數(shù)額判斷放置許可函數(shù): bool CFivechess_44View:isLocation(CPoint cp)bool 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); <2&
28、gt;修改鼠標(biāo)左鍵和右鍵單擊的消息處理函數(shù)代碼如下,并注意為了消除該缺陷,“鼠標(biāo)消息標(biāo)志變量變化”的位置有所改變,代碼如下,該代碼已經(jīng)將下棋的全部約束條件全部實(shí)現(xiàn)了。 void CFivechess_44View:OnLButtonDown(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->Get
29、DC(); /獲取當(dāng)前的圖形設(shè)備指針pDC->SelectObject(brush); /選中該黑色畫刷for(int i = 0 ; i < 1000 ; i+=50)for(int j = 0 ; j < 1000 ; j+=50)CRect rect(i,j,i+50,j+50); CPoint tempPoint ;tempPoint = rect.CenterPoint();if(rect.PtInRect(point)&& isLocation(tempPoint) /判斷矩形中心點(diǎn)是否已經(jīng)存在 pDC->Ellipse(tempPoint.
30、x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); Location(tempPoint); /畫了該點(diǎn)后,將該點(diǎn)插入到向量中 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(RightORLeft =
31、 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 < 1000 ; j+=50)CRect rect(i,j,i+50,j+50); /與鼠標(biāo)左鍵消息一樣CPoint tempPoint ;tempPoint = rect.CenterPoint();if(rect.PtInRect(poi
32、nt)&& isLocation(tempPoint)pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);Location(tempPoint);RightORLeft- ; /鼠標(biāo)消息標(biāo)志變量變化(注意)CView:OnRButtonDown(nFlags, point);3.2.3游戲獲勝?zèng)Q斷的開發(fā)1.該功能是棋牌游戲中較難的功能。所以編寫程序時(shí)要細(xì)心。游戲規(guī)則是這樣能夠的:如果某一方(黑棋或白棋)在同一行或同一列或同一斜線上具有5個(gè)同色的棋子,則該顏色的這一方就獲勝。因此
33、可以使用一個(gè)整形二維數(shù)組來(lái)記錄當(dāng)前的棋局情況,二維數(shù)組的值定義如下:0:表示該位子沒(méi)有棋子;1:表示該位置已經(jīng)放了黑色棋子;2:表示該位置已經(jīng)放了白色棋子;解決的問(wèn)題:?jiǎn)栴}1:要在下每個(gè)棋子后,將數(shù)組變量對(duì)應(yīng)位置的數(shù)組元素值做改變,變?yōu)椤?”或“2”,這個(gè)只需要在鼠標(biāo)消息處理函數(shù)中調(diào)用Location()函數(shù)后改變數(shù)組元素值即可。問(wèn)題2:下每個(gè)棋子后,判斷在這個(gè)棋子同一行同一列或同一斜線上是否具有連續(xù)5個(gè)同色的棋子,若有,則宣判該方勝利,并退出游戲,如果沒(méi)有,則繼續(xù)游戲,輪到下一方下棋。具體實(shí)施步驟如下;(1) 增加棋盤狀態(tài)記錄數(shù)組。在Fivechess_44View.h頭文件中定義一個(gè)公有的
34、整形數(shù)組,如下代碼: int chessArr2020;并在視圖類的構(gòu)造函數(shù)中將整形數(shù)組初始化為0,代碼為:CFivechess_44View:CFivechess_44View()/ TODO: add construction code here RightORLeft=0; /初始化棋盤,左鍵先下棋 for(int i=0;i<20;i+) for(int j=0;j<20;j+) chessArrij=0; /將棋盤初始化為空棋盤 (2) 新增判斷輸贏的函數(shù)。在Fivechess_44View.h頭文件中添加該函數(shù)的定義: bool isWin(CPoint cp); 將該
35、函數(shù)的代碼寫入Fivechess_44View.cpp源文件中,代碼如下:判斷下棋后棋盤輸贏的函數(shù): bool CFivechess_44View:isWin(CPoint cp)int cp_x = cp.x / 50 ;int cp_y = cp.y / 50 ;int i = cp_x ;int j = cp_y ;int count = 1 ;int nowChessColor = chessArrcp_xcp_y ;while(1)if(i > 0 && i < 20)i- ;if( nowChessColor = chessArrij )count+ ;
36、if( count = 5 )return true ;elsebreak ;elsebreak;i = cp_x ;while(1)if(i > 0 && i < 20)i+ ;if( nowChessColor = chessArrij )count+ ;if( count = 5 )return true ;elsebreak ;elsebreak;i = cp_x ;count = 1 ;while(1)if(j > 0 && j < 20)j- ;if( nowChessColor = chessArrij )count+ ;i
37、f( count = 5 )return true ;elsebreak ;elsebreak;j = cp_y ;while(1)if(j > 0 && j < 20)j+ ;if( nowChessColor = chessArrij )count+ ;if( count = 5 )return true ;elsebreak ;elsebreak;j = cp_y ;count = 1 ;while(1)if(j > 0 && j < 20 && i > 0 && i < 20)j+ ;i
38、+ ;if( nowChessColor = chessArrij )count+ ;if( count = 5 )return true ;elsebreak ;elsebreak;j = cp_y ;i = cp_x ;while(1)if(j > 0 && j < 20 && i > 0 && i < 20)j- ;i- ;if( nowChessColor = chessArrij )count+ ;if( count = 5 )return true ;elsebreak ;elsebreak;j = cp_y
39、;i = cp_x ;count = 1 ;while(1)if(j > 0 && j < 20 && i > 0 && i < 20)j+ ;i- ;if( nowChessColor = chessArrij )count+ ;if( count = 5 )return true ;elsebreak ;elsebreak;j = cp_y ;i = cp_x ;while(1)if(j > 0 && j < 20 && i > 0 && i <
40、20)j- ;i+ ;if( nowChessColor = chessArrij )count+ ;if( count = 5 )return true ;elsebreak ;elsebreak;j = cp_y ;i = cp_x ;count = 1 ;return false ;(3) 在鼠標(biāo)消息出來(lái)函數(shù)適當(dāng)?shù)奈恢貌迦肱袛嗍欠褛A棋函數(shù),設(shè)計(jì)思路是,每下一步棋子,都會(huì)以該棋子為基準(zhǔn),做出判斷。其中,鼠標(biāo)左鍵的消息處理函數(shù)修改代碼如下:鼠標(biāo)左鍵具有輸贏判斷的鼠標(biāo)消息處理函數(shù): void CFivechess_44View:OnLButtonDown(UINT nFlags, CPoint
41、 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 < 1000 ; j+=50)CRect rect(i,
42、j,i+50,j+50); CPoint tempPoint ;tempPoint = rect.CenterPoint();if(rect.PtInRect(point)&& isLocation(tempPoint) /判斷矩形中心點(diǎn)是否已經(jīng)存在pDC->Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); Location(tempPoint);/畫了該點(diǎn)后,將該點(diǎn)插入到向量中 chessArrtempPoint.x/50tempPoint.y/50 = 1 ;if( isWin(
43、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(25
44、5,255,255) ;CDC* pDC = this->GetDC();pDC->SelectObject(brush);for(int i = 0 ; i < 1000 ; i+=50)for(int j = 0 ; j < 1000 ; j+=50)CRect rect(i,j,i+50,j+50);CPoint tempPoint ;tempPoint = rect.CenterPoint();if(rect.PtInRect(point)&& isLocation(tempPoint)pDC->Ellipse(tempPoint.x-20
45、,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);Location(tempPoint);chessArrtempPoint.x/50tempPoint.y/50 = 2 ;if( isWin(point) )MessageBox("白色棋子獲勝!");RightORLeft- ;CView:OnRButtonDown(nFlags, point);3.2.4游戲的調(diào)試與運(yùn)行編譯程序:鼠標(biāo)點(diǎn)擊 組建>全部重建。編譯若出現(xiàn)錯(cuò)誤提示,則根據(jù)提示修改程序,直至編譯無(wú)誤。然后運(yùn)行。得到的結(jié)果如下未進(jìn)行游戲時(shí)的結(jié)果:開始游戲后的結(jié)果:4 設(shè)計(jì)結(jié)果及分析4.1程序的結(jié)果黑棋獲勝的結(jié)果為:白棋獲勝的結(jié)果為:4.2結(jié)果分析畫棋子的原理在于,讀取鼠標(biāo)點(diǎn)擊的坐標(biāo)來(lái)判斷點(diǎn)擊位所在的格子,然后求出該格子的中心位置坐標(biāo),以該中心位置為圓心畫黑色圓或白色圓。棋牌游戲中都有輪流下棋或出牌的一般性規(guī)則,這種情況下,都采用令牌變量,通過(guò)令牌變量來(lái)判斷當(dāng)前誰(shuí)有下棋或出牌的權(quán)利。5 總結(jié)本畢業(yè)設(shè)計(jì)是一款休閑五子棋游戲,離真正意義上的廣域網(wǎng)網(wǎng)絡(luò)游戲還要差距。但是它已經(jīng)擁有了
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新型電動(dòng)出租車購(gòu)置合同范本4篇
- 2025年度協(xié)議離婚房產(chǎn)分割合同范本3篇
- 2024起重機(jī)研發(fā)、制造與銷售合作框架合同3篇
- 2024版建筑腳手架施工安全合作合同書版B版
- 2024藥品研發(fā)生產(chǎn)項(xiàng)目廉潔合作合同范本3篇
- 2024智能化倉(cāng)儲(chǔ)管理系統(tǒng)采購(gòu)與升級(jí)合同2篇
- 2025年度知識(shí)產(chǎn)權(quán)出借與咨詢服務(wù)合同4篇
- 2025年度知識(shí)產(chǎn)權(quán)評(píng)估居間合同上訴狀4篇
- 2024離婚雙方關(guān)于調(diào)解程序的協(xié)議
- 2024版毛竹購(gòu)銷合同模板
- 春節(jié)行車安全常識(shí)普及
- 電機(jī)維護(hù)保養(yǎng)專題培訓(xùn)課件
- 汽車租賃行業(yè)利潤(rùn)分析
- 春節(jié)拜年的由來(lái)習(xí)俗來(lái)歷故事
- 2021火災(zāi)高危單位消防安全評(píng)估導(dǎo)則
- 佛山市服務(wù)業(yè)發(fā)展五年規(guī)劃(2021-2025年)
- 房屋拆除工程監(jiān)理規(guī)劃
- 醫(yī)院保安服務(wù)方案(技術(shù)方案)
- 高效能人士的七個(gè)習(xí)慣:實(shí)踐應(yīng)用課程:高級(jí)版
- 小數(shù)加減法計(jì)算題100道
- 通信電子線路(哈爾濱工程大學(xué))智慧樹知到課后章節(jié)答案2023年下哈爾濱工程大學(xué)
評(píng)論
0/150
提交評(píng)論