C++課程設(shè)計(jì)報(bào)告 - 拼圖游戲_第1頁(yè)
C++課程設(shè)計(jì)報(bào)告 - 拼圖游戲_第2頁(yè)
C++課程設(shè)計(jì)報(bào)告 - 拼圖游戲_第3頁(yè)
C++課程設(shè)計(jì)報(bào)告 - 拼圖游戲_第4頁(yè)
C++課程設(shè)計(jì)報(bào)告 - 拼圖游戲_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 目錄需求分析1 1 2.程序所實(shí)現(xiàn)的功能1 設(shè)計(jì)內(nèi)容11. 主模塊圖12.1. 主程序流程圖2 2.2 用例圖23函數(shù)主要調(diào)用關(guān)系圖3三、設(shè)計(jì)方案論述3四、調(diào)試分析4 1.實(shí)際完成的情況4 2.程序的性能分析43.上機(jī)過(guò)程中出現(xiàn)的問(wèn)題及其解決方案44.程序中可以改進(jìn)、擴(kuò)充的功能及設(shè)計(jì)實(shí)現(xiàn)構(gòu)想4五、用戶(hù)手冊(cè)4六、設(shè)計(jì)總結(jié)5 七、程序中主要的功能函數(shù)6八、主要參考文獻(xiàn)6九、附錄6一、需求分析 (1)運(yùn)用C+語(yǔ)言設(shè)計(jì)拼圖游戲具有極強(qiáng)的實(shí)踐性,加強(qiáng)我們對(duì)C+課程基礎(chǔ)知識(shí)點(diǎn)的理解掌握和靈活運(yùn)用理能力,培養(yǎng)實(shí)際分析問(wèn)題能力,養(yǎng)成良好的編程習(xí)慣;了解C+面向?qū)ο蟮脑O(shè)計(jì)方法與技巧,有效地、深刻地理解課程內(nèi)容

2、,體會(huì)理論、方法和設(shè)計(jì)原則;培養(yǎng)分析實(shí)際問(wèn)題和解決問(wèn)題的能力,具備使用面向?qū)ο蟪绦蛟O(shè)計(jì)開(kāi)發(fā)工具設(shè)計(jì)實(shí)際系統(tǒng)的能力。 (2)進(jìn)一步領(lǐng)會(huì)程序設(shè)計(jì)的特點(diǎn)和應(yīng)用,提高運(yùn)用C+ 以及面向?qū)ο笾R(shí)解決實(shí)際問(wèn)題的能力,初步掌握MFC編程的基本功能,掌握一種可視化編程的方法,學(xué)習(xí)使用CStatic控制操作位圖,加強(qiáng)對(duì)C+面向?qū)ο蟪绦蛟O(shè)計(jì)的理解。 (3)掌握用C+ 編寫(xiě)面向?qū)ο蟮膶?shí)用程序的設(shè)計(jì)方法,對(duì)面向?qū)ο蠓椒ê退枷朐黾痈行缘恼J(rèn)識(shí),學(xué)會(huì)利用C+程序設(shè)計(jì)語(yǔ)言編寫(xiě)出一些短小、可靠的Windows實(shí)用程序,切實(shí)提高面向?qū)ο蟮某绦蛟O(shè)計(jì)能力,為后續(xù)的相關(guān)課程的學(xué)習(xí)打下基礎(chǔ)。 (4)鍛煉實(shí)際的編程能力,提高調(diào)查資料、查閱

3、技術(shù)文獻(xiàn)、資料以及編寫(xiě)軟件設(shè)計(jì)文檔的能力,提高自學(xué)編程的能力。2.程序所實(shí)現(xiàn)的功能 (1)本程序除了實(shí)現(xiàn)了拼圖所要求的基本功能外,還添加了背景音樂(lè)、計(jì)算步數(shù)和游戲所用的時(shí)間,當(dāng)游戲開(kāi)始時(shí)背景音樂(lè)自動(dòng)循環(huán)播放,步數(shù)隨player操作自動(dòng)增加,時(shí)間自動(dòng)增加。 (2)進(jìn)入游戲界面后,player可以在菜單欄中選擇游戲的難度、圖片風(fēng)格和拼圖圖像,亦可以自定義圖片,若選擇“簡(jiǎn)單”,程序?qū)D片分成9塊,若選擇“困難”,程序?qū)D片分成16塊. (3)單擊“重置”或按F3菜單項(xiàng)會(huì)彈出一個(gè)對(duì)話(huà)框讓用戶(hù)確認(rèn)是否重置游戲。 (4)單擊任意圖象,圖像將隨機(jī)排列,并開(kāi)始計(jì)時(shí)和記步,用戶(hù)通過(guò)鼠標(biāo)單擊空格周?chē)膱D片來(lái)改變其

