VC++拼圖游戲設(shè)計(jì)

上傳人:仙*** 文檔編號(hào):28052522 上傳時(shí)間:2021-08-23 格式:DOC 頁(yè)數(shù):33 大?。?.36MB
收藏 版權(quán)申訴 舉報(bào) 下載
VC++拼圖游戲設(shè)計(jì)_第1頁(yè)
第1頁(yè) / 共33頁(yè)
VC++拼圖游戲設(shè)計(jì)_第2頁(yè)
第2頁(yè) / 共33頁(yè)
VC++拼圖游戲設(shè)計(jì)_第3頁(yè)
第3頁(yè) / 共33頁(yè)

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《VC++拼圖游戲設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《VC++拼圖游戲設(shè)計(jì)(33頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、2011屆本科畢業(yè)生論文 題目: VC+拼圖游戲設(shè)計(jì) Title: Design of Vc+ Puzzle Game 姓 名 學(xué) 號(hào) 所在學(xué)院 專(zhuān) 業(yè) 指導(dǎo)教師 完成日期 聲 明本人鄭重聲明:所呈交的畢業(yè)設(shè)計(jì)(論文)是本人在指導(dǎo)教師指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。其中除加以標(biāo)注和致謝的地方,以及法律規(guī)定允許的之外,不包含其他人已經(jīng)發(fā)表或撰寫(xiě)完成并以某種方式公開(kāi)過(guò)的研究成果,也不包含為獲得其他教育機(jī)構(gòu)的學(xué)位或證書(shū)而作的材料。其他同志對(duì)本研究所做的任何貢獻(xiàn)均已在文中作了明確的說(shuō)明并表示謝意。本畢業(yè)設(shè)計(jì)(論文)成果是本人在江西師范大學(xué)讀書(shū)期間在指導(dǎo)教師指導(dǎo)下取得的,成果歸江西師范大學(xué)所有。特

2、此聲明。聲明人(畢業(yè)設(shè)計(jì)(論文)作者)學(xué)號(hào):聲明人(畢業(yè)設(shè)計(jì)(論文)作者)簽名:簽名日期: 年 月 日摘 要本文介紹了一個(gè)基于VC的趣味拼圖游戲開(kāi)發(fā)的全過(guò)程,MFC規(guī)范的出現(xiàn)使得我們開(kāi)發(fā)VC游戲成為可能,今天我們要實(shí)現(xiàn)的是一個(gè)簡(jiǎn)單的拼圖游戲。這個(gè)拼圖游戲是一個(gè)3*3的拼圖,由9個(gè)隨機(jī)分割打亂的小圖片構(gòu)成,其中置一格為空。通過(guò)消息映射控制移動(dòng)空框邊的小圖片來(lái)實(shí)現(xiàn)拼圖,從游戲前得準(zhǔn)備到主要類(lèi)和設(shè)備接口的實(shí)現(xiàn),最后運(yùn)行、調(diào)試和打包。關(guān)鍵詞:VC,拼圖,MFC,游戲,隨機(jī)分割打亂。AbstractIntroduces a jigsaw puzzle based on VC interest devel

3、opment entire process, the emergence of ordinary MFC standard allows us to develop VC games become possible, today we are going to realize is that a simple puzzle. This puzzle is a 3 * 3 of the jigsaw puzzle, disrupted by nine random division of the small picture composition, buy a case is empty. By

4、 moving the empty box edge little pictures from game to achieve puzzles, before the main class and to the realization of the device interface, finally running, debugging and packaged. Key words: Visual c + +, Puzzle, Mfc, Game, Sorting frame.目 錄摘 要IAbstractII1 引言11.1 拼圖游戲介紹11.2 開(kāi)發(fā)背景11.3 開(kāi)發(fā)環(huán)境及運(yùn)行環(huán)境11.

5、3.1 開(kāi)發(fā)環(huán)境11.3.2 運(yùn)行環(huán)境12 設(shè)計(jì)要求22.1 基本要求22.2 創(chuàng)新要求23 方案設(shè)計(jì)23.1 設(shè)計(jì)原理23.2 設(shè)計(jì)流程圖44 系統(tǒng)開(kāi)發(fā)工具和技術(shù)44.1 Visual C+的工作環(huán)境44.2 位圖顯示54.3 消息映射過(guò)程65 九宮格拼圖游戲設(shè)計(jì)75.1 九宮格界面設(shè)計(jì)75.2 MFC中圖像的顯示95.3 圖片處理與游戲規(guī)則125.4 對(duì)話框菜單編輯175.4.1 菜單編輯175.4.2菜單命令的消息映射175.5 游戲結(jié)束標(biāo)志196 編譯運(yùn)行并測(cè)試217總結(jié)22參考文獻(xiàn)23致謝24281 引言1.1 拼圖游戲介紹拼圖游戲是廣受歡迎的一種智力游戲,它的變化多端,難度不一,讓

6、人百玩不厭。個(gè)性化的拼圖,拼湊的不僅僅是一張照片,而是一個(gè)故事,一段回憶,一段溫情。每一片的單片都有它自己的位置,就像每段回憶都有它的故事,你要將它放在專(zhuān)屬的地方,放對(duì)了就慢慢豐富起來(lái),放錯(cuò)了就無(wú)法完整。你可以把你記憶中最深的片段,可以是你摯愛(ài)的照片,可以是你最難忘的一瞬留念,做成拼圖,在思念的季節(jié)里一一拼起,把片片散落的記憶重新組合,用指尖溫習(xí)甜蜜,把心湖里最美麗的漣漪蕩漾開(kāi)來(lái)。拼圖游戲不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。它既有簡(jiǎn)單易學(xué)的特性,為人民群眾所喜聞樂(lè)見(jiàn)。1.2 開(kāi)發(fā)背景當(dāng)前網(wǎng)絡(luò)上流傳的拼圖游戲功能并不盡善盡美,其中最主要的問(wèn)題就是很多軟件在圖片打亂上面處理

7、的比較模糊,也有采用固定的打亂方法;而且有時(shí)出現(xiàn)有一對(duì)板塊是對(duì)調(diào)的無(wú)法完成游戲,所以我決定開(kāi)發(fā)一個(gè)隨機(jī)打亂圖片可以完成的拼圖游戲系統(tǒng)。1.3 開(kāi)發(fā)環(huán)境及運(yùn)行環(huán)境1.3.1 開(kāi)發(fā)環(huán)境開(kāi)發(fā)這款拼圖游戲需要的電腦配置如下:1Intel Pentium 4 2.0GHz,512M內(nèi)存,80G硬盤(pán)2Microsoft Windows 2000 Professional3Microsoft Visual C+ 6.04Microsoft Developer Network for Visual Studio.NET 20035Visual Assist X 10.1.1301.01.3.2 運(yùn)行環(huán)境運(yùn)行這

8、款拼圖游戲所需要的電腦配置如下:1Intel Pentium 2及以上處理器,32M以上內(nèi)存,4G以上硬盤(pán)2Microsoft Windows 9X/NT操作系統(tǒng)3. 800*600或以上的屏幕分辨率2 設(shè)計(jì)要求2.1 基本要求打開(kāi)任意一個(gè)圖片,隨機(jī)打亂圖片,然后可以利用鼠標(biāo)拖動(dòng)空缺模塊附近的模塊與空缺模塊進(jìn)行交換,直到拼合出原來(lái)圖像,具體要求如下:1. 可以打開(kāi)并顯示Jpg,bmp,gif等任意格式圖片2. 游戲開(kāi)始之后,可以隨機(jī)打亂圖片3 用戶(hù)可以拖動(dòng)模塊進(jìn)行交換,直到拼合出原圖像4 系統(tǒng)能夠自動(dòng)檢查到用戶(hù)拼合出原圖像并提示用戶(hù)2.2 創(chuàng)新要求在基本要求達(dá)到后,進(jìn)行創(chuàng)新設(shè)計(jì),創(chuàng)新方向提示如

9、下:1實(shí)現(xiàn)每次打亂圖片都可以完成2可以提供原圖像以供參考,并且加入邊框3添加用戶(hù)拼合出原圖像的步數(shù)3 方案設(shè)計(jì)3.1 設(shè)計(jì)原理這款拼圖游戲是以對(duì)話框的形式顯現(xiàn)出來(lái),詳細(xì)設(shè)計(jì)步驟如下:1. 通過(guò)拼圖邊框的繪制及控件的添加來(lái)實(shí)現(xiàn)對(duì)話框的布局設(shè)置2. 將拼圖邊框劃分成九個(gè)小格,每個(gè)小格分別用08來(lái)標(biāo)識(shí),通過(guò)轉(zhuǎn)換設(shè)備環(huán)境內(nèi)存的圖片數(shù)據(jù)劃分成9份分別顯示到這九個(gè)小格子里,其中標(biāo)識(shí)為8的小格不顯示圖片3. 構(gòu)建函數(shù)實(shí)現(xiàn)小圖片間的隨機(jī)打亂,打亂過(guò)程確保可以完成拼圖4. 通過(guò)消息映射來(lái)實(shí)現(xiàn)鼠標(biāo)左鍵來(lái)控制格子的移動(dòng)5. 通過(guò)圖片的標(biāo)識(shí)數(shù)字與08比較,如果都一樣則完成拼圖,否則繼續(xù)拼圖設(shè)計(jì)效果如圖所示:75628

10、3410 圖a 開(kāi)始隨機(jī)打亂標(biāo)示數(shù) 圖b開(kāi)始界面123456780 圖c 完成標(biāo)示數(shù) 圖d完成界面3.2 設(shè)計(jì)流程圖繪制邊框加載圖片隨機(jī)打亂圖片拼圖移動(dòng)步數(shù)加一判斷是否與原圖一樣完成拼圖結(jié)束開(kāi)始YN圖1設(shè)計(jì)流程圖4 系統(tǒng)開(kāi)發(fā)工具和技術(shù)4.1 Visual C+的工作環(huán)境如果安裝了Visual C+ 6.0,用鼠標(biāo)單擊“開(kāi)始”,在“程序”組中選擇“Microsoft Visual C+ 6.0”工作組,在“Microsoft Visual 6.0”項(xiàng)上雙擊,即進(jìn)入Visual C+6.0的集成環(huán)境。在這一集成環(huán)境中,最重要的是工程(Project)的概念?!肮こ獭笔窍嚓P(guān)源文件的集合。包括源文件、

11、頭文件及資源定義文件。Visual平臺(tái)是自動(dòng)化很高的編譯系統(tǒng),它能自動(dòng)處理源文件間的關(guān)系,利用其內(nèi)在推理規(guī)則來(lái)激活編譯器、連接器和資源編譯器,最后生成可執(zhí)行文件?!?】圖2 Visual C+集成環(huán)境界面4.2 位圖顯示CBitmap類(lèi)封裝了Windows的GDI位圖操作所需的大部分函數(shù)。其中,LoadBitmap是位圖的初始化函數(shù),其函數(shù)原型如下:BOOL LoadBitmap(LPCTSTR lpszResourceName);BOOL LoadBitmap(UINT nIDResource);由于位圖不能直接顯示在實(shí)際設(shè)備中,因此對(duì)于GDI位圖的顯示則必須遵循下列步驟:【2】 1. 調(diào)用

12、CBitmap類(lèi)的CreateBitmap、CreateCompatibleBitmap以及CreateBitmapIndirect函數(shù)創(chuàng)建一個(gè)適當(dāng)?shù)奈粓D對(duì)象。2. 調(diào)用CDC:CreateCompatibleDC函數(shù)創(chuàng)建一個(gè)內(nèi)存設(shè)備環(huán)境,以便位圖在內(nèi)存中保存下來(lái),并與指定設(shè)備(窗口設(shè)備)環(huán)境相兼容。3. 調(diào)用CDC:SelectObject函數(shù)將位圖對(duì)象選入內(nèi)存設(shè)備環(huán)境中。4. 調(diào)用CDC:BitBlt或CDC:StretchBlt函數(shù)將位圖復(fù)制到實(shí)際設(shè)備環(huán)境中。4.3 消息映射過(guò)程例如,若向CSCPortTestView中添加OnInitalUpdate的消息映射,則可按下列步驟進(jìn)行:【3

