歡迎來到裝配圖網! | 幫助中心 裝配圖網zhuangpeitu.com!
裝配圖網
ImageVerifierCode 換一換
首頁 裝配圖網 > 資源分類 > DOC文檔下載  

C++課程設計報告 - 拼圖游戲

  • 資源ID:53515749       資源大小:1.34MB        全文頁數(shù):30頁
  • 資源格式: DOC        下載積分:16積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要16積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

C++課程設計報告 - 拼圖游戲

目錄1、 需求分析1 1.課程設計目的1 2.程序所實現(xiàn)的功能12、 設計內容11. 主模塊圖12.1. 主程序流程圖2 2.2 用例圖2 2.3主程序調用關系圖32.4函數(shù)主要調用關系圖3三、設計方案論述3四、調試分析4 1.實際完成的情況4 2.程序的性能分析43.上機過程中出現(xiàn)的問題及其解決方案44.程序中可以改進、擴充的功能及設計實現(xiàn)構想4五、用戶手冊4六、設計總結5 七、程序中主要的功能函數(shù)6八、主要參考文獻6九、附錄6一、需求分析1.課程設計目的 (1)運用C+語言設計拼圖游戲具有極強的實踐性,加強我們對C+課程基礎知識點的理解掌握和靈活運用理能力,培養(yǎng)實際分析問題能力,養(yǎng)成良好的編程習慣;了解C+面向對象的設計方法與技巧,有效地、深刻地理解課程內容,體會理論、方法和設計原則;培養(yǎng)分析實際問題和解決問題的能力,具備使用面向對象程序設計開發(fā)工具設計實際系統(tǒng)的能力。 (2)進一步領會程序設計的特點和應用,提高運用C+ 以及面向對象知識解決實際問題的能力,初步掌握MFC編程的基本功能,掌握一種可視化編程的方法,學習使用CStatic控制操作位圖,加強對C+面向對象程序設計的理解。 (3)掌握用C+ 編寫面向對象的實用程序的設計方法,對面向對象方法和思想增加感性的認識,學會利用C+程序設計語言編寫出一些短小、可靠的Windows實用程序,切實提高面向對象的程序設計能力,為后續(xù)的相關課程的學習打下基礎。 (4)鍛煉實際的編程能力,提高調查資料、查閱技術文獻、資料以及編寫軟件設計文檔的能力,提高自學編程的能力。2.程序所實現(xiàn)的功能 (1)本程序除了實現(xiàn)了拼圖所要求的基本功能外,還添加了背景音樂、計算步數(shù)和游戲所用的時間,當游戲開始時背景音樂自動循環(huán)播放,步數(shù)隨player操作自動增加,時間自動增加。 (2)進入游戲界面后,player可以在菜單欄中選擇游戲的難度、圖片風格和拼圖圖像,亦可以自定義圖片,若選擇“簡單”,程序將圖片分成9塊,若選擇“困難”,程序將圖片分成16塊. (3)單擊“重置”或按F3菜單項會彈出一個對話框讓用戶確認是否重置游戲。 (4)單擊任意圖象,圖像將隨機排列,并開始計時和記步,用戶通過鼠標單擊空格周圍的圖片來改變其位置,用戶沒單擊一次,步數(shù)增加一次。 (5)游戲中用戶可通過單擊“提示”菜單項或按F4來查看圖像的縮略圖及游戲相關信息。 (6)游戲狀態(tài)欄顯示用戶所用時間及步數(shù),成功時狀態(tài)欄給出提示信息和所花費時間、步數(shù),用戶可選擇其他圖像或難度進行游戲。二、設計內容1.主模塊圖2.1主程序流程圖 2.2 用例圖 : 返回重新選擇背景圖片及難度級別顯示原圖 不顯示拼圖成功是否選擇原圖提示開始游戲選擇難度級別選擇背景圖片用戶 2.3主程序類調用關系圖2.4 CPictureDlg類中成員函數(shù)主要調用關系圖三、設計方案論述 本程序有一個CPictureDlg類,它公有繼承CDialog類的一些性質。CDialog類中包括位圖的讀入和顯示,拼圖游戲中的Picture都是位圖資源。在游戲程序中,采用Static Text即靜態(tài)文本控件來顯示位圖。靜態(tài)文本控件的功能比較簡單,可顯示字符串,圖標,位圖。 先為對話框的“游戲”中的菜單項“容易”和“困難”添加消息響應為另外還需為CPictureDlg類添加BOOL型變量Easy來標識游戲的難度(分為9格或16格),同時添加BOOL型變量IsRnd用來標識圖格是否進行了隨機位置的初始化,接下來為CPictureDlg對話框添加16個Static控件(可以先設置好一個控件后,再通過復制得到其它的控件),并設置它們的屬性:ID設為IDC_IMAGE0到IDC_IMAGE15,Tabstop請勾上,Type屬性設為Bitmap,控件添加好了后,我們需要添加一個CStatic類型的數(shù)組m_Image16,與這16個Static控件相關聯(lián),通過這個操作這個數(shù)組的下標來控制這16個控件對圖像進行分格顯示。建立關聯(lián)的代碼應寫在CPictureDlg類中系統(tǒng)生成的OnInitDialog()函數(shù)體內,這個函數(shù)是整個對話框程序運行的入口,相當于一個main函數(shù),在這個函數(shù)體里,我們也需要為之前聲明的變量提供初始值,即將變量初始化,變量沒有初始化的后果通常會造成內存泄露,使程序在運行時出現(xiàn)莫名奇妙的錯誤。判斷游戲是否完成的函數(shù)IsWin(),只要所有的Static控件都回到了相應的位置,就可以認為用戶己完成了拼圖,即游戲完成。 四、調試分析1.實際完成的情況(1)完成的功能: 本程序除了實現(xiàn)了拼圖所要求的基本功能外,還添加了背景音樂、計算步數(shù)和游戲所用的時間,當游戲開始時背景音樂自動循環(huán)播放,步數(shù)隨player操作自動增加,時間自動增加。 (2)支持的數(shù)據(jù)類型: BOOL類型、控件數(shù)組類型。2. 程序的性能分析 本程序能夠很好的運行,并且畫面質量以及音質方面都很高3. 上機過程中出現(xiàn)的問題及其解決方案 1)開始導入圖片時,圖片不能顯示,重新導入bmp格式的圖片后解決了。 2)開始建立了時間函數(shù)OnTimer,但是游戲運行后時間并不增加,在開始游戲對應的函 數(shù)中增加SetTimer函數(shù),得到想要的結果。 3)初始設置的快捷鍵無效,查閱資料后加入Accelerator及相應的函數(shù),使得快捷鍵有效。4. 程序中可以改進、擴充的功能及設計實現(xiàn)構想。 1)游戲的難度等級有點少,可以適當增加幾個等級。 2)游戲未設置根據(jù)用戶花費的時間和步數(shù)判定用戶的成績并進行排名的功能,可以增設,以便用戶了解自己玩的水平。5、 用戶手冊1.打開Picture文件夾,雙擊Ppicture.dsw標志打開程序,然后運行。2.開始程序會出現(xiàn)以下歡迎界面: 3.用戶需要選擇圖片、難度和圖片風格,然后單擊圖片開始游戲,計時器開始計時,用戶通過鼠標單擊空格周圍的圖片來改變其位置,用戶每單擊一次,步數(shù)增加一次。4.游戲中用戶可通過單擊“提示”菜單項或按F4來查看圖像的縮略圖及游戲相關信息。圖像縮略圖 游戲相關信息 5. 用戶也可以單擊菜單欄中的重置或按快捷鍵F3重置圖片,會出現(xiàn)提示信息,用戶單擊確定重置圖片。提示框如下: 6.當完成拼圖后系統(tǒng)會自動給出成功提示,并顯示用戶的成績,用戶單擊確定后可以選擇其他圖片或難度繼續(xù)游戲,也可以選擇單擊“退出”或按Esc退出游戲。六、設計總結通過本次課程設計,學習并初步掌握了基于對話框的MFC程序的設計,并學會了使用CStatic控件操作位圖。熟悉了在基于對話框的工程中加入菜單操作、用代碼操作菜單、Windows位圖文件的基本結構、Visual C+中對位圖資源的操作、Visual C+中對自定義位圖文件的操作、設置相關位圖的概念、用Static控件顯示位圖以及用Status Bar顯示提示信息和Visual C+隨機函數(shù)。在設計過程中,曾遇到了兩個瓶頸導致程序一度無法完成,第一個是位圖文件的添加,包括將圖片格式轉換成BMP格式、添加相關Static控件,尤其是對控件圖標不熟悉的情況下,一時不知道在哪兒添加控件,后來上網查閱并請教同學才得以完成控件的添加,使得程序可以繼續(xù)完成。不過在程序即將結束的時候,又遇到了一個新的問題,導致程序差點功虧一簣,問題就是圖片的縮略圖的添加,也就是游戲中的“提示”的應用,當然沒有“提示”操作,并不會影響整個程序的運行環(huán)境,但是為了使游戲者能夠順利的完成游戲,此“提示”操作必不可少,在糾結了一段時間之后,在與同學的商討下,終于完成了縮略圖的添加,為程序的順利完成提供了幫助。在本次設計的完成過程中,我對軟件的開發(fā)有了一個初步的認識,一個小型游戲軟件尚且需要不斷地查閱資料、請教別人,那么完成一個大型的軟件,必定需要更加復雜的過程。所以在做軟件開發(fā)時首先要保持一個平靜的心態(tài),靜下心來潛心去研究,同時還要熟悉的掌握、靈活的運用所學知識,方能完成設計。也對MFC程序開發(fā)也有了相應的了解,每一個函數(shù)都有其特定的用途,掌握好這其中的一些關聯(lián),對一個程序的完成不無好處,這次課程設計為我以后編程的相關學習奠定了基礎,使我在不同方面得到了鍛煉。七、程序中類的主要的成員函數(shù)BOOL OnInitDialog(); /初始化函數(shù)void OnRun(UINT nBitmapID,UINT nMenuID);/加載位圖資源BOOL IsWin(); /判斷拼圖是否成功void MoveImage(int num); /移動隨機小圖塊void Rnd(); /隨機設置小圖塊的位置UINT MapRand(UINT nMax); /隨機函數(shù)void SetImage(); /把圖像拷貝到Static控件void SetPos() / 初始化Staic 控件的位置CString IntToString(int number); /為游戲添加計時器void OnTimer(UINT nIDEvent); /計時函數(shù)void SetPre(); /生成略縮圖void CPictureDlg:OnForHelp() /顯示略縮圖void ShowItem(); /顯示幫助對話框八、主要參考文獻 1.鄭莉.C+語言程序設計(第3版)北京:清華大學出版社,2005.7 2.錢能.C+程序設計教程(第2版)北京:清華大學出版社,2005.8 3.黃維通.Visual C+面向對象與可視化程序設計(第2版).北京:清華大學出版社, 2003.12 4.劉路放.Visual C+與面向對象程序設計教程(第二版).北京:高等教育出版社,2007.8 5. 潘愛民. COM原理與應用.北京:清華大學出版社,1999.11九、附錄BOOL CPictureDlg:OnInitDialog()/整個對話框程序運行的入口CDialog:OnInitDialog();/ Set the icon for this dialog. The framework does this automatically/ when the application's 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 Bitmap.LoadBitmap(IDB_BITMAP6);/初始界面是圖像BITMAP6pKDC = new CDC;pMainMenu = GetMenu(); /獲取菜單Style3d = TRUE;Islong = FALSE;Advan = FALSE;Easy = TRUE;TimeCon = "計時器"IntStep = 0;Strstep = "步數(shù)"SetWindowPos(NULL,0,0,600,700,SWP_NOMOVE); /控制窗口大小SetTimer(10,1000,NULL);/10表示計時器的名字,1000表示時間間隔是1000毫秒,NULL表示使用onTimer函數(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_Image0.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.SubclassDlgItem(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_Image14.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)/截獲控制命令的函數(shù)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();/用來顯示一個模態(tài)對話框,其返回值對應于用來關閉對話框的控件的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,/ this is automatically done for you by the framework.void CPictureDlg:OnPaint() /系統(tǒ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 = 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();/調用SetImage函數(shù)將圖片拷貝到Static控件上面if(pKDC) pKDC->DeleteDC();/ The system calls this to obtain 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得到指向彈出菜單對象的指 pSubMenu->CheckMenuItem(ID_PICTURE1,MF_UNCHECKED);/用CheckMenuItem方法為nMenuID所指定的菜單項放置選中標記 pSubMenu->CheckMenuItem(ID_PICTURE2,MF_UNCHECKED);/用CBitmap對象的LoadBitmap方法將nBitmapID所指定的位圖載入 pSubMenu->CheckMenuItem(ID_PICTURE3,MF_UNCHECKED); pSubMenu->CheckMenuItem(ID_PICTURE4,MF_UNCHECKED); pSubMenu->CheckMenuItem(ID_ADVAN,MF_UNCHECKED); pSubMenu->CheckMenuItem(nMenuID, MF_CHECKED); count = 0; Islong = FALSE; CanCount = FALSE; IsRnd = FALSE; Advan = FALSE; Bitmap.DeleteObject();/先調用函數(shù)CGdiObject:DeleteObject刪除由LoadBitmap加載過的位圖 Bitmap.LoadBitmap(nBitmapID);/用LoadBitmap方法載入新的位圖對象 SetPos(); SetImage(); /IsWin();void CPictureDlg:OnPicture1() / TODO: Add your command handler code hereOnRun(IDB_BITMAP1, ID_PICTURE1);/調用OnRun()函數(shù)加載位圖m_wndStatusBar.SetText("三只小熊",0,0);IntStep = 0;/設定初始步數(shù)為0SetStep(IntStep);/調用記步函數(shù),計算步數(shù)PlaySound("yin.wav", NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnPicture2() / TODO: Add your command handler code hereOnRun(IDB_BITMAP2, ID_PICTURE2);/調用OnRun()函數(shù)加載位圖m_wndStatusBar.SetText("阿貍",0,0);IntStep = 0;/設定初始步數(shù)為0 SetStep(IntStep);/調用記步函數(shù),計算步數(shù)PlaySound("yue.wav", NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnPicture3() / TODO: Add your command handler code hereOnRun(IDB_BITMAP3, ID_PICTURE3);/調用OnRun()函數(shù)加載位圖m_wndStatusBar.SetText("小可愛",0,0); IntStep = 0;/設定初始步數(shù)為0SetStep(IntStep);/調用記步函數(shù),計算步數(shù)PlaySound("l.wav", NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnPicture4() / TODO: Add your command handler code hereOnRun(IDB_BITMAP4, ID_PICTURE4);/調用OnRun()函數(shù)加載位圖m_wndStatusBar.SetText("小象",0,0);IntStep = 0;/設定初始步數(shù)為0SetStep(IntStep);/調用記步函數(shù),計算步數(shù)PlaySound("ai.wav", NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnPicture5() / TODO: Add your command handler code hereOnRun(IDB_BITMAP5, ID_PICTURE5);/調用OnRun()函數(shù)加載位圖m_wndStatusBar.SetText("比卡丘",0,0); IntStep = 0;/設定初始步數(shù)為0SetStep(IntStep);/調用記步函數(shù),計算步數(shù)PlaySound("天籟童聲 - Tell Me Why.wav", NULL, SND_LOOP | SND_ASYNC);void CPictureDlg:OnAdvan() /自定義圖片的函數(shù)/用LoadImage方法來加載自定義文件中的位圖資源,然后用GetObject方法得到其BITMAP對象/ 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; CanCount = 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)/判斷圖片是否是長大于高hBitmap = (HBITMAP):LoadImage(NULL, dlg.GetFileName(),IMAGE_BITMAP, 650, 600, LR_LOADFROMFILE);/限定自定義圖片的大小Width = 650; Height = 600;Islong = FALSE;else if(bm.bmWidth < bm.bmHeight)hBitmap = (HBITMAP):LoadImage(NULL,dlg.GetFileName(),IMAGE_BITMAP, 600, 650, LR_LOADFROMFILE);Width =600; Height = 650;Islong = TRUE;Bitmap.DeleteObject();SetPos();SetImage();/IsWin();m_wndStatusBar.SetText(dlg.GetFileTitle(),0,0);else if(Result = IDCANCEL)return;void CPictureDlg:OnEasy() /簡單游戲函數(shù)/ TODO: Add your command handler code herepSubMenu = pMainMenu->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ù)為0SetStep(IntStep);/調用記步函數(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("有點難度!",0,0);IntStep = 0;SetStep(IntStep);void CPictureDlg:SetPos()/對Static控件的位置進行初始化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;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, SWP_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_NOMOVE);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 <= con; i+)CDC *pDC = new CDC;CClientDC dc(&m_Imagei);pDC->CreateCompatibleDC(&dc);pDC->SelectObject(picture);dc.BitBlt(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 <= con; j+)CClientDC dc(&m_Imagecon+1+j);CDC *pDC = new CDC;pDC->CreateCompatibleDC(&dc);pDC->SelectObject(picture);dc.BitBlt(0,0,x,y,pDC,x*j,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;for(int k = 0; k <= con; k+)CClientDC dc(&m_Image(con+1)*2+k);CDC *pDC = new CDC;pDC->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,0,),RGB(0,0,0,);delete pDC;if(!Easy)for(int l = 0; l <= 3; l+)CClientDC dc(&m_Imagel+12);CDC *pDC = new CDC;pDC->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->GetSubMenu(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 CPictureDlg: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)/隨機函數(shù)int nRand = rand();float fMap = (float)nMax / RAND_MAX;float fRetVal = (float)nRand*fMap+0.5f;return (UINT)fRetVal;void CPictureDlg:Rnd()/設定隨機圖格的位置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; b+) m_Imagelevel.GetWindowPlacement(&wp15); m_Imageb.GetWindowPlacement(&wpnum); xnum = wpnum.rcNormalPosition.left; ynum = wpnum.rcNormalPosition.top; if(wpnum.rcNormalPosition.top = wp15.rcNormalPosition.top && wpnum.rcNormalPosition.left =wp15.rcNormalPosition.left - x) m_Imageb.SetWindowPos(NULL,xnum+x,ynum,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(NULL,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;if(wpnum.rcNormalPosition.top=wp15.rcNormalPosition.top&& wpnum.rcNormalPosition.left =wp15.rcNormalPosition.left + x)m_Imagec.SetWindowPos(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; if(wpnum.rcNormalPosition.left=wp15.rcNormalPosition.left&& wpnum.rcNormalPosition.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 <= level - 1; e+) m_Imagelevel.GetWindowPlacement(&wp15);m_Imagee.GetWindowPlacement(&wpnum);xnum = wpnum.rcNormalPosition.left;ynum = wpnum.rcNormalPosition.top; if(wpnum.rcNormalPosition.left= wp15.rcNormalPosition.left&& wpnum.rcNormalPosition.top =wp15.rcNormalPosition.top - y) m_Imagee.SetWindowPos(NULL,xnum,ynum+y,0,0,SWP_NOSIZE);m_Imagelevel.SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);if(Easy) m_Image8.ShowWindow(SW_HIDE);else if(!Easy)m_Image8.ShowWindow(SW_SHOW);m_Image15.ShowWindow(SW_HIDE);pSubMenu = pMainMenu->GetSubMenu(0);pSubMenu->EnableMenuItem(ID_FORHELP,MF_ENABLED);IsRnd = TRUE;CanCount=TRUE;void CPictureDlg:MoveImage(int num)/移動隨機圖格的函數(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) if(wpnum.rcNormalPosition.top=wp15.rcNormalPosition.top &&wpnum.rcNormalPosition.left =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); if(wpnum.rcNormalPosition.top=wp15.rcNormalPosition.top &&wpnum.rcNormalPosition.left =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); if(wpnum.rcNormalPosition.left=wp15.rcNormalPosition.left &&wpnum.rcNormalPosition.top =wp15.rcNormalPosition.top + y) m_Imagenum.SetWindowPos(NULL,xnum,ynum - y,0,0,SWP_NOSIZE);m

注意事項

本文(C++課程設計報告 - 拼圖游戲)為本站會員(少***)主動上傳,裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。 若此文所含內容侵犯了您的版權或隱私,請立即通知裝配圖網(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網速或其他原因下載失敗請重新下載,重復下載不扣分。




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

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

備案號:ICP2024067431-1 川公網安備51140202000466號


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