![VC++拼圖游戲設(shè)計(jì)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/1/6071f2aa-a55a-42e2-b2d6-49ef4b780352/6071f2aa-a55a-42e2-b2d6-49ef4b7803521.gif)
![VC++拼圖游戲設(shè)計(jì)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/1/6071f2aa-a55a-42e2-b2d6-49ef4b780352/6071f2aa-a55a-42e2-b2d6-49ef4b7803522.gif)
![VC++拼圖游戲設(shè)計(jì)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/1/6071f2aa-a55a-42e2-b2d6-49ef4b780352/6071f2aa-a55a-42e2-b2d6-49ef4b7803523.gif)
![VC++拼圖游戲設(shè)計(jì)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/1/6071f2aa-a55a-42e2-b2d6-49ef4b780352/6071f2aa-a55a-42e2-b2d6-49ef4b7803524.gif)
![VC++拼圖游戲設(shè)計(jì)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/1/6071f2aa-a55a-42e2-b2d6-49ef4b780352/6071f2aa-a55a-42e2-b2d6-49ef4b7803525.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2011屆本科畢業(yè)生論文 題目: VC+拼圖游戲設(shè)計(jì) Title: Design of Vc+ Puzzle Game 姓 名 學(xué) 號 所在學(xué)院 專 業(yè) 指導(dǎo)教師 完成日期 聲 明本人鄭重聲明:所呈交的畢業(yè)設(shè)計(jì)(論文)是本人在指導(dǎo)教師指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。其中除加以標(biāo)注和致謝的地方,以及法律規(guī)定允許的之外,不包含其他人已經(jīng)發(fā)表或撰寫完成并以某種方式公開過的研究成果,也不包含為獲得其他教育機(jī)構(gòu)的學(xué)位或證書而作的材料。其他同志對本研究所做的任何貢獻(xiàn)均已在文中作了明確的說明并表示謝意。本畢業(yè)設(shè)計(jì)(論文)成果是本人在江西師范大學(xué)讀書期間在指導(dǎo)教師指導(dǎo)下取得的,成果歸江西師范大學(xué)所有。特
2、此聲明。聲明人(畢業(yè)設(shè)計(jì)(論文)作者)學(xué)號:聲明人(畢業(yè)設(shè)計(jì)(論文)作者)簽名:簽名日期: 年 月 日摘 要本文介紹了一個基于VC的趣味拼圖游戲開發(fā)的全過程,MFC規(guī)范的出現(xiàn)使得我們開發(fā)VC游戲成為可能,今天我們要實(shí)現(xiàn)的是一個簡單的拼圖游戲。這個拼圖游戲是一個3*3的拼圖,由9個隨機(jī)分割打亂的小圖片構(gòu)成,其中置一格為空。通過消息映射控制移動空框邊的小圖片來實(shí)現(xiàn)拼圖,從游戲前得準(zhǔn)備到主要類和設(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 開發(fā)背景11.3 開發(fā)環(huán)境及運(yùn)行環(huán)境11.
5、3.1 開發(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)開發(fā)工具和技術(shù)44.1 Visual C+的工作環(huán)境44.2 位圖顯示54.3 消息映射過程65 九宮格拼圖游戲設(shè)計(jì)75.1 九宮格界面設(shè)計(jì)75.2 MFC中圖像的顯示95.3 圖片處理與游戲規(guī)則125.4 對話框菜單編輯175.4.1 菜單編輯175.4.2菜單命令的消息映射175.5 游戲結(jié)束標(biāo)志196 編譯運(yùn)行并測試217總結(jié)22參考文獻(xiàn)23致謝24301 引言1.1 拼圖游戲介紹拼圖游戲是廣受歡迎的一種智力游戲,它的變化多端,難度不一,讓
6、人百玩不厭。個性化的拼圖,拼湊的不僅僅是一張照片,而是一個故事,一段回憶,一段溫情。每一片的單片都有它自己的位置,就像每段回憶都有它的故事,你要將它放在專屬的地方,放對了就慢慢豐富起來,放錯了就無法完整。你可以把你記憶中最深的片段,可以是你摯愛的照片,可以是你最難忘的一瞬留念,做成拼圖,在思念的季節(jié)里一一拼起,把片片散落的記憶重新組合,用指尖溫習(xí)甜蜜,把心湖里最美麗的漣漪蕩漾開來。拼圖游戲不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。它既有簡單易學(xué)的特性,為人民群眾所喜聞樂見。1.2 開發(fā)背景當(dāng)前網(wǎng)絡(luò)上流傳的拼圖游戲功能并不盡善盡美,其中最主要的問題就是很多軟件在圖片打亂上面處理
7、的比較模糊,也有采用固定的打亂方法;而且有時出現(xiàn)有一對板塊是對調(diào)的無法完成游戲,所以我決定開發(fā)一個隨機(jī)打亂圖片可以完成的拼圖游戲系統(tǒng)。1.3 開發(fā)環(huán)境及運(yùn)行環(huán)境1.3.1 開發(fā)環(huán)境開發(fā)這款拼圖游戲需要的電腦配置如下:1Intel® Pentium® 4 2.0GHz,512M內(nèi)存,80G硬盤2Microsoft® Windows 2000 Professional3Microsoft® Visual C+ 6.04Microsoft® Developer Network for Visual Studio.NET 20035Visual Ass
8、ist X 10.1.1301.01.3.2 運(yùn)行環(huán)境運(yùn)行這款拼圖游戲所需要的電腦配置如下:1Intel® Pentium® 2及以上處理器,32M以上內(nèi)存,4G以上硬盤2Microsoft® Windows 9X/NT操作系統(tǒng)3. 800*600或以上的屏幕分辨率2 設(shè)計(jì)要求2.1 基本要求打開任意一個圖片,隨機(jī)打亂圖片,然后可以利用鼠標(biāo)拖動空缺模塊附近的模塊與空缺模塊進(jìn)行交換,直到拼合出原來圖像,具體要求如下:1. 可以打開并顯示Jpg,bmp,gif等任意格式圖片2. 游戲開始之后,可以隨機(jī)打亂圖片3 用戶可以拖動模塊進(jìn)行交換,直到拼合出原圖像4 系統(tǒng)能夠自
9、動檢查到用戶拼合出原圖像并提示用戶2.2 創(chuàng)新要求在基本要求達(dá)到后,進(jìn)行創(chuàng)新設(shè)計(jì),創(chuàng)新方向提示如下:1實(shí)現(xiàn)每次打亂圖片都可以完成2可以提供原圖像以供參考,并且加入邊框3添加用戶拼合出原圖像的步數(shù)3 方案設(shè)計(jì)3.1 設(shè)計(jì)原理這款拼圖游戲是以對話框的形式顯現(xiàn)出來,詳細(xì)設(shè)計(jì)步驟如下:1. 通過拼圖邊框的繪制及控件的添加來實(shí)現(xiàn)對話框的布局設(shè)置2. 將拼圖邊框劃分成九個小格,每個小格分別用08來標(biāo)識,通過轉(zhuǎn)換設(shè)備環(huán)境內(nèi)存的圖片數(shù)據(jù)劃分成9份分別顯示到這九個小格子里,其中標(biāo)識為8的小格不顯示圖片3. 構(gòu)建函數(shù)實(shí)現(xiàn)小圖片間的隨機(jī)打亂,打亂過程確??梢酝瓿善磮D4. 通過消息映射來實(shí)現(xiàn)鼠標(biāo)左鍵來控制格子的移動5
10、. 通過圖片的標(biāo)識數(shù)字與08比較,如果都一樣則完成拼圖,否則繼續(xù)拼圖設(shè)計(jì)效果如圖所示:756283410 圖a 開始隨機(jī)打亂標(biāo)示數(shù) 圖b開始界面123456780 圖c 完成標(biāo)示數(shù) 圖d完成界面3.2 設(shè)計(jì)流程圖繪制邊框加載圖片隨機(jī)打亂圖片拼圖移動步數(shù)加一判斷是否與原圖一樣完成拼圖結(jié)束開始YN圖1設(shè)計(jì)流程圖4 系統(tǒng)開發(fā)工具和技術(shù)4.1 Visual C+的工作環(huán)境如果安裝了Visual C+ 6.0,用鼠標(biāo)單擊“開始”,在“程序”組中選擇“Microsoft Visual C+ 6.0”工作組,在“Microsoft Visual 6.0”項(xiàng)上雙擊,即進(jìn)入Visual C+6.0的集成環(huán)境。在
11、這一集成環(huán)境中,最重要的是工程(Project)的概念。“工程”是相關(guān)源文件的集合。包括源文件、頭文件及資源定義文件。Visual平臺是自動化很高的編譯系統(tǒng),它能自動處理源文件間的關(guān)系,利用其內(nèi)在推理規(guī)則來激活編譯器、連接器和資源編譯器,最后生成可執(zhí)行文件。【1】圖2 Visual C+集成環(huán)境界面4.2 位圖顯示CBitmap類封裝了Windows的GDI位圖操作所需的大部分函數(shù)。其中,LoadBitmap是位圖的初始化函數(shù),其函數(shù)原型如下:BOOL LoadBitmap(LPCTSTR lpszResourceName);BOOL LoadBitmap(UINT nIDResource);
12、由于位圖不能直接顯示在實(shí)際設(shè)備中,因此對于GDI位圖的顯示則必須遵循下列步驟:【2】 1. 調(diào)用CBitmap類的CreateBitmap、CreateCompatibleBitmap以及CreateBitmapIndirect函數(shù)創(chuàng)建一個適當(dāng)?shù)奈粓D對象。2. 調(diào)用CDC:CreateCompatibleDC函數(shù)創(chuàng)建一個內(nèi)存設(shè)備環(huán)境,以便位圖在內(nèi)存中保存下來,并與指定設(shè)備(窗口設(shè)備)環(huán)境相兼容。3. 調(diào)用CDC:SelectObject函數(shù)將位圖對象選入內(nèi)存設(shè)備環(huán)境中。4. 調(diào)用CDC:BitBlt或CDC:StretchBlt函數(shù)將位圖復(fù)制到實(shí)際設(shè)備環(huán)境中。4.3 消息映射過程例如,若向CS
13、CPortTestView中添加OnInitalUpdate的消息映射,則可按下列步驟進(jìn)行:【3】1. 按Ctrl+W快捷鍵打開“MFC ClassWizard”對話框。2. 在Class name 組合框中,將類名選定為CSCPortTestView。此時,Object IDs和Messages列表內(nèi)容會相應(yīng)地改變。3. 在Object IDs列表框中選定CSCPortTestView,而在Messages列表中選定OnInitalUpdate消息。4. 雙擊Messages列表中的OnInitalUpdate消息或單擊“Add Function”按鈕,都會在CSCPortTestView類
14、中添加該消息的映射函數(shù)OnInitalUpdate,同時在Member functions列表中顯示這一消息映射函數(shù)和被映射的消息,如圖所示:圖3消息映射添加5.單擊“Edit Code”按鈕后,“ClassWizard”對話框退出,并轉(zhuǎn)向文檔窗口,定位到OnInitalUpdate函數(shù)源代碼處。6.添加代碼。7.這樣就完成了一個消息映射過程。5 九宮格拼圖游戲設(shè)計(jì)5.1 九宮格界面設(shè)計(jì)1. 對話框的創(chuàng)建對話框編輯器最初打開時,控件工具欄是隨之出現(xiàn)的,利用此工具欄中的各個按鈕可以順利完成控件的添加。在對話框中添加一個控件的方法有下列幾種:【2】1.1 在控件工具欄中單擊某控件,此時的鼠標(biāo)箭頭在
15、對話框內(nèi)變成“十”字形狀;在對話框指定位置單擊鼠標(biāo)左鍵,則此控件被添加到對話框的相應(yīng)位置,再拖動剛添加控件的選擇框可改變其大小和位置。1.2 在控件工具欄中單擊某按鈕,此時的鼠標(biāo)箭頭對話框內(nèi)變成“十”字形狀;在指定位置處單擊鼠標(biāo)左鍵不放,拖動鼠標(biāo)至相應(yīng)位置,釋放鼠標(biāo)鍵。1.3 用鼠標(biāo)左鍵單擊控件工具欄中的某個控件,并按住鼠標(biāo)左鍵不放;在拖動鼠標(biāo)到對話框的指定位置的過程中,用戶會看到一個虛線框,下面帶有改控件的標(biāo)記;釋放鼠標(biāo)左鍵,新添加的控件立即出現(xiàn)在對話框中。2. 拼圖邊框的創(chuàng)建對話框創(chuàng)建之后,設(shè)計(jì)劃分為九個小格的邊框,代碼如下:【5】 Void CMyDlg:Show(CDC * dc)CD
16、C tdc;CBitmap bmp, *obmp; 圖e 控件bmp.LoadBitmap(IDB_BG);/調(diào)入位圖資源tdc.CreateCompatibleDC(dc);/定義并創(chuàng)建一個內(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,
17、 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)/畫邊框CPen pen, * open;pen.CreatePen(PS_SOLID, 1, RGB(96, 96, 96);open = bmpdc.Sel
18、ectObject(&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.Sele
19、ctObject(&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.
20、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)行此段代碼,主
21、要實(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. 對話框初始顯示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 = A
22、fxGetApp()->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)九宮格對話框的初始顯示,包含了對話框的圖標(biāo)、3*3默認(rèn)模式、圖片的加載、step置0等。 5.2 MFC中圖像的顯示MFC中實(shí)現(xiàn)圖片的顯示需要先加載圖片資源,然后通過設(shè)備環(huán)境的轉(zhuǎn)換來實(shí)現(xiàn)。編程步驟如下:1. 啟動Visual C+6.0,生成一個基于對話框結(jié)構(gòu)的應(yīng)用程序,對話框的基類為CMyDlg,同時將該程序命名為"九宮格拼
23、圖";2 在應(yīng)用程序的項(xiàng)目代碼中添加"CPicture"類;3 使用資源編輯器向程序中添加Jepg等格式的圖像資源;4 添加代碼,編譯運(yùn)行程序。程序代碼class CPicture public:CPicture(); /構(gòu)造函數(shù)CPicture(); /虛構(gòu)函數(shù)BOOL Load(UINT nIDRes); /從資源中加載,尋找“IMAGE”類型BOOL Load(LPCTSTR pszPathName); /從路徑名中加載BOOL Load(CFile& file); /從File文件中加載BOOL Load(CArchive& ar); /從
24、創(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”類型中,然后在成員函數(shù)BOOL Load(UINT nIDRes)添加代碼使得存儲器可以加載資源。BOOL CPicture:Load(
25、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)存儲器 if (!lpRsrc)return FA
26、LSE;CMemFile file(lpRsrc, len); /創(chuàng)建儲存文件并加載它BOOL bRet = Load(file);FreeResource(hRsrc);GlobalFree(lpRsrc);return bRet;由于加載的圖片無法在MFC中正常顯示,所以要通過轉(zhuǎn)換設(shè)備環(huán)境才可以顯示。MFC將設(shè)備描述表(DC)和圖形設(shè)備接口封裝在一起,建立了設(shè)備描述類CDC類,CDC類是直接從CObject派生處理,CDC類主要功能是定義設(shè)備描述表對象,提供在顯示器上繪圖和打印機(jī)上圖形輸出的方法。CDC類提供的方法可以實(shí)現(xiàn)GDI的所有圖形輸出:包括控制著色和調(diào)色板、處理坐標(biāo)映射和裝換、繪制
27、多邊形和區(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.to
28、p, 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(hmWid
29、th,hmHeight);if (pDC=NULL) CWindowDC dc(NULL);dc.HIMETRICtoDP(&sz); else pDC->HIMETRICtoDP(&sz);return sz;通過這樣的設(shè)備環(huán)境轉(zhuǎn)換,就可以實(shí)現(xiàn)在MFC應(yīng)用程序中顯示JPG/GIF圖像文件。5.3 圖片處理與游戲規(guī)則設(shè)計(jì)一些成員函數(shù)來實(shí)現(xiàn)圖片的操作處理,例如圖片的獲取,打亂與移動等Cspell成員函數(shù)CSpellCSpellReCreateGetPicMoveInit圖4 CSpell類成員函數(shù)關(guān)系其中成員函數(shù)CSpell負(fù)責(zé)構(gòu)造N*N的框架,包含了一個空缺模塊blank
30、;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;I
31、nit(); 編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:構(gòu)造函數(shù)負(fù)責(zé)創(chuàng)建W*H的內(nèi)存數(shù)據(jù)并顯示初始九宮圖(其中帶有一個空模板),并用08標(biāo)記各模板。CSpell:CSpell()delete map;編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:虛構(gòu)函數(shù)負(fù)責(zé)刪除申請的內(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)用戶點(diǎn)擊獲取到某個位置的圖片時,返回標(biāo)記模板的數(shù)字,否則返回-
32、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*wi
33、dth+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)retur
34、n 0;return 1;編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:1. 沒有選中的模板無法移動2. 空模板無法移動3. 模板旁(上下左右)有空模板可以進(jìn)行移動4. 標(biāo)記模板的數(shù)字如果和08一一對應(yīng)時無法繼續(xù)移動,否則可以繼續(xù)移動。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 =
35、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個模板其中選中2個進(jìn)行交換,如果選中的2個模板其中有一個是空模板的話,則計(jì)算空模板與它交換的模板之間的距離(x上的差值dx與y上的差值dy)如果(dx+dy+1)%2=0的話則有解,否則無解,無法拼合出原圖。
36、隨機(jī)打亂流程圖:構(gòu)建隨機(jī)因子time初始化i和dI<length|d=0取2個小于length的隨機(jī)數(shù)判斷2隨機(jī)數(shù)是否相等隨機(jī)數(shù)標(biāo)志的模塊進(jìn)行交換如果標(biāo)志的其中一個模塊為空模塊w=a%width- b%width + 1h=a/width- b/widthw與h分別取非負(fù)整數(shù)d = (d+w+h)%2D=!d開始結(jié)束NYYNYN 圖5隨機(jī)打亂流程圖5.4 對話框菜單編輯5.4.1 菜單編輯對話框菜單編輯步驟如下:1. 單擊資源管理中的菜單Menu文件夾前的”+”號,雙擊菜單編輯資源。2. 在頂層菜單的第一項(xiàng),Visual C+為用戶留出了一個空位置,用于輸入新的頂層菜單項(xiàng)。在菜單的空位置
37、上雙擊鼠標(biāo)左鍵,出現(xiàn)菜單欄的屬性對話框,在標(biāo)題欄中輸入” 游戲(&G)”并且設(shè)置頂層菜單項(xiàng)的默認(rèn)屬性定義為“彈出” (下拉)菜單。3. 鼠標(biāo)單擊“游戲”下拉子菜單的空位置,出現(xiàn)屬性對話框,在標(biāo)題欄中輸入“3*3(&3)”,依此建立子菜單“4*4(&4)”、“重新開始(&B)”和“退出(&E)”。4. 依此建立下拉菜單“圖片(&P)”和其子菜單“選擇圖片(&S)”及“拼塊邊框(&B)”。 5.4.2菜單命令的消息映射菜單欄、工具欄的按鈕以及快捷鍵等用戶對象都能產(chǎn)生WM_COMMAND命令消息。命令消息能夠被文檔類、應(yīng)用類、窗口類以及
38、視圖類等多種對象接收、處理,且用戶可以用ClassWizard對命令消息進(jìn)行映射。建立映射步驟如下:1. 選擇“查看”“建立類向?qū)А辈藛蚊罨虬碈trl+W快捷鍵,則出現(xiàn)MFC ClassWizard對話框,并自動切換到Message Maps頁面。從“Class name”列表中選擇CMyDlg,在IDS列表中選擇ID_MENU_BEGIN,然后在Messages框中選擇COMMAND消息。2. 單擊“Add Function”按鈕或雙擊COMMAND消息,出現(xiàn)“Add Member Function”對話框以輸入成員函數(shù)的名稱。系統(tǒng)默認(rèn)的函數(shù)名為OnMenuBegin。該函數(shù)是對菜單項(xiàng)ID
39、_MENU_BEGIN的映射。也就是說,當(dāng)應(yīng)用程序運(yùn)行后,用戶選擇“測試”“對話框”菜單時,該函數(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);這樣就完成了菜單命令(重新開始
40、)的消息映射,依此方法完成其它菜單命令的消息映射。通過消息映射就完成了游戲開始的功能,其中包含了圖片的隨機(jī)打亂、步數(shù)置為0并顯示在對話框中、可以開始玩的標(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;OnMenuBe
41、gin();編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:當(dāng)用戶選擇菜單3*3時,確保3*3被選中,4*4不被選中,創(chuàng)建3*3的九宮圖。之后調(diào)用OnMenuBegin()函數(shù),實(shí)行打亂等操作。void CMyDlg:OnMenuOpen() / 打開文件CFileDialog file(true, NULL, NULL, OFN_OVERWRITEPROMPT, "圖片文件|*.bmp;*.jpg;*.gif|*.jpg|*.jpg|*.bmp|*.bmp|*.gif|*.gif|", NULL);if(file.DoModal()=IDOK)pic.Load(file.GetPat
42、hName();Invalidate(FALSE);編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:實(shí)行資源管理器外的圖片調(diào)用,完成了用戶隨意選擇圖片玩的功能。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
43、 < 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,
44、 point);游戲結(jié)束標(biāo)志流程圖:判斷鼠標(biāo)是否點(diǎn)在分割模塊內(nèi)移動鼠標(biāo)左鍵點(diǎn)到的那個模塊判斷標(biāo)志r是否大于等于0步數(shù)加一文本顯示Step判斷R是否等于1提示完成N開始結(jié)束NYYYN圖6結(jié)束標(biāo)志流程圖編輯運(yùn)行此段代碼,主要實(shí)現(xiàn)以下功能:這里定義了一個循環(huán),游戲開始后,可以移動模板,如果判斷游戲結(jié)束的標(biāo)志r不等于1的話則可以繼續(xù)玩,同時標(biāo)志用戶移動次數(shù)的step逐次增加1;如果r=1的話則彈出一個對話框顯示用戶完成拼圖游戲。6 編譯運(yùn)行并測試編譯并運(yùn)行后,出現(xiàn)“九宮格拼圖”。如圖7所示:圖7開始界面完成拼圖后,彈出”完成”對話框。 如圖8所示:圖8完成界面7總結(jié)經(jīng)過這幾個月的開發(fā)研究,雖然曾經(jīng)出現(xiàn)
45、了很多的編輯錯誤,但是最終還是完成了此次的論文,從中學(xué)到了許多的知識。例如VC的MFC窗口編程設(shè)計(jì)、圖片的顯示等方面,基本上滿足了設(shè)計(jì)所提出的要求,能夠編輯出九宮格拼圖游戲,解決了圖片固定打亂的缺點(diǎn),但在一些方面上還存在著不足之處,例如,拼完的圖片總是缺一塊,給人的感覺就不是很完整??赡苁亲约旱哪芰Σ蛔惆?,自此我還應(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 陳清華等
46、.Visual C+課程設(shè)計(jì)案例精選與編程指導(dǎo)C.東南大學(xué)出版社,2004.5 嚴(yán)華峰等.VISUAL C+課程設(shè)計(jì)案例精編(第二版)A.中國水利水電出版社 ,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/Richa
47、rd 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.Ma
48、this,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é)之間互相幫助,對于即將面臨畢業(yè)的我們來說是一次很有意義的經(jīng)歷,大學(xué)四年都一起走過了,在最后我們可以聚在一起討論學(xué)習(xí),研究專業(yè)問題,進(jìn)而更好的了解我們每個人的興趣之所在,明確我們的人生理想,進(jìn)而在今
49、后的生活和工作中更好的發(fā)揮自己的優(yōu)勢,學(xué)好自己的專業(yè),成為一個對于社會有用的人,感謝我的同學(xué)們,在我絕望的時候給了我希望,沒有他們,論文就不會有這么好,甚至無法完成。在此更要感謝我的老師xxx,是你的細(xì)心指導(dǎo)和關(guān)懷,使我能夠順利的完成畢業(yè)論文。老師對于學(xué)生總是默默的付出,盡管很多時候我們自己并沒有特別重視論文的寫作,沒有按時完成老師的任務(wù),但是老師還是能夠主動的和我們聯(lián)系,告訴我們應(yīng)該怎么樣修改論文,怎么樣按要求完成論文相關(guān)的工作。老師的檢查總是很仔細(xì)的,可以認(rèn)真的看論文的每一個細(xì)小的格式要求,認(rèn)真的讀每一個同學(xué)的論文,然后提出最中肯的意見,這是很難得的。經(jīng)典婚慶主持詞炮竹聲聲賀新婚,歡聲笑語迎嘉賓.尊敬各位來賓,各位領(lǐng)導(dǎo),各位親朋好友,先生們,女士們,活潑可愛的小朋友們,大家好! 好歌好語好季節(jié),好人好夢好姻緣.來賓們今天是公元*年*月*日(農(nóng)歷六月初八)是良辰吉日,在這大吉大利吉祥喜慶的日子里,我們懷著十二分的真誠的祝福相聚在*酒樓一樓婚宴大廳共同慶賀*先生與*小姐新婚典禮.(首先
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 防治老鼠服務(wù)合同協(xié)議書
- 建筑樁基工程施工合同
- 電熱水器維修合同
- 法律行業(yè)智能訴訟輔助工具研發(fā)方案
- 地暖承包合同
- 教育行業(yè)管理與教學(xué)實(shí)踐指南
- 農(nóng)業(yè)環(huán)境保護(hù)與管理指導(dǎo)書
- DeepSeek簡單版使用指南
- 店面承包合作協(xié)議合同
- 集裝箱活動房租賃合同樣本
- 教育強(qiáng)國建設(shè)規(guī)劃綱要(2024-2035年)要點(diǎn)解讀(教育是強(qiáng)國建設(shè)民族復(fù)興之基)
- 2025年電梯專用電機(jī)項(xiàng)目可行性研究報(bào)告
- 煤礦安全生產(chǎn)方針及法律法規(guī)課件
- 2025年教科室工作計(jì)劃樣本(四篇)
- 2024年版古董古玩買賣合同:古玩交易稅費(fèi)及支付規(guī)定
- 幼兒園費(fèi)用報(bào)銷管理制度
- 【7歷期末】安徽省宣城市2023-2024學(xué)年七年級上學(xué)期期末考試歷史試題
- 髖部脆性骨折帶來的思考
- 2024年網(wǎng)格員考試題庫完美版
- 2024年河北省公務(wù)員錄用考試《行測》真題及答案解析
- 《建筑與市政工程防水規(guī)范》解讀
評論
0/150
提交評論