4、位置,用戶(hù)沒(méi)單擊一次,步數(shù)增加一次。 (5)游戲中用戶(hù)可通過(guò)單擊“提示”菜單項(xiàng)或按F4來(lái)查看圖像的縮略圖及游戲相關(guān)信息。 (6)游戲狀態(tài)欄顯示用戶(hù)所用時(shí)間及步數(shù),成功時(shí)狀態(tài)欄給出提示信息和所花費(fèi)時(shí)間、步數(shù),用戶(hù)可選擇其他圖像或難度進(jìn)行游戲。二、設(shè)計(jì)內(nèi)容主程序流程圖 用例圖 : 返回重新選擇背景圖片及難度級(jí)別顯示原圖 不顯示拼圖成功是否選擇原圖提示開(kāi)始游戲選擇難度級(jí)別選擇背景圖片用戶(hù) 2.4 CPictureDlg類(lèi)中成員函數(shù)主要調(diào)用關(guān)系圖三、設(shè)計(jì)方案論述 本程序有一個(gè)CPictureDlg類(lèi),它公有繼承CDialog類(lèi)的一些性質(zhì)。CDialog類(lèi)中包括位圖的讀入和顯示,拼圖游戲中的Pictur

5、e都是位圖資源。在游戲程序中,采用Static Text即靜態(tài)文本控件來(lái)顯示位圖。靜態(tài)文本控件的功能比較簡(jiǎn)單,可顯示字符串,圖標(biāo),位圖。 先為對(duì)話(huà)框的“游戲”中的菜單項(xiàng)“容易”和“困難”添加消息響應(yīng)為另外還需為CPictureDlg類(lèi)添加BOOL型變量Easy來(lái)標(biāo)識(shí)游戲的難度(分為9格或16格),同時(shí)添加BOOL型變量IsRnd用來(lái)標(biāo)識(shí)圖格是否進(jìn)行了隨機(jī)位置的初始化,接下來(lái)為CPictureDlg對(duì)話(huà)框添加16個(gè)Static控件(可以先設(shè)置好一個(gè)控件后,再通過(guò)復(fù)制得到其它的控件),并設(shè)置它們的屬性:ID設(shè)為IDC_IMAGE0到IDC_IMAGE15,Tabstop請(qǐng)勾上,Type屬性設(shè)為Bi

6、tmap,控件添加好了后,我們需要添加一個(gè)CStatic類(lèi)型的數(shù)組m_Image16,與這16個(gè)Static控件相關(guān)聯(lián),通過(guò)這個(gè)操作這個(gè)數(shù)組的下標(biāo)來(lái)控制這16個(gè)控件對(duì)圖像進(jìn)行分格顯示。建立關(guān)聯(lián)的代碼應(yīng)寫(xiě)在CPictureDlg類(lèi)中系統(tǒng)生成的OnInitDialog()函數(shù)體內(nèi),這個(gè)函數(shù)是整個(gè)對(duì)話(huà)框程序運(yùn)行的入口,相當(dāng)于一個(gè)main函數(shù),在這個(gè)函數(shù)體里,我們也需要為之前聲明的變量提供初始值,即將變量初始化,變量沒(méi)有初始化的后果通常會(huì)造成內(nèi)存泄露,使程序在運(yùn)行時(shí)出現(xiàn)莫名奇妙的錯(cuò)誤。判斷游戲是否完成的函數(shù)IsWin(),只要所有的Static控件都回到了相應(yīng)的位置,就可以認(rèn)為用戶(hù)己完成了拼圖,即游戲

7、完成。 四、調(diào)試分析1.實(shí)際完成的情況(1)完成的功能: 本程序除了實(shí)現(xiàn)了拼圖所要求的基本功能外,還添加了背景音樂(lè)、計(jì)算步數(shù)和游戲所用的時(shí)間,當(dāng)游戲開(kāi)始時(shí)背景音樂(lè)自動(dòng)循環(huán)播放,步數(shù)隨player操作自動(dòng)增加,時(shí)間自動(dòng)增加。 (2)支持的數(shù)據(jù)類(lèi)型: BOOL類(lèi)型、控件數(shù)組類(lèi)型。程序的性能分析 本程序能夠很好的運(yùn)行,并且畫(huà)面質(zhì)量以及音質(zhì)方面都很高上機(jī)過(guò)程中出現(xiàn)的問(wèn)題及其解決方案 1)開(kāi)始導(dǎo)入圖片時(shí),圖片不能顯示,重新導(dǎo)入bmp格式的圖片后解決了。 2)開(kāi)始建立了時(shí)間函數(shù)OnTimer,但是游戲運(yùn)行后時(shí)間并不增加,在開(kāi)始游戲?qū)?yīng)的函 數(shù)中增加SetTimer函數(shù),得到想要的結(jié)果。 3)初始設(shè)置的快捷