13、】1. 按Ctrl+W快捷鍵打開(kāi)“MFC ClassWizard”對(duì)話框。2. 在Class name 組合框中,將類(lèi)名選定為CSCPortTestView。此時(shí),Object IDs和Messages列表內(nèi)容會(huì)相應(yīng)地改變。3. 在Object IDs列表框中選定CSCPortTestView,而在Messages列表中選定OnInitalUpdate消息。4. 雙擊Messages列表中的OnInitalUpdate消息或單擊“Add Function”按鈕,都會(huì)在CSCPortTestView類(lèi)中添加該消息的映射函數(shù)OnInitalUpdate,同時(shí)在Member functions列表中

14、顯示這一消息映射函數(shù)和被映射的消息,如圖所示:圖3消息映射添加5.單擊“Edit Code”按鈕后,“ClassWizard”對(duì)話框退出,并轉(zhuǎn)向文檔窗口,定位到OnInitalUpdate函數(shù)源代碼處。6.添加代碼。7.這樣就完成了一個(gè)消息映射過(guò)程。5 九宮格拼圖游戲設(shè)計(jì)5.1 九宮格界面設(shè)計(jì)1. 對(duì)話框的創(chuàng)建對(duì)話框編輯器最初打開(kāi)時(shí),控件工具欄是隨之出現(xiàn)的,利用此工具欄中的各個(gè)按鈕可以順利完成控件的添加。在對(duì)話框中添加一個(gè)控件的方法有下列幾種:【2】1.1 在控件工具欄中單擊某控件,此時(shí)的鼠標(biāo)箭頭在對(duì)話框內(nèi)變成“十”字形狀;在對(duì)話框指定位置單擊鼠標(biāo)左鍵,則此控件被添加到對(duì)話框的相應(yīng)位置,再拖動(dòng)

