歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類(lèi) > DOC文檔下載  

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

  • 資源ID:28052522       資源大小:1.36MB        全文頁(yè)數(shù):33頁(yè)
  • 資源格式: DOC        下載積分:15積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機(jī):
溫馨提示:
用戶(hù)名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢(xún)和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類(lèi)文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

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

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é)所有。特此聲明。聲明人(畢業(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 development 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 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.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ì)話(huà)框菜單編輯175.4.1 菜單編輯175.4.2菜單命令的消息映射175.5 游戲結(jié)束標(biāo)志196 編譯運(yùn)行并測(cè)試217總結(jié)22參考文獻(xiàn)23致謝24281 引言1.1 拼圖游戲介紹拼圖游戲是廣受歡迎的一種智力游戲,它的變化多端,難度不一,讓人百玩不厭。個(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)題就是很多軟件在圖片打亂上面處理的比較模糊,也有采用固定的打亂方法;而且有時(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)行這款拼圖游戲所需要的電腦配置如下: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)新方向提示如下:1實(shí)現(xiàn)每次打亂圖片都可以完成2可以提供原圖像以供參考,并且加入邊框3添加用戶(hù)拼合出原圖像的步數(shù)3 方案設(shè)計(jì)3.1 設(shè)計(jì)原理這款拼圖游戲是以對(duì)話(huà)框的形式顯現(xiàn)出來(lái),詳細(xì)設(shè)計(jì)步驟如下:1. 通過(guò)拼圖邊框的繪制及控件的添加來(lái)實(shí)現(xiàn)對(duì)話(huà)框的布局設(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ò)程確??梢酝瓿善磮D4. 通過(guò)消息映射來(lái)實(shí)現(xiàn)鼠標(biāo)左鍵來(lái)控制格子的移動(dòng)5. 通過(guò)圖片的標(biāo)識(shí)數(shù)字與08比較,如果都一樣則完成拼圖,否則繼續(xù)拼圖設(shè)計(jì)效果如圖所示:756283410 圖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)的概念。“工程”是相關(guān)源文件的集合。包括源文件、頭文件及資源定義文件。Visual平臺(tái)是自動(dòng)化很高的編譯系統(tǒng),它能自動(dòng)處理源文件間的關(guān)系,利用其內(nèi)在推理規(guī)則來(lái)激活編譯器、連接器和資源編譯器,最后生成可執(zhí)行文件。【1】圖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)用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】1. 按Ctrl+W快捷鍵打開(kāi)“MFC ClassWizard”對(duì)話(huà)框。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列表中顯示這一消息映射函數(shù)和被映射的消息,如圖所示:圖3消息映射添加5.單擊“Edit Code”按鈕后,“ClassWizard”對(duì)話(huà)框退出,并轉(zhuǎn)向文檔窗口,定位到OnInitalUpdate函數(shù)源代碼處。6.添加代碼。7.這樣就完成了一個(gè)消息映射過(guò)程。5 九宮格拼圖游戲設(shè)計(jì)5.1 九宮格界面設(shè)計(jì)1. 對(duì)話(huà)框的創(chuàng)建對(duì)話(huà)框編輯器最初打開(kāi)時(shí),控件工具欄是隨之出現(xiàn)的,利用此工具欄中的各個(gè)按鈕可以順利完成控件的添加。在對(duì)話(huà)框中添加一個(gè)控件的方法有下列幾種:【2】1.1 在控件工具欄中單擊某控件,此時(shí)的鼠標(biāo)箭頭在對(duì)話(huà)框內(nèi)變成“十”字形狀;在對(duì)話(huà)框指定位置單擊鼠標(biāo)左鍵,則此控件被添加到對(duì)話(huà)框的相應(yīng)位置,再拖動(dòng)剛添加控件的選擇框可改變其大小和位置。1.2 在控件工具欄中單擊某按鈕,此時(shí)的鼠標(biāo)箭頭對(duì)話(huà)框內(nèi)變成“十”字形狀;在指定位置處單擊鼠標(biāo)左鍵不放,拖動(dòng)鼠標(biāo)至相應(yīng)位置,釋放鼠標(biāo)鍵。1.3 用鼠標(biāo)左鍵單擊控件工具欄中的某個(gè)控件,并按住鼠標(biāo)左鍵不放;在拖動(dòng)鼠標(biāo)到對(duì)話(huà)框的指定位置的過(guò)程中,用戶(hù)會(huì)看到一個(gè)虛線(xiàn)框,下面帶有改控件的標(biāo)記;釋放鼠標(biāo)左鍵,新添加的控件立即出現(xiàn)在對(duì)話(huà)框中。2. 拼圖邊框的創(chuàng)建對(duì)話(huà)框創(chuàng)建之后,設(shè)計(jì)劃分為九個(gè)小格的邊框,代碼如下:【5】 Void CMyDlg:Show(CDC * dc)CDC tdc;CBitmap bmp, *obmp; 圖e 控件bmp.LoadBitmap(IDB_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), (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)*(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.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 < size; j+)int n = spell.GetPic(i, j);if(n != size*size-1)picdc.BitBlt(-(n%size)*(360/size), -(n/size)*(360/size), 360, 360, &bmpdc, 0, 0, SRCCOPY);tdc.BitBlt(360/size)*i+2,(360/size)*j+2, (360/size), (360/size), &picdc, 0, 0, SRCCOPY); dc->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è)備環(huán)境中3、 選中Board,規(guī)劃出九宮格邊框4、 將位圖劃分成9份分別復(fù)制到實(shí)際的設(shè)備環(huán)境中,最后一格為空格3. 對(duì)話(huà)框初始顯示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;step = 0;pic.Load(IDR_PIC_VIEW);size = 3;border = TRUE;編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:構(gòu)建函數(shù)實(shí)現(xiàn)九宮格對(duì)話(huà)框的初始顯示,包含了對(duì)話(huà)框的圖標(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ì)話(huà)框結(jié)構(gòu)的應(yīng)用程序,對(duì)話(huà)框的基類(lèi)為CMyDlg,同時(shí)將該程序命名為"九宮格拼圖";2 在應(yīng)用程序的項(xiàng)目代碼中添加"CPicture"類(lèi);3 使用資源編輯器向程序中添加Jepg等格式的圖像資源;4 添加代碼,編譯運(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(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,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(lpRsrc);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è)備環(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:GetImageSize(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)換,就可以實(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;height = h;bx = (bx>=w)?(w-1):(bx<0 ? 0 : bx);by = (by>=h)?(h-1):(by<0 ? 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 < 0 | w >= width | h < 0 | 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 < 0 | w >= width | h < 0 | 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 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 = 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 = 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 = w<0?-w:w;h = h<0?-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è)是空模板的話(huà),則計(jì)算空模板與它交換的模板之間的距離(x上的差值dx與y上的差值dy)如果(dx+dy+1)%2=0的話(huà)則有解,否則無(wú)解,無(wú)法拼合出原圖。隨機(jī)打亂流程圖:構(gòu)建隨機(jī)因子time初始化i和dI<length|d=0取2個(gè)小于length的隨機(jī)數(shù)判斷2隨機(jī)數(shù)是否相等隨機(jī)數(shù)標(biāo)志的模塊進(jìn)行交換如果標(biāo)志的其中一個(gè)模塊為空模塊w=a%width- b%width + 1h=a/width- b/widthw與h分別取非負(fù)整數(shù)d = (d+w+h)%2D=!d開(kāi)始結(jié)束NYYNYN 圖5隨機(jī)打亂流程圖5.4 對(duì)話(huà)框菜單編輯5.4.1 菜單編輯對(duì)話(huà)框菜單編輯步驟如下:1. 單擊資源管理中的菜單Menu文件夾前的”+”號(hào),雙擊菜單編輯資源。2. 在頂層菜單的第一項(xiàng),Visual C+為用戶(hù)留出了一個(gè)空位置,用于輸入新的頂層菜單項(xiàng)。在菜單的空位置上雙擊鼠標(biāo)左鍵,出現(xiàn)菜單欄的屬性對(duì)話(huà)框,在標(biāo)題欄中輸入” 游戲(&G)”并且設(shè)置頂層菜單項(xiàng)的默認(rèn)屬性定義為“彈出” (下拉)菜單。3. 鼠標(biāo)單擊“游戲”下拉子菜單的空位置,出現(xiàn)屬性對(duì)話(huà)框,在標(biāo)題欄中輸入“3*3(&3)”,依此建立子菜單“4*4(&4)”、“重新開(kāi)始(&B)”和“退出(&E)”。4. 依此建立下拉菜單“圖片(&P)”和其子菜單“選擇圖片(&S)”及“拼塊邊框(&B)”。 5.4.2菜單命令的消息映射菜單欄、工具欄的按鈕以及快捷鍵等用戶(hù)對(duì)象都能產(chǎn)生WM_COMMAND命令消息。命令消息能夠被文檔類(lèi)、應(yīng)用類(lèi)、窗口類(lèi)以及視圖類(lèi)等多種對(duì)象接收、處理,且用戶(hù)可以用ClassWizard對(duì)命令消息進(jìn)行映射。建立映射步驟如下:1. 選擇“查看”“建立類(lèi)向?qū)А辈藛蚊罨虬碈trl+W快捷鍵,則出現(xiàn)MFC ClassWizard對(duì)話(huà)框,并自動(dòng)切換到Message Maps頁(yè)面。從“Class name”列表中選擇CMyDlg,在IDS列表中選擇ID_MENU_BEGIN,然后在Messages框中選擇COMMAND消息。2. 單擊“Add Function”按鈕或雙擊COMMAND消息,出現(xiàn)“Add Member Function”對(duì)話(huà)框以輸入成員函數(shù)的名稱(chēng)。系統(tǒng)默認(rèn)的函數(shù)名為OnMenuBegin。該函數(shù)是對(duì)菜單項(xiàng)ID_MENU_BEGIN的映射。也就是說(shuō),當(dāng)應(yīng)用程序運(yùn)行后,用戶(hù)選擇“測(cè)試”“對(duì)話(huà)框”菜單時(shí),該函數(shù)OnMenuBegin被調(diào)用,執(zhí)行函數(shù)中的代碼。3. 單擊“OK”按鈕,在ClassWizard的“Member function”列表中將列出新增加的成員函數(shù)。懸著此函數(shù),單擊“Edit Code”按鈕,在此成員函數(shù)中添加下列代碼:void CMyDlg:OnMenuBegin() spell.Init();step = 0;SetDlgItemText(IDC_STEP, "0");begin = TRUE;Invalidate(FALSE);這樣就完成了菜單命令(重新開(kāi)始)的消息映射,依此方法完成其它菜單命令的消息映射。通過(guò)消息映射就完成了游戲開(kāi)始的功能,其中包含了圖片的隨機(jī)打亂、步數(shù)置為0并顯示在對(duì)話(huà)框中、可以開(kāi)始玩的標(biāo)志(begin=TRUE)。void CMyDlg:OnMenu3() if(3 != size)CMenu* pMenu = this->GetMenu();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ù),實(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 CMyDlg:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultif(begin)if(point.x > 12 && point.x < 372 && point.y > 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;str.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的話(huà)則可以繼續(xù)玩,同時(shí)標(biāo)志用戶(hù)移動(dòng)次數(shù)的step逐次增加1;如果r=1的話(huà)則彈出一個(gè)對(duì)話(huà)框顯示用戶(hù)完成拼圖游戲。6 編譯運(yùn)行并測(cè)試編譯并運(yùn)行后,出現(xiàn)“九宮格拼圖”。如圖7所示:圖7開(kāi)始界面完成拼圖后,彈出”完成”對(duì)話(huà)框。 如圖8所示:圖8完成界面7總結(jié)經(jīng)過(guò)這幾個(gè)月的開(kāi)發(fā)研究,雖然曾經(jīng)出現(xiàn)了很多的編輯錯(cuò)誤,但是最終還是完成了此次的論文,從中學(xué)到了許多的知識(shí)。例如VC的MFC窗口編程設(shè)計(jì)、圖片的顯示等方面,基本上滿(mǎn)足了設(shè)計(jì)所提出的要求,能夠編輯出九宮格拼圖游戲,解決了圖片固定打亂的缺點(diǎn),但在一些方面上還存在著不足之處,例如,拼完的圖片總是缺一塊,給人的感覺(jué)就不是很完整??赡苁亲约旱哪芰Σ蛔惆桑源宋疫€應(yīng)該加強(qiáng)自己的窗口編程設(shè)計(jì)能力,使其變得完善。參考文獻(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.人民郵電出版社,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è)出版社.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,1991.致謝在這次畢業(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),這是很難得的。

注意事項(xiàng)

本文(VC++拼圖游戲設(shè)計(jì))為本站會(huì)員(仙***)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):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),我們立即給予刪除!