8、鍵無(wú)效,查閱資料后加入Accelerator及相應(yīng)的函數(shù),使得快捷鍵有效。程序中可以改進(jìn)、擴(kuò)充的功能及設(shè)計(jì)實(shí)現(xiàn)構(gòu)想。 1)游戲的難度等級(jí)有點(diǎn)少,可以適當(dāng)增加幾個(gè)等級(jí)。 2)游戲未設(shè)置根據(jù)用戶(hù)花費(fèi)的時(shí)間和步數(shù)判定用戶(hù)的成績(jī)并進(jìn)行排名的功能,可以增設(shè),以便用戶(hù)了解自己玩的水平。用戶(hù)手冊(cè)1.打開(kāi)Picture文件夾,雙擊Ppicture.dsw標(biāo)志打開(kāi)程序,然后運(yùn)行。2.開(kāi)始程序會(huì)出現(xiàn)以下歡迎界面: 3.用戶(hù)需要選擇圖片、難度和圖片風(fēng)格,然后單擊圖片開(kāi)始游戲,計(jì)時(shí)器開(kāi)始計(jì)時(shí),用戶(hù)通過(guò)鼠標(biāo)單擊空格周?chē)膱D片來(lái)改變其位置,用戶(hù)每單擊一次,步數(shù)增加一次。4.游戲中用戶(hù)可通過(guò)單擊“提示”菜單項(xiàng)或按F4來(lái)查看

9、圖像的縮略圖及游戲相關(guān)信息。圖像縮略圖 游戲相關(guān)信息 用戶(hù)也可以單擊菜單欄中的重置或按快捷鍵F3重置圖片,會(huì)出現(xiàn)提示信息,用戶(hù)單擊確定重置圖片。提示框如下: 6.當(dāng)完成拼圖后系統(tǒng)會(huì)自動(dòng)給出成功提示,并顯示用戶(hù)的成績(jī),用戶(hù)單擊確定后可以選擇其他圖片或難度繼續(xù)游戲,也可以選擇單擊“退出”或按Esc退出游戲。六、設(shè)計(jì)總結(jié)通過(guò)本次課程設(shè)計(jì),學(xué)習(xí)并初步掌握了基于對(duì)話(huà)框的MFC程序的設(shè)計(jì),并學(xué)會(huì)了使用CStatic控件操作位圖。熟悉了在基于對(duì)話(huà)框的工程中加入菜單操作、用代碼操作菜單、Windows位圖文件的基本結(jié)構(gòu)、Visual C+中對(duì)位圖資源的操作、Visual C+中對(duì)自定義位圖文件的操作、設(shè)置相關(guān)

10、位圖的概念、用Static控件顯示位圖以及用Status Bar顯示提示信息和Visual C+隨機(jī)函數(shù)。在設(shè)計(jì)過(guò)程中,曾遇到了兩個(gè)瓶頸導(dǎo)致程序一度無(wú)法完成,第一個(gè)是位圖文件的添加,包括將圖片格式轉(zhuǎn)換成BMP格式、添加相關(guān)Static控件,尤其是對(duì)控件圖標(biāo)不熟悉的情況下,一時(shí)不知道在哪兒添加控件,后來(lái)上網(wǎng)查閱并請(qǐng)教同學(xué)才得以完成控件的添加,使得程序可以繼續(xù)完成。不過(guò)在程序即將結(jié)束的時(shí)候,又遇到了一個(gè)新的問(wèn)題,導(dǎo)致程序差點(diǎn)功虧一簣,問(wèn)題就是圖片的縮略圖的添加,也就是游戲中的“提示”的應(yīng)用,當(dāng)然沒(méi)有“提示”操作,并不會(huì)影響整個(gè)程序的運(yùn)行環(huán)境,但是為了使游戲者能夠順利的完成游戲,此“提示”操作必不可