15、剛添加控件的選擇框可改變其大小和位置。1.2 在控件工具欄中單擊某按鈕,此時(shí)的鼠標(biāo)箭頭對(duì)話框內(nèi)變成“十”字形狀;在指定位置處單擊鼠標(biāo)左鍵不放,拖動(dòng)鼠標(biāo)至相應(yīng)位置,釋放鼠標(biāo)鍵。1.3 用鼠標(biāo)左鍵單擊控件工具欄中的某個(gè)控件,并按住鼠標(biāo)左鍵不放;在拖動(dòng)鼠標(biāo)到對(duì)話框的指定位置的過(guò)程中,用戶(hù)會(huì)看到一個(gè)虛線框,下面帶有改控件的標(biāo)記;釋放鼠標(biāo)左鍵,新添加的控件立即出現(xiàn)在對(duì)話框中。2. 拼圖邊框的創(chuàng)建對(duì)話框創(chuàng)建之后,設(shè)計(jì)劃分為九個(gè)小格的邊框,代碼如下:【5】 Void CMyDlg:Show(CDC * dc)CDC tdc;CBitmap bmp, *obmp; 圖e 控件bmp.LoadBitmap(ID

16、B_BG);/調(diào)入位圖資源tdc.CreateCompatibleDC(dc);/定義并創(chuàng)建一個(gè)內(nèi)存設(shè)備環(huán)境obmp = tdc.SelectObject(&bmp);/將位圖調(diào)入內(nèi)存設(shè)備環(huán)境中CDC bmpdc, picdc; bmpdc.CreateCompatibleDC(dc);picdc.CreateCompatibleDC(dc);CBitmap bbmp, * obbmp;CBitmap pbmp, * opbmp;bbmp.CreateCompatibleBitmap(dc, 360, 360);pbmp.CreateCompatibleBitmap(dc, (360/size

17、), (360/size);obbmp = bmpdc.SelectObject(&bbmp);opbmp = picdc.SelectObject(&pbmp);pic.Render(&bmpdc, CRect(0, 0, 360, 360);/讀取IDB_BG圖像文件分為九格int i;if(border)/畫(huà)邊框CPen pen, * open;pen.CreatePen(PS_SOLID, 1, RGB(96, 96, 96);open = bmpdc.SelectObject(&pen);for(i = 0; i size; i+)bmpdc.MoveTo(0, (360/size)

18、*(i+1)-1);bmpdc.LineTo(359, (360/size)*(i+1)-1);bmpdc.MoveTo(360/size)*(i+1)-1, 0);bmpdc.LineTo(360/size)*(i+1)-1, 359);bmpdc.SelectObject(open);pen.DeleteObject();pen.CreatePen(PS_SOLID, 1, RGB(240, 240, 240);open = bmpdc.SelectObject(&pen);for(i = 0; i size; i+)bmpdc.MoveTo(0, (360/size)*i);bmpdc.

19、LineTo(359, (360/size)*i);bmpdc.MoveTo(360/size)*i, 0);bmpdc.LineTo(360/size)*i, 359);bmpdc.SelectObject(open);obmp = tdc.SelectObject(&bmp); for(i = 0; i size; i+)for(int j = 0; j BitBlt(10, 10, 364, 364, &tdc, 0, 0, SRCCOPY); /將位圖復(fù)制到設(shè)備環(huán)境中編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:1、 加載IDB_BG位圖選入內(nèi)存設(shè)備環(huán)境中2、 將位圖IDB_BG復(fù)制到實(shí)際的設(shè)備

20、環(huán)境中3、 選中Board,規(guī)劃出九宮格邊框4、 將位圖劃分成9份分別復(fù)制到實(shí)際的設(shè)備環(huán)境中,最后一格為空格3. 對(duì)話框初始顯示CMyDlg:CMyDlg(CWnd* pParent /*=NULL*/): CDialog(CMyDlg:IDD, pParent)/AFX_DATA_INIT(CMyDlg)/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);begin = TRUE;st

21、ep = 0;pic.Load(IDR_PIC_VIEW);size = 3;border = TRUE;編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:構(gòu)建函數(shù)實(shí)現(xiàn)九宮格對(duì)話框的初始顯示,包含了對(duì)話框的圖標(biāo)、3*3默認(rèn)模式、圖片的加載、step置0等。 5.2 MFC中圖像的顯示MFC中實(shí)現(xiàn)圖片的顯示需要先加載圖片資源,然后通過(guò)設(shè)備環(huán)境的轉(zhuǎn)換來(lái)實(shí)現(xiàn)。編程步驟如下:1. 啟動(dòng)Visual C+6.0,生成一個(gè)基于對(duì)話框結(jié)構(gòu)的應(yīng)用程序,對(duì)話框的基類(lèi)為CMyDlg,同時(shí)將該程序命名為九宮格拼圖;2 在應(yīng)用程序的項(xiàng)目代碼中添加CPicture類(lèi);3 使用資源編輯器向程序中添加Jepg等格式的圖像資源;4 添加代

22、碼,編譯運(yùn)行程序。程序代碼class CPicture public:CPicture(); /構(gòu)造函數(shù)CPicture(); /虛構(gòu)函數(shù)BOOL Load(UINT nIDRes); /從資源中加載,尋找“IMAGE”類(lèi)型BOOL Load(LPCTSTR pszPathName); /從路徑名中加載BOOL Load(CFile& file); /從File文件中加載BOOL Load(CArchive& ar); /從創(chuàng)建文檔的流中加載BOOL Load(IStream* pstm); /從流中加載(IStream)BOOL Render(CDC* pDC, CRect rc=CRect

23、(0,0,0,0),LPCRECT prcMFBounds=NULL) const; /轉(zhuǎn)換設(shè)備環(huán)境,為IPicture而將其轉(zhuǎn)換為HIMETRICCSize GetImageSize(CDC* pDC=NULL) const; /獲得像素形式的圖像尺寸將圖片放在資源管理器中的“IMAGE”類(lèi)型中,然后在成員函數(shù)BOOL Load(UINT nIDRes)添加代碼使得存儲(chǔ)器可以加載資源。BOOL CPicture:Load(UINT nIDRes)HINSTANCE hInst = AfxGetResourceHandle();HRSRC hRsrc = :FindResource(hInst

24、,MAKEINTRESOURCE(nIDRes),IMAGE); /從資源文件中加載名為“IMAGE”的資源if (!hRsrc)return FALSE;DWORD len = SizeofResource(hInst, hRsrc); BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc); /將資源加載進(jìn)存儲(chǔ)器 if (!lpRsrc)return FALSE;CMemFile file(lpRsrc, len); /創(chuàng)建儲(chǔ)存文件并加載它BOOL bRet = Load(file);FreeResource(hRsrc);GlobalFree(l

25、pRsrc);return bRet;由于加載的圖片無(wú)法在MFC中正常顯示,所以要通過(guò)轉(zhuǎn)換設(shè)備環(huán)境才可以顯示。MFC將設(shè)備描述表(DC)和圖形設(shè)備接口封裝在一起,建立了設(shè)備描述類(lèi)CDC類(lèi),CDC類(lèi)是直接從CObject派生處理,CDC類(lèi)主要功能是定義設(shè)備描述表對(duì)象,提供在顯示器上繪圖和打印機(jī)上圖形輸出的方法。CDC類(lèi)提供的方法可以實(shí)現(xiàn)GDI的所有圖形輸出:包括控制著色和調(diào)色板、處理坐標(biāo)映射和裝換、繪制多邊形和區(qū)域、使用不同字體繪制正文、處理元文件等等。BOOL CPicture:Render(CDC* pDC, CRect rc, LPCRECT prcMFBounds) const /轉(zhuǎn)換設(shè)