11、少,在糾結(jié)了一段時(shí)間之后,在與同學(xué)的商討下,終于完成了縮略圖的添加,為程序的順利完成提供了幫助。在本次設(shè)計(jì)的完成過(guò)程中,我對(duì)軟件的開(kāi)發(fā)有了一個(gè)初步的認(rèn)識(shí),一個(gè)小型游戲軟件尚且需要不斷地查閱資料、請(qǐng)教別人,那么完成一個(gè)大型的軟件,必定需要更加復(fù)雜的過(guò)程。所以在做軟件開(kāi)發(fā)時(shí)首先要保持一個(gè)平靜的心態(tài),靜下心來(lái)潛心去研究,同時(shí)還要熟悉的掌握、靈活的運(yùn)用所學(xué)知識(shí),方能完成設(shè)計(jì)。也對(duì)MFC程序開(kāi)發(fā)也有了相應(yīng)的了解,每一個(gè)函數(shù)都有其特定的用途,掌握好這其中的一些關(guān)聯(lián),對(duì)一個(gè)程序的完成不無(wú)好處,這次課程設(shè)計(jì)為我以后編程的相關(guān)學(xué)習(xí)奠定了基礎(chǔ),使我在不同方面得到了鍛煉。七、程序中類(lèi)的主要的成員函數(shù)BOOL OnI

12、nitDialog(); /初始化函數(shù)void OnRun(UINT nBitmapID,UINT nMenuID);/加載位圖資源BOOL IsWin(); /判斷拼圖是否成功void MoveImage(int num); /移動(dòng)隨機(jī)小圖塊void Rnd(); /隨機(jī)設(shè)置小圖塊的位置UINT MapRand(UINT nMax); /隨機(jī)函數(shù)void SetImage(); /把圖像拷貝到Static控件void SetPos() / 初始化Staic 控件的位置CString IntToString(int number); /為游戲添加計(jì)時(shí)器void OnTimer(UINT nID

13、Event); /計(jì)時(shí)函數(shù)void SetPre(); /生成略縮圖void CPictureDlg:OnForHelp() /顯示略縮圖void ShowItem(); /顯示幫助對(duì)話(huà)框八、主要參考文獻(xiàn) 1.鄭莉. 2.錢(qián)能. 3.黃維通.Visual C+面向?qū)ο笈c可視化程序設(shè)計(jì)(第2版).北京:清華大學(xué)出版社, 2003.12 4. 5. 潘愛(ài)民. 九、附錄BOOL CPictureDlg:OnInitDialog()/整個(gè)對(duì)話(huà)框程序運(yùn)行的入口CDialog:OnInitDialog();/ Set the icon for this dialog. The framework does

14、 this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE); / Set big iconSetIcon(m_hIcon, FALSE); / Set small iconsrand(unsigned)time(NULL);hAccel = :LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1);/ TODO: Add extra initialization here Bit

15、map.LoadBitmap(IDB_BITMAP6);/初始界面是圖像BITMAP6pKDC = new CDC;pMainMenu = GetMenu(); /獲取菜單Style3d = TRUE;Islong = FALSE;Advan = FALSE;Easy = TRUE;TimeCon = 計(jì)時(shí)器;IntStep = 0;Strstep = 步數(shù);SetWindowPos(NULL,0,0,600,700,SWP_NOMOVE); /控制窗口大小SetTimer(10,1000,NULL);/10表示計(jì)時(shí)器的名字,1000表示時(shí)間間隔是1000毫秒,NULL表示使用onTimer函

16、數(shù)。m_wndStatusBar.Create(WS_CHILD|WS_VISIBLE|CCS_BOTTOM|CCS_NODIVIDER,CRect(0,0,0,0),this,102);int static strPartDim5 = 100,230, 330,400, -1;m_wndStatusBar.SetParts(4,strPartDim);/將狀態(tài)顯示欄分為四塊m_wndStatusBar.SetText(TimeCon,1,0);m_wndStatusBar.SetText(Strstep,2,0);m_wndStatusBar.SetText(Player,3,0);m_Im

17、age0.SubclassDlgItem(IDC_IMAGE0,this);m_Image1.SubclassDlgItem(IDC_IMAGE1,this);m_Image2.SubclassDlgItem(IDC_IMAGE2,this);m_Image3.SubclassDlgItem(IDC_IMAGE3,this);m_Image4.SubclassDlgItem(IDC_IMAGE4,this);m_Image5.SubclassDlgItem(IDC_IMAGE5,this);m_Image6.SubclassDlgItem(IDC_IMAGE6,this);m_Image7.S

18、ubclassDlgItem(IDC_IMAGE7,this);m_Image8.SubclassDlgItem(IDC_IMAGE8,this);m_Image9.SubclassDlgItem(IDC_IMAGE9,this);m_Image10.SubclassDlgItem(IDC_IMAGE10,this);m_Image11.SubclassDlgItem(IDC_IMAGE11,this);m_Image12.SubclassDlgItem(IDC_IMAGE12,this);m_Image13.SubclassDlgItem(IDC_IMAGE13,this);m_Image1

19、4.SubclassDlgItem(IDC_IMAGE14,this);m_Image15.SubclassDlgItem(IDC_IMAGE15,this);m_Preview.SubclassDlgItem(IDC_PREVIEW,this);OnBegin();PlaySound(rain.wav, NULL,SND_LOOP | SND_ASYNC);return TRUE; / return TRUE unless you set the focus to a controlvoid CPictureDlg:OnSysCommand(UINT nID, LPARAM lParam)/

20、截獲控制命令的函數(shù)if (nID & 0 xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();/用來(lái)顯示一個(gè)模態(tài)對(duì)話(huà)框,其返回值對(duì)應(yīng)于用來(lái)關(guān)閉對(duì)話(huà)框的控件的IDelseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/

21、this is automatically done for you by the framework.void CPictureDlg:OnPaint() /系統(tǒng)自動(dòng)生成重繪窗口函數(shù)if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon =

22、 GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();SetImage();/調(diào)用SetImage函數(shù)將圖片拷貝到Static控件上面if(pKDC) pKDC-DeleteDC();/ The system calls this to ob

23、tain the cursor to display while the user drags/ the minimized window.HCURSOR CPictureDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CPictureDlg:OnRun(UINT nBitmapID, UINT nMenuID) pSubMenu = pMainMenu-GetSubMenu(1);/用GetSubMenu得到指向彈出菜單對(duì)象的指 pSubMenu-CheckMenuItem(ID_PICTURE1,MF_UNCHECKED);/用Chec

24、kMenuItem方法為nMenuID所指定的菜單項(xiàng)放置選中標(biāo)記 pSubMenu-CheckMenuItem(ID_PICTURE2,MF_UNCHECKED);/用CBitmap對(duì)象的LoadBitmap方法將nBitmapID所指定的位圖載入 pSubMenu-CheckMenuItem(ID_PICTURE3,MF_UNCHECKED); pSubMenu-CheckMenuItem(ID_PICTURE4,MF_UNCHECKED); pSubMenu-CheckMenuItem(ID_ADVAN,MF_UNCHECKED); pSubMenu-CheckMenuItem(nMenu

25、ID, MF_CHECKED); count = 0; Islong = FALSE; CanCount = FALSE; IsRnd = FALSE; Advan = FALSE; Bitmap.DeleteObject();/先調(diào)用函數(shù)CGdiObject:DeleteObject刪除由LoadBitmap加載過(guò)的位圖 Bitmap.LoadBitmap(nBitmapID);/用LoadBitmap方法載入新的位圖對(duì)象 SetPos(); SetImage(); /IsWin();void CPictureDlg:OnPicture1() / TODO: Add your command

26、 handler code hereOnRun(IDB_BITMAP1, ID_PICTURE1);/調(diào)用OnRun()函數(shù)加載位圖m_wndStatusBar.SetText(三只小熊,0,0);IntStep = 0;/設(shè)定初始步數(shù)為0SetStep(IntStep);/調(diào)用記步函數(shù),計(jì)算步數(shù)PlaySound(yin.wav, NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnPicture2() / TODO: Add your command handler code hereOnRun(IDB_BITMAP2, ID_PICTURE2);

27、/調(diào)用OnRun()函數(shù)加載位圖m_wndStatusBar.SetText(阿貍,0,0);IntStep = 0;/設(shè)定初始步數(shù)為0 SetStep(IntStep);/調(diào)用記步函數(shù),計(jì)算步數(shù)PlaySound(yue.wav, NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnPicture3() / TODO: Add your command handler code hereOnRun(IDB_BITMAP3, ID_PICTURE3);/調(diào)用OnRun()函數(shù)加載位圖m_wndStatusBar.SetText(小可愛(ài),0,0); In

28、tStep = 0;/設(shè)定初始步數(shù)為0SetStep(IntStep);/調(diào)用記步函數(shù),計(jì)算步數(shù)PlaySound(l.wav, NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnPicture4() / TODO: Add your command handler code hereOnRun(IDB_BITMAP4, ID_PICTURE4);/調(diào)用OnRun()函數(shù)加載位圖m_wndStatusBar.SetText(小象,0,0);IntStep = 0;/設(shè)定初始步數(shù)為0SetStep(IntStep);/調(diào)用記步函數(shù),計(jì)算步數(shù)PlaySo

29、und(ai.wav, NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnPicture5() / TODO: Add your command handler code hereOnRun(IDB_BITMAP5, ID_PICTURE5);/調(diào)用OnRun()函數(shù)加載位圖m_wndStatusBar.SetText(比卡丘,0,0); IntStep = 0;/設(shè)定初始步數(shù)為0SetStep(IntStep);/調(diào)用記步函數(shù),計(jì)算步數(shù)PlaySound(天籟童聲 - Tell Me Why.wav, NULL, SND_LOOP | SND_AS

30、YNC);void CPictureDlg:OnAdvan() /自定義圖片的函數(shù)/用LoadImage方法來(lái)加載自定義文件中的位圖資源,然后用GetObject方法得到其BITMAP對(duì)象/ TODO: Add your command handler code hereCFileDialog dlg(TRUE, NULL, NULL, NULL, 位圖文件(*.bmp)|*.bmp);INT Result = dlg.DoModal();/PlaySound(l.wav, NULL, SND_LOOP | SND_ASYNC);if(Result = IDOK)count = 0; CanC

31、ount = FALSE;IsRnd = FALSE; Advan = TRUE;hBitmap = (HBITMAP):LoadImage(NULL, dlg.GetFileName(), IMAGE_BITMAP,0, 0, LR_LOADFROMFILE);BITMAP bm; :GetObject(hBitmap, sizeof(BITMAP), &bm); if(bm.bmWidth = bm.bmHeight)/判斷圖片是否是長(zhǎng)大于高h(yuǎn)Bitmap = (HBITMAP):LoadImage(NULL, dlg.GetFileName(),IMAGE_BITMAP, 650, 60

32、0, LR_LOADFROMFILE);/限定自定義圖片的大小Width = 650; Height = 600;Islong = FALSE;else if(bm.bmWidth GetSubMenu(0);pSubMenu-CheckMenuItem(ID_HARD, MF_UNCHECKED);pSubMenu-CheckMenuItem(ID_EASY, MF_CHECKED);Easy = TRUE; IsRnd = FALSE;CanCount=FALSE;SetPos();m_wndStatusBar.SetText(加油!,0,0);IntStep = 0;/設(shè)定初始步數(shù)為0S

33、etStep(IntStep);/調(diào)用記步函數(shù)void CPictureDlg:OnHard()/困難游戲函數(shù) / TODO: Add your command handler code herepSubMenu = pMainMenu-GetSubMenu(0);pSubMenu-CheckMenuItem(ID_EASY, MF_UNCHECKED);pSubMenu-CheckMenuItem(ID_HARD, MF_CHECKED);Easy = FALSE; IsRnd = FALSE;CanCount=FALSE;SetPos();m_wndStatusBar.SetText(有點(diǎn)

34、難度!,0,0);IntStep = 0;SetStep(IntStep);void CPictureDlg:SetPos()/對(duì)Static控件的位置進(jìn)行初始化BITMAP bm;INT con, move;if(Advan = FALSE)Bitmap.GetObject(sizeof(BITMAP),&bm);Width = bm.bmWidth; Height = bm.bmHeight;if(Easy)x = Width / 3; y = Height / 3; con = 2;else if(!Easy)x = Width / 4; y = Height / 4; con = 3;

35、if(Islong) move = 70;else move = 0;for(int i = 0; i = con; i+)m_Imagei.SetWindowPos(NULL,x*i+move,0,0,0,SWP_NOSIZE);m_Imagei.SetWindowPos(NULL,0, 0, x, y, SWP_NOMOVE);for(int j = 0; j = con; j+)m_Imagecon+1+j.SetWindowPos(NULL,x*j+move,y,0,0,SWP_NOSIZE);m_Imagecon+1+j.SetWindowPos(NULL,0, 0, x, y, S

36、WP_NOMOVE);for(int k = 0; k = con; k+)m_Image(con+1)*2+k.SetWindowPos(NULL,x*k+move,2*y,0,0,SWP_NOSIZE);m_Image(con+1)*2+k.SetWindowPos(NULL,0,0,x,y,SWP_NOMOVE);if(!Easy)for(int l = 0; l = 3; l+)m_Imagel+12.SetWindowPos(NULL,x*l+move,3*y,0,0,SWP_NOSIZE);m_Imagel+12.SetWindowPos(NULL,0,0,x,y,SWP_NOMO

37、VE);CClientDC dc(&m_Imagel+12);void CPictureDlg:SetImage()/將圖像拷貝到Static控件上面INT con;HANDLE picture;CRect rect(0,0,x,y);if(Advan=TRUE) picture = hBitmap;else if(Advan=FALSE) picture = Bitmap;if(Easy) con = 2;else if(!Easy) con = 3;for(int i = 0; i CreateCompatibleDC(&dc);pDC-SelectObject(picture);dc.B

38、itBlt(0,0,x,y,pDC,x*i,0,SRCCOPY);if(Style3d) dc.DrawEdge(rect,EDGE_RAISED,BF_RECT);else if(!Style3d) dc.Draw3dRect(rect,RGB(0,0,0,),RGB(0,0,0,);delete pDC;UpdateWindow();for(int j = 0; j CreateCompatibleDC(&dc);pDC-SelectObject(picture);dc.BitBlt(0,0,x,y,pDC,x*j,y,SRCCOPY); if(Style3d) dc.DrawEdge(r

39、ect,EDGE_RAISED,BF_RECT); else if(!Style3d) dc.Draw3dRect(rect,RGB(0,0,0,),RGB(0,0,0,); delete pDC;for(int k = 0; k CreateCompatibleDC(&dc);pDC-SelectObject(picture);dc.BitBlt(0,0,x,y,pDC,x*k,2*y,SRCCOPY);if(Style3d) dc.DrawEdge(rect,EDGE_RAISED,BF_RECT);else if(!Style3d) dc.Draw3dRect(rect,RGB(0,0,

40、0,),RGB(0,0,0,);delete pDC;if(!Easy)for(int l = 0; l CreateCompatibleDC(&dc);pDC-SelectObject(picture);dc.BitBlt(0,0,x,y,pDC,x*l,3*y,SRCCOPY);if(Style3d) dc.DrawEdge(rect,EDGE_RAISED,BF_RECT);else if(!Style3d) dc.Draw3dRect(rect,RGB(0,0,0,),RGB(0,0,0,);delete pDC;if(!IsRnd)pSubMenu = pMainMenu-GetSu

41、bMenu(0);pSubMenu-EnableMenuItem(ID_FORHELP,MF_DISABLED|MF_GRAYED);void CPictureDlg:On3d()/圖片3D效果 / TODO: Add your command handler code herepSubMenu = pMainMenu-GetSubMenu(2);pSubMenu-CheckMenuItem(ID_FLAT,MF_UNCHECKED);pSubMenu-CheckMenuItem(ID_3D,MF_CHECKED);Style3d = TRUE;SetImage();void CPicture

42、Dlg:OnFlat() /圖片平面效果/ TODO: Add your command handler code herepSubMenu = pMainMenu-GetSubMenu(2);pSubMenu-CheckMenuItem(ID_FLAT,MF_CHECKED);pSubMenu-CheckMenuItem(ID_3D,MF_UNCHECKED);Style3d = FALSE;SetImage();UINT CPictureDlg:MapRand(UINT nMax)/隨機(jī)函數(shù)int nRand = rand();float fMap = (float)nMax / RAND

43、_MAX;float fRetVal = (float)nRand*fMap+0.5f;return (UINT)fRetVal;void CPictureDlg:Rnd()/設(shè)定隨機(jī)圖格的位置int xnum,ynum,level;UINT rand;if(Easy) level = 8; /如果是9格else if(!Easy) level = 15;/如果是16格WINDOWPLACEMENT wpnum, wp15;for(int a = 0; a = 600; a+) rand = MapRand(4); if(rand=1) for(int b = 0; b = level - 1

44、; b+) m_Imagelevel.GetWindowPlacement(&wp15); m_Imageb.GetWindowPlacement(&wpnum); xnum = wpnum.rcNormalPosition.left; ynum = wpnum.rcNormalPosition.top; & wpnum.rcNormalPosition.left =wp15.rcNormalPosition.left - x) m_Imageb.SetWindowPos(NULL,xnum+x,ynum,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(NU

45、LL,xnum,ynum,0,0,SWP_NOSIZE); if(rand = 2)for(int c = 0; c = level - 1; c+)m_Imagelevel.GetWindowPlacement(&wp15);m_Imagec.GetWindowPlacement(&wpnum);xnum = wpnum.rcNormalPosition.left;ynum = wpnum.rcNormalPosition.top;& wpnum.rcNormalPosition.left =wp15.rcNormalPosition.left + x)m_Imagec.SetWindowP

46、os(NULL,xnum-x,ynum,0,0,SWP_NOSIZE); m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE); if(rand = 3)for(int d = 0; d = level - 1; d+)m_Imagelevel.GetWindowPlacement(&wp15);m_Imaged.GetWindowPlacement(&wpnum);xnum = wpnum.rcNormalPosition.left;ynum = wpnum.rcNormalPosition.top; & wpnum.rcNorma

47、lPosition.top =wp15.rcNormalPosition.top + y)m_Imaged.SetWindowPos(NULL,xnum,ynum-y,0,0,SWP_NOSIZE); m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);if(rand = 4)for(int e = 0; e GetSubMenu(0);pSubMenu-EnableMenuItem(ID_FORHELP,MF_ENABLED);IsRnd = TRUE;CanCount=TRUE;void CPictureDlg:MoveImag

48、e(int num)/移動(dòng)隨機(jī)圖格的函數(shù)int xnum,ynum,level;if(Easy) level = 8;else if(!Easy) level = 15;WINDOWPLACEMENT wpnum, wp15;m_Imagelevel.GetWindowPlacement(&wp15);m_Imagenum.GetWindowPlacement(&wpnum);xnum = wpnum.rcNormalPosition.left;ynum = wpnum.rcNormalPosition.top;if(num!=level) &wpnum.rcNormalPosition.le

49、ft =wp15.rcNormalPosition.left - x) m_Imagenum.SetWindowPos(NULL,xnum + x,ynum,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE); &wpnum.rcNormalPosition.left =wp15.rcNormalPosition.left + x) m_Imagenum.SetWindowPos(NULL,xnum - x,ynum,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(

50、NULL,xnum,ynum,0,0,SWP_NOSIZE); &wpnum.rcNormalPosition.top =wp15.rcNormalPosition.top + y) m_Imagenum.SetWindowPos(NULL,xnum,ynum - y,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE); &wpnum.rcNormalPosition.top =wp15.rcNormalPosition.top - y) m_Imagenum.SetWindowPos(NULL,xn

51、um,ynum + y,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE); void CPictureDlg:OnImage0() /單擊Static控件時(shí),首先判斷圖格是否進(jìn)行了隨機(jī)數(shù)初始化/ TODO: Add your control notification handler code hereif(IsRnd)/圖格已隨機(jī)初始化MoveImage(0);/移動(dòng)圖格 +IntStep;/步數(shù)加一 SetStep(IntStep);else Rnd();/圖格未初始化,對(duì)圖格進(jìn)行隨機(jī)初始化if(

52、IsWin() CanCount = FALSE;/調(diào)用IsWin()函數(shù)判斷游戲是否完成void CPictureDlg:OnImage1() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(1); +IntStep;/步數(shù)加一 SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage10() / TODO: Add your control notification handler cod

53、e hereif(IsRnd)MoveImage(10); +IntStep;/步數(shù)加一 SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage11() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(11); +IntStep;/步數(shù)加一 SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnI

54、mage12() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(12); +IntStep;/步數(shù)加一 SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage13() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(13); +IntStep;/步數(shù)加一 SetStep(IntStep);e

55、lse Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage14() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(14);+IntStep;/步數(shù)加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage15() / TODO: Add your control notification handler code herei

56、f(IsRnd)MoveImage(15);+IntStep;/步數(shù)加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage2() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(2);+IntStep;/步數(shù)加一 SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage3() / TO

57、DO: Add your control notification handler code hereif(IsRnd)MoveImage(3); +IntStep;/步數(shù)加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage4() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(4);+IntStep;/步數(shù)加一SetStep(IntStep);else Rnd();if(IsWin(

58、) CanCount = FALSE;void CPictureDlg:OnImage5() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(5);+IntStep;/步數(shù)加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage6() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(6);+

59、IntStep;/步數(shù)加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage7() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(7);+IntStep;/步數(shù)加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage8() / TODO: Add your control not

60、ification handler code hereif(IsRnd)MoveImage(8);+IntStep;/步數(shù)加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;void CPictureDlg:OnImage9() / TODO: Add your control notification handler code hereif(IsRnd)MoveImage(9);+IntStep;/步數(shù)加一SetStep(IntStep);else Rnd();if(IsWin() CanCount = FALSE;BOOL C

溫馨提示

  • 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論