26、備環(huán)境ASSERT(pDC); if (rc.IsRectNull() CSize sz = GetImageSize(pDC);rc.right = sz.cx;rc.bottom = sz.cy;long hmWidth,hmHeight; GetHIMETRICSize(hmWidth, hmHeight);m_spIPicture-Render(*pDC, rc.left, rc.top, rc.Width(), rc.Height(),0, hmHeight, hmWidth, -hmHeight, prcMFBounds); return TRUE;CSize CPicture:G

27、etImageSize(CDC* pDC) const /獲得像素形式的圖像尺寸if (!m_spIPicture)return CSize(0,0);LONG hmWidth, hmHeight; m_spIPicture-get_Width(&hmWidth);m_spIPicture-get_Height(&hmHeight);CSize sz(hmWidth,hmHeight);if (pDC=NULL) CWindowDC dc(NULL);dc.HIMETRICtoDP(&sz); else pDC-HIMETRICtoDP(&sz);return sz;通過(guò)這樣的設(shè)備環(huán)境轉(zhuǎn)換,就

28、可以實(shí)現(xiàn)在MFC應(yīng)用程序中顯示JPG/GIF圖像文件。5.3 圖片處理與游戲規(guī)則設(shè)計(jì)一些成員函數(shù)來(lái)實(shí)現(xiàn)圖片的操作處理,例如圖片的獲取,打亂與移動(dòng)等Cspell成員函數(shù)CSpellCSpellReCreateGetPicMoveInit圖4 CSpell類(lèi)成員函數(shù)關(guān)系其中成員函數(shù)CSpell負(fù)責(zé)構(gòu)造N*N的框架,包含了一個(gè)空缺模塊blank;CSpell負(fù)責(zé)刪除該框架;ReCreate負(fù)責(zé)重新構(gòu)造框架;GetPic負(fù)責(zé)劃分圖片到該框架中;Move負(fù)責(zé)拼圖相關(guān)操作;Init負(fù)責(zé)隨機(jī)打亂框架。 CSpell:CSpell(int w, int h, int bx, int by)width = w;

29、height = h;bx = (bx=w)?(w-1):(bx=h)?(h-1):(by0 ? 0 : by);blank = by * w + bx;map = new intw*h;for(int i = 0; i w*h; i+)mapi = i;Init(); 編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:構(gòu)造函數(shù)負(fù)責(zé)創(chuàng)建W*H的內(nèi)存數(shù)據(jù)并顯示初始九宮圖(其中帶有一個(gè)空模板),并用08標(biāo)記各模板。CSpell:CSpell()delete map;編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:虛構(gòu)函數(shù)負(fù)責(zé)刪除申請(qǐng)的內(nèi)存數(shù)據(jù)。int CSpell:GetPic(int w, int h)if(w = wi

30、dth | h = height)return -1;return maph*width + w;編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:當(dāng)用戶(hù)點(diǎn)擊獲取到某個(gè)位置的圖片時(shí),返回標(biāo)記模板的數(shù)字,否則返回-1。int CSpell:Move(int w, int h)if(w = width | h = height)return -10;if(blank = maph*width+w)return -1;if(blank = GetPic(w-1, h)int t = maph*width+w;maph*width+w = maph*width+w-1;maph*width+w-1 = t;else

31、 if(blank = GetPic(w+1, h)int t = maph*width+w;maph*width+w = maph*width+w+1;maph*width+w+1 = t;else if(blank = GetPic(w, h-1)int t = maph*width+w;maph*width+w = map(h-1)*width+w;map(h-1)*width+w = t;else if(blank = GetPic(w, h+1)int t = maph*width+w;maph*width+w = map(h+1)*width+w;map(h+1)*width+w

32、= t;elsereturn -1;for(int i = 0; i LENGTH; i+)if(i != mapi)return 0;return 1;編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:1. 沒(méi)有選中的模板無(wú)法移動(dòng)2. 空模板無(wú)法移動(dòng)3. 模板旁(上下左右)有空模板可以進(jìn)行移動(dòng)4. 標(biāo)記模板的數(shù)字如果和08一一對(duì)應(yīng)時(shí)無(wú)法繼續(xù)移動(dòng),否則可以繼續(xù)移動(dòng)。void CSpell:Init()srand(time(NULL);int a, b, t;int i = 0, d = 1;while(i+ LENGTH | d = 0)/ 交換至少單位數(shù)量次doa = rand()%(LENGTH);b

33、= rand()%(LENGTH);while(a = b);t = mapa;mapa = mapb;mapb = t;/ 計(jì)算距離,必須要模為1有解if(blank = mapa | blank = mapb)int w = a%width - b%width + 1;int h = a/width - b/width;w = w0?-w:w;h = h0?-h:h;d = (d+w+h)%2;elsed = !d;編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:Init()函數(shù)負(fù)責(zé)圖片的打亂,9個(gè)模板其中選中2個(gè)進(jìn)行交換,如果選中的2個(gè)模板其中有一個(gè)是空模板的話,則計(jì)算空模板與它交換的模板之間的距離

34、(x上的差值dx與y上的差值dy)如果(dx+dy+1)%2=0的話則有解,否則無(wú)解,無(wú)法拼合出原圖。隨機(jī)打亂流程圖:構(gòu)建隨機(jī)因子time初始化i和dIGetMenu();pMenu-CheckMenuItem(ID_MENU_3, MF_CHECKED);pMenu-CheckMenuItem(ID_MENU_4, MF_UNCHECKED);spell.ReCreate(3, 3, 2, 2);size = 3;OnMenuBegin();編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:當(dāng)用戶(hù)選擇菜單3*3時(shí),確保3*3被選中,4*4不被選中,創(chuàng)建3*3的九宮圖。之后調(diào)用OnMenuBegin()函數(shù)

35、,實(shí)行打亂等操作。void CMyDlg:OnMenuOpen() / 打開(kāi)文件CFileDialog file(true, NULL, NULL, OFN_OVERWRITEPROMPT, 圖片文件|*.bmp;*.jpg;*.gif|*.jpg|*.jpg|*.bmp|*.bmp|*.gif|*.gif|, NULL);if(file.DoModal()=IDOK)pic.Load(file.GetPathName();Invalidate(FALSE);編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:實(shí)行資源管理器外的圖片調(diào)用,完成了用戶(hù)隨意選擇圖片玩的功能。5.5 游戲結(jié)束標(biāo)志void CMyDl

36、g:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultif(begin)if(point.x 12 & point.x 12 & point.y 372)int w = (point.x - 12) / (360/size);int h = (point.y - 12) / (360/size);int r = spell.Move(w, h);Invalidate(FALSE);if(0 = r)step +;CString str;st

37、r.Format(%d, step);SetDlgItemText(IDC_STEP, str);if(1 = r)MessageBox(完成!);begin = FALSE;CDialog:OnLButtonDown(nFlags, point);游戲結(jié)束標(biāo)志流程圖:判斷鼠標(biāo)是否點(diǎn)在分割模塊內(nèi)移動(dòng)鼠標(biāo)左鍵點(diǎn)到的那個(gè)模塊判斷標(biāo)志r是否大于等于0步數(shù)加一文本顯示Step判斷R是否等于1提示完成N開(kāi)始結(jié)束NYYYN圖6結(jié)束標(biāo)志流程圖編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:這里定義了一個(gè)循環(huán),游戲開(kāi)始后,可以移動(dòng)模板,如果判斷游戲結(jié)束的標(biāo)志r不等于1的話則可以繼續(xù)玩,同時(shí)標(biāo)志用戶(hù)移動(dòng)次數(shù)的step逐次增

38、加1;如果r=1的話則彈出一個(gè)對(duì)話框顯示用戶(hù)完成拼圖游戲。6 編譯運(yùn)行并測(cè)試編譯并運(yùn)行后,出現(xiàn)“九宮格拼圖”。如圖7所示:圖7開(kāi)始界面完成拼圖后,彈出”完成”對(duì)話框。 如圖8所示:圖8完成界面7總結(jié)經(jīng)過(guò)這幾個(gè)月的開(kāi)發(fā)研究,雖然曾經(jīng)出現(xiàn)了很多的編輯錯(cuò)誤,但是最終還是完成了此次的論文,從中學(xué)到了許多的知識(shí)。例如VC的MFC窗口編程設(shè)計(jì)、圖片的顯示等方面,基本上滿足了設(shè)計(jì)所提出的要求,能夠編輯出九宮格拼圖游戲,解決了圖片固定打亂的缺點(diǎn),但在一些方面上還存在著不足之處,例如,拼完的圖片總是缺一塊,給人的感覺(jué)就不是很完整??赡苁亲约旱哪芰Σ蛔惆桑源宋疫€應(yīng)該加強(qiáng)自己的窗口編程設(shè)計(jì)能力,使其變得完善。參考

39、文獻(xiàn)1 張榮梅,梁曉林.Visual C+實(shí)用教程M.冶金工業(yè)出版社,2004.2 鄭阿奇.Visual C+ 實(shí)用教程(第2版)M.電子工業(yè)出版社,2003.3 孫鑫 余安萍.VC+深入詳解M.電子工業(yè)出版社,2006.4 陳清華等.Visual C+課程設(shè)計(jì)案例精選與編程指導(dǎo)C.東南大學(xué)出版社,2004.5 嚴(yán)華峰等.VISUAL C+課程設(shè)計(jì)案例精編(第二版)A.中國(guó)水利水電出版社 ,2004.6 周鳴揚(yáng).VISUAL C+界面編程技術(shù)M.北京希望電子,2003.7 榮欽科技.Visual C+游戲編程基礎(chǔ)M.電子工業(yè)出版社,2004.8 羅偉堅(jiān).Visual C+經(jīng)典游戲程序設(shè)計(jì)Z.人

40、民郵電出版社,2006.9 榮欽科技.VISUAL C+游戲設(shè)計(jì)M.北京科海電子出版社,2005.10 MSDN for Visual Studio 6.0.11 設(shè)計(jì)模式可復(fù)用面向?qū)ο筌浖幕A(chǔ)A,Erich Gamma/Richard Helm/Ralph Johnson/John Vlissides著,李英軍/蔡敏/劉建東 等譯.機(jī)械工業(yè)出版社.12 深入淺出MFC(第2版)EB/OL.侯俊杰著.華中科技大學(xué)出版社.A Beginner s Guide to Pointers,Andrew Peace 13 C+編程思想J.Bruce Eckel著.劉宗田/邢大紅/孫慧杰 等譯.機(jī)械工業(yè)

41、出版社.14 21天學(xué)通C+M.Jesse Liberty著.康博創(chuàng)作室譯.人民郵電出版社.15 Visual C+實(shí)用教材(第3版)M. 丁有和/鄭進(jìn)/周怡君編著.16 J.Semke,J.Mahdavi,and M.Mathis,Automatic TCP Buffer TunungJ,in proceedings of ACM SIGCOMM98 pp.315-323,august 1998.17 Srinivasan Keshav,a Control-Theoretic Approach to FlowControlJ,In Proceedings of ACM SIGCOMM,199

42、1.致謝在這次畢業(yè)論文中同學(xué)之間互相幫助,對(duì)于即將面臨畢業(yè)的我們來(lái)說(shuō)是一次很有意義的經(jīng)歷,大學(xué)四年都一起走過(guò)了,在最后我們可以聚在一起討論學(xué)習(xí),研究專(zhuān)業(yè)問(wèn)題,進(jìn)而更好的了解我們每個(gè)人的興趣之所在,明確我們的人生理想,進(jìn)而在今后的生活和工作中更好的發(fā)揮自己的優(yōu)勢(shì),學(xué)好自己的專(zhuān)業(yè),成為一個(gè)對(duì)于社會(huì)有用的人,感謝我的同學(xué)們,在我絕望的時(shí)候給了我希望,沒(méi)有他們,論文就不會(huì)有這么好,甚至無(wú)法完成。在此更要感謝我的老師xxx,是你的細(xì)心指導(dǎo)和關(guān)懷,使我能夠順利的完成畢業(yè)論文。老師對(duì)于學(xué)生總是默默的付出,盡管很多時(shí)候我們自己并沒(méi)有特別重視論文的寫(xiě)作,沒(méi)有按時(shí)完成老師的任務(wù),但是老師還是能夠主動(dòng)的和我們聯(lián)系,告訴我們應(yīng)該怎么樣修改論文,怎么樣按要求完成論文相關(guān)的工作。老師的檢查總是很仔細(xì)的,可以認(rèn)真的看論文的每一個(gè)細(xì)小的格式要求,認(rèn)真的讀每一個(gè)同學(xué)的論文,然后提出最中肯的意見(jiàn),這是很難得的。

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!