C++課程設(shè)計:連連看游戲_第1頁
C++課程設(shè)計:連連看游戲_第2頁
C++課程設(shè)計:連連看游戲_第3頁
C++課程設(shè)計:連連看游戲_第4頁
C++課程設(shè)計:連連看游戲_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、.課 程 設(shè) 計 報 告 課程名稱:面向?qū)ο蟪绦蛟O(shè)計C+ 設(shè)計題目:連連看游戲 專 業(yè):計算機科學(xué)與技術(shù) 姓 名: 學(xué) 號: 指導(dǎo)教師:李 曉 虹2016 年 1 月 1 日1、 系統(tǒng)需求分析本程序是一款連連看游戲,該程序應(yīng)該具備以下功能:(1) 該游戲界面為黑色背景加方格圖片類型,不同的圖片上有不同的圖案,位置為隨機打亂。(2) 游戲規(guī)則為將相同圖案的圖片進(jìn)行連接,但需滿足只能至少單邊無阻呈直線連接,否則無效。一旦成功連接兩個相同的圖案,則這兩個圖案消失,如此反復(fù)直到所有的圖片消失,游戲通關(guān)。(3) 圖片的位置具有隨機性,但要求都是必須成對出現(xiàn)。 1.1 功能需求(1)主界面需求顯示玩家當(dāng)前

2、關(guān)卡數(shù)及得分?jǐn)?shù)提供“新游戲”按鈕,單擊后可以重新開始游戲提供“退出”按鈕,單擊后可以退出程序提供“幫助”按鈕,單擊后可以彈出制作人信息,聯(lián)系方式等 (2)消除需求玩家點擊圖案,圖案會變色以提示被選中;此時再點擊另一個圖案,如果圖案相同,則這兩個圖案消失;此外,兩個圖案中間必須無其他圖片阻礙才有效,消除規(guī)則如下:1條 直線相連: 圖1-1 兩條直線相連: 圖1-2三條直線相連: 圖1-3 (3)新游戲需求 當(dāng)玩家點擊新游戲按鈕時,游戲?qū)⒅匦律尚碌膱D案并重排,且重排的方式是隨機的。 (4)幫助當(dāng)玩家點擊幫助時,將彈出制作者信息以及秘籍。 (5)退出點擊退出按鈕,將退出程序。1.2時間性能需求響應(yīng)

3、速度:3秒以內(nèi)客戶端:可執(zhí)行文件,點開即可運行,方便快捷。 1.3界面友好需求系統(tǒng)提供統(tǒng)一的界面操作方式。要求界面操作方式美觀大方,布局合理,功能完善,整個操作簡單,對于初級用戶容易上手。良好的操作界面可以給游戲玩家?guī)砀玫赜螒蝮w驗和愉悅的心情。復(fù)雜的游戲界面會造成玩家的負(fù)擔(dān),所以在設(shè)計程序時,功能以及各種操作都應(yīng)當(dāng)盡量簡單明了。 1.4系統(tǒng)可用性需求 系統(tǒng)操作快捷,內(nèi)容完整是保證用戶進(jìn)行使用的基礎(chǔ)。因此,應(yīng)準(zhǔn)確而詳細(xì)的理解各用戶區(qū)的特征,任務(wù)和使用環(huán)境,在“有效性”、“效率”等各個方面滿足各類用戶對系統(tǒng)的需要。2、 系統(tǒng)總體設(shè)計 2.1總體系統(tǒng)圖 此系統(tǒng)是運用VC+6.0中MFC框架的多文

4、檔視圖開發(fā)的,文檔-視圖結(jié)構(gòu)提供的應(yīng)用程序接口有利于進(jìn)行窗口操作編程。此游戲引擎包含在視圖類中。有時引擎和視圖是一體的,并且可能無可避免,因為視圖需要為引擎處理用戶輸入和繪圖。 游戲程序設(shè)計一般都采用面向?qū)ο蟮脑O(shè)計模式,WindowsAPI提供了一個簡單的圖像顯示接口,利用MFC的多文檔視圖結(jié)構(gòu)的面向?qū)ο笤O(shè)計模式。此系統(tǒng)的總體系統(tǒng)圖如下:連連看游戲游戲玩家 界面顯示菜單功能模塊圖像處理模塊鼠標(biāo)操作命令Windows操作系統(tǒng)Vc+6.0平臺API接口和c+圖2-1  系統(tǒng)功能圖2.2 功能模塊總體設(shè)計 (1)鼠標(biāo)操作模塊  玩家在玩游戲時需要運用鼠標(biāo)與游戲系統(tǒng)進(jìn)行交

5、互實現(xiàn)是運用MFC中的鼠標(biāo)事件觸發(fā)的.鼠標(biāo)進(jìn)行交互的事件主要有兩個,一個是用戶點擊游戲場景中的圖片時觸發(fā)的事件。另外一種是用戶點擊菜單欄上的菜單按鈕時說觸發(fā)的鼠標(biāo)事件。  當(dāng)用戶點擊游戲場景中的圖像塊時就會響應(yīng)鼠標(biāo)的OnLButtonDown事件。 當(dāng)用戶點擊菜單欄上的菜單命令時就會觸發(fā)相應(yīng)的菜單命令對應(yīng)的相應(yīng)的事件。  (2)圖像處理模塊  程序運行后,用戶通過游戲菜單的新游戲命令開始進(jìn)入游戲,在這個模塊里要把資源文件中的圖片進(jìn)行處理然后加載到游戲場景中程序中是通過DrawMap()方法實現(xiàn)的。其中用到的API函數(shù)主要是是BitBlt,他的主要功能是將某一內(nèi)存塊

6、的數(shù)據(jù)傳送到另一內(nèi)存塊。 (3) 菜單模塊  玩家在游戲游戲過程中隨時可以通過選擇不同的菜單命令來進(jìn)行相應(yīng)的操作,菜單的制作是通過MFC框架中多文檔程序的菜單欄來添加的,菜單包含一下幾個部分:(1)游戲菜單中的新游戲和退出命令。(2)幫助菜單里面的關(guān)于連連看命令。  (4)界面顯示模塊  游戲場景中界面的顯示包括以下部分:游戲的關(guān)卡數(shù)、目前的分?jǐn)?shù)、游戲主場景。這些顯示信息會隨著游戲的進(jìn)行而動態(tài)改變。整個連連看游戲的系統(tǒng)是在VC+6.0開發(fā)環(huán)境中進(jìn)行開發(fā)的,開發(fā)過程中大量的使用了微軟提供的API接口方法,減少了程序代碼的編寫量、提高了編程效率。3

7、.系統(tǒng)詳細(xì)設(shè)計3.1各個功能實現(xiàn)菜單系統(tǒng) 游戲幫助 退出 新游戲圖3-1  菜單系統(tǒng)3.2連連看消去算法實現(xiàn) 在檢驗兩個方塊能否消掉的時候,我們要讓兩個方塊同時滿足兩個條件才行,就是兩者配對并且連線成功。 分3種情況:(從下面的這三種情況,我們可以知道,需要三個檢測,這三個檢測分別檢測一條直路經(jīng)。這樣就會有三條路經(jīng)。若這三條路經(jīng)上都是空按鈕,那么就剛好是三種直線(兩個轉(zhuǎn)彎點)把兩個按鈕連接起來了)  * 1.相鄰   * 2. 若不相鄰的先在第一個按鈕的同行找一個空按鈕。1)

8、.找到后看第二個按鈕橫向到這個空按鈕所在的列是否有按鈕。2).沒有的話再看第一個按鈕到與它同行的那個空按鈕之間是否有按鈕。3).沒有的話,再從與第一個按鈕同行的那個空按鈕豎向到與第二個按鈕的同行看是否有按鈕。沒有的話路經(jīng)就通了,可以消了.  * 3.若2失敗后,再在第一個按鈕的同列找一個空按鈕。1).找到后看第二個按鈕豎向到這個空按鈕所在的行是否有按鈕 2).沒有的話,再看第一個按鈕到與它同列的那個空按鈕之間是否有按鈕。3).沒有的話,再從與第一個按鈕同列的那個空按鈕橫向到與第二個按鈕同列看是否有按鈕。沒有的話路經(jīng)就通了,可以消了。 *

9、0; 若以上三步都失敗,說明這兩個按鈕不可以消去。4. 系統(tǒng)調(diào)試和測試 4.1系統(tǒng)調(diào)試本系統(tǒng)調(diào)試過程中遇到問題,原因和解決方法如下:4.1.1信息顯示錯誤 在整個游戲界面上方是游戲過程總的必要信息的顯示,比如關(guān)卡,積分等。在這些數(shù)據(jù)更新時出現(xiàn)的模糊問題是因為沒有寫入必要的刷新函數(shù)造成的,其實在這樣的圖形編程問題的刷新函數(shù)是必不可少的,在適當(dāng)?shù)奈恢眉尤胨⑿潞瘮?shù)即可保持圖形圖像的正確顯示。 4.1.2音樂音效不能正常播放 這樣的問題是容易遇到的,總結(jié)原因有兩點: (1)資源文件的ID以及資源文件的文件名問題。由于資源文件很多,很容易將這些文件混淆,當(dāng)資源文件引入工程之后就不可再改動了。

10、(2)文件格式的問題。不同的音樂文件有不同的播放格式。 4.1.3游戲程序不能再其他機器上運行 編寫完成的程序要進(jìn)行推廣,這個問題是一定要解決的。制作好的游戲程序必須要附有必要的軟件以及詳細(xì)的使用方法。由于VC+6.0環(huán)境文件體積比較大,拷貝不容易,所以拷貝過程中必須要附帶必要的庫文件或者直接編譯程Release版本在拷貝給其他的玩家。 4.2系統(tǒng)測試 測試過程如下:首先運行程序,可以測試游戲的初始化是否有問題。包括界面的顯示問題,位置是否正確,是否表達(dá)到了自己所預(yù)想的目的。然后再初級,中級,高級之間來回切換,用測試游戲的隨機性。小方塊的分布有沒有存在問題。然后對于提示和重排進(jìn)行連續(xù)使用,觀察

11、上方信息的顯示基本無誤,必要的提示也及時彈出。游戲的每一個功能都要進(jìn)行檢查,而且要進(jìn)行反復(fù)使用才可能發(fā)現(xiàn)潛在的問題。至此,以上,對于圖形的現(xiàn)實問題基本檢查完畢。之后自己進(jìn)行游戲若干次,每一級的所有小方塊都能完全消除,這說明小方塊是成對出現(xiàn)的,隨機性也是沒有錯誤的,在游戲結(jié)束后彈出提示輸入姓名,輸入姓名后將此次游戲的得分自動保存到積分榜,查看積分榜,對應(yīng)以前的分?jǐn)?shù)也能夠大小順序排列。測試過程表明此游戲程序功能基本正常,運行過程基本沒有問題。 5. 結(jié)果分析 1.游戲主界面:圖 5-1 游戲主界面圖點擊游戲程序圖標(biāo),可以正常啟動游戲,出現(xiàn)以上的主界面。菜單欄有兩個菜單選項,點擊可以觸發(fā)相應(yīng)的功能。

12、2. 開始游戲界面圖 5-2 游戲開始界面圖 點擊游戲菜單項,選擇新游戲按鈕,即可開始游戲。界面將出現(xiàn)當(dāng)前游戲的級別、關(guān)重列剩余次數(shù)以及提示剩余次數(shù)等相關(guān)游戲信息。 圖 5-3 游戲中界面圖4.游戲成功界面6. 總結(jié) 通過此次c+課程設(shè)計,我更加扎實的掌握了有關(guān)c+開發(fā)軟件的知識,雖然在設(shè)計過程中遇到了一些問題,但正是這些問題讓我學(xué)會了如何思考,如何通過利用身邊的網(wǎng)絡(luò)資源以及書籍來解決。也暴露出了前期我在這方面的知識欠缺和經(jīng)驗不足,但也學(xué)會在問題中不斷完善自己的專業(yè)知識能力,彌補不足。同時讓我明白一個道理,實踐出真知,只有通過自己的親自動手制作,才能真正的掌握已學(xué)到的知識。此次課程設(shè)計,從理論

13、到實踐,可以說得是苦多于甜,但是可以學(xué)到很多很多的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,但可喜的是最終都得到了解決。這也讓我對自己的能力有了更大的肯定,讓我以后無論是生活還是學(xué)習(xí)中都有更大的信心和干勁。附錄 主要程序代碼linkView.cpp/ linkView.cpp : implementat

14、ion of the CLinkView class/#include "stdafx.h"#include "link.h"#include "linkDoc.h"#include "linkView.h"#include "windows.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CLinkViewIMPLEMENT_DYNCREATE(CLinkVie

15、w, CView)BEGIN_MESSAGE_MAP(CLinkView, CView)/AFX_MSG_MAP(CLinkView)ON_WM_LBUTTONDOWN()ON_WM_PAINT()ON_WM_ERASEBKGND()ON_WM_MOUSEMOVE()ON_WM_CHAR()ON_WM_CANCELMODE()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CLinkView construction/destructionCLinkView:CLinkView()/ TODO: add construction code hereCLinkView:CLinkV

16、iew()BOOL CLinkView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CLinkView drawingvoid CLinkView:OnDraw(CDC* pDC)CLinkDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for nati

17、ve data here/ CLinkView diagnostics#ifdef _DEBUGvoid CLinkView:AssertValid() constCView:AssertValid();void CLinkView:Dump(CDumpContext& dc) constCView:Dump(dc);CLinkDoc* CLinkView:GetDocument() / non-debug version is inlineASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLinkDoc);return (CLinkDoc*

18、)m_pDocument;#endif /_DEBUG/聲明外部變量theAppextern CLinkApp theApp;/進(jìn)入新的關(guān)卡void NewStage( CDC * pDC ) srand(time(0);int i , j ;for( i = 0 ;i<leny ; +i )for( j =0 ; j<lenx ; +j )theApp.PicArrayij.visible = false ;int x , y ; /每關(guān)出現(xiàn)lenx種圖形,每種圖形各有l(wèi)eny個 ,本程序中l(wèi)enx=10 ,leny = 8 for( i=0; i<lenx-1 ; +i

19、)for( j =0 ; j<leny ; +j )bool re = true ;while( re ) y = rand()%leny ;x = rand()%lenx ;if( theApp.PicArrayyx.visible = false )theApp.PicArrayyx.type = i ; theApp.PicArrayyx.visible = true ;theApp.PicArrayyx.x = x ; theApp.PicArrayyx.y = y ;re = false ;for( i = 0; i<leny ; +i ) /剩下最后一種圖片就不用隨機了

20、for( j =0 ; j<lenx ; +j )if( theApp.PicArrayij.visible = false )theApp.PicArrayij.type = lenx-1 ; theApp.PicArrayij.visible = true ;theApp.PicArrayij.x = j ; /千萬注意對應(yīng)關(guān)系!theApp.PicArrayij.y = i ;CString str ; str.Format( "您的得分是 %u ,共%d關(guān),現(xiàn)在是第 %d 關(guān)", theApp.score ,totalStage,theApp.stage) ;

21、pDC->TextOut( 150 , 15 , str) ;theApp.PaintPicture(pDC); /*在圖片a與圖片b間畫線* CClientDC & dc為當(dāng)前的dc*/void draw_line( picture & a , picture & b , CClientDC & dc ) /CClientDC類不能作按值傳遞參數(shù)CPoint p1( theApp.margin + a.x * 64 + 64 / 2 , theApp.margin + a.y * 64 + 64 / 2 ) ;CPoint p2( theApp.marg

22、in + b.x * 64 + 64/ 2 , theApp.margin + b.y * 64 + 64 / 2 ) ;dc.MoveTo( p1 );dc.LineTo( p2 ) ;/將圖片a從當(dāng)前窗口中抹去void paint_black( picture a , CDC *pDC ) CBrush backBrush(RGB(0, 0, 0);CBrush* pOldBrush = pDC->SelectObject(&backBrush);CRect rect;pDC->GetClipBox(&rect);pDC->PatBlt(theApp.ma

23、rgin + width * a.x , theApp.margin + width * a.y, width , width , PATCOPY);pDC->SelectObject(pOldBrush);/判斷圖片a與圖片b能否直接相連(a、b間連線的轉(zhuǎn)角數(shù)為0 )bool match_direct( picture a , picture b , CClientDC & dc )/a、b的x或y坐標(biāo)必須有且只有一個相同才能直接相連if (! ( a.x=b.x | a.y = b.y ) )return false ;/判斷a、b間是否有其他圖片阻隔int i ;bool

24、match_x = false ;if( a.x = b.x )match_x = true ;if( a.y > b.y ) for( i=a.y-1 ; i>b.y ; -i )if( theApp.PicArray i a.x .visible = true )match_x = false ;if( b.y > a.y ) for( i = b.y -1 ; i>a.y ; -i )if( theApp.PicArray i a.x .visible = true )match_x = false ;bool match_y = false ;if( a.y =

25、 b.y )match_y = true ;if( a.x > b.x ) for( i = a.x - 1 ; i>b.x ; -i ) if( theApp.PicArray a.y i .visible = true )match_y = false ;if( b.x > a.x )for( i = b.x -1 ; i>a.x ; -i ) if( theApp.PicArray a.y i .visible = true )match_y = false ;if( match_x | match_y )/draw_line( a , b , dc ) ; /不

26、能寫在這里,否則match_one_corner會不正常return true ;return false ;/判斷a、b間能否通過只有一個轉(zhuǎn)角的折線相連bool match_one_corner( picture a , picture b , CClientDC & dc) if( theApp.PicArray b.y a.x .visible = false &&match_direct( a , theApp.PicArray b.y a.x , dc) && match_direct( b , theApp.PicArray b.y a.x

27、,dc) )draw_line( a , theApp.PicArray b.y a.x ,dc ) ; draw_line( b , theApp.PicArray b.y a.x ,dc) ;return true ;if( theApp.PicArray a.y b.x .visible = false &&match_direct( a , theApp.PicArray a.y b.x ,dc ) && match_direct( b , theApp.PicArray a.y b.x ,dc) )draw_line( a , theApp.PicAr

28、ray a.y b.x ,dc ) ; draw_line( b , theApp.PicArray a.y b.x ,dc) ;return true ;return false ;/判斷a、b能否通過有2個轉(zhuǎn)角的折線相連bool match_two_corner( picture a , picture b , CClientDC & dc ) int i ; /轉(zhuǎn)化為a與c能直接相連,而c與b可以通過有一個轉(zhuǎn)角的折線相連的情況for( i=a.x -1 ; i>=0 ; -i )if( theApp.PicArraya.yi.visible = true )break;el

29、seif( match_one_corner( theApp.PicArraya.yi , b ,dc) )draw_line( a , theApp.PicArraya.yi ,dc ) ;return true ;for( i = a.x +1 ; i<lenx ; +i )if( theApp.PicArraya.yi.visible = true )break;elseif( match_one_corner( theApp.PicArraya.yi , b ,dc ) )draw_line( a , theApp.PicArraya.yi ,dc ) ;return true

30、;for( i = a.y - 1 ; i>=0 ; -i )if( theApp.PicArrayia.x.visible = true )break;elseif( match_one_corner( theApp.PicArrayia.x ,b ,dc) )draw_line( a , theApp.PicArrayia.x ,dc ) ;return true ;for( i = a.y + 1 ; i<leny ; +i )if( theApp.PicArrayia.x.visible = true )break;elseif( match_one_corner( the

31、App.PicArrayia.x ,b ,dc) )draw_line( a , theApp.PicArrayia.x ,dc ) ;return true ;return false ;/判斷a與b能否相連(條件:a與b類型相同,且能用轉(zhuǎn)角不超過3個的折線相連bool match( picture a , picture b , CClientDC & dc ) if( a.type != b.type )return false ;/直接相連if( match_direct( a, b , dc ) )draw_line( a , b , dc ) ;Sleep(500) ; /

32、連線在窗口中顯示0.5 s 后消失for( int i=0 ;i<leny ; +i )for( int j =0 ;j<lenx ; +j )if( theApp.PicArrayij.visible = false )paint_black( theApp.PicArrayij , &dc ) ;return true ;/通過一個或兩個轉(zhuǎn)角相連的情況if( match_one_corner( a , b ,dc ) | match_two_corner( a, b ,dc) )Sleep(500) ;for( int i=0 ;i<leny ; +i )for(

33、 int j =0 ;j<lenx ; +j )if( theApp.PicArrayij.visible = false )paint_black( theApp.PicArrayij , &dc ) ;return true ;return false ;/點擊左鍵時判斷前后點擊的圖片能否消去void CLinkView:OnLButtonDown(UINT nFlags, CPoint point) if( point.x <=theApp.margin | point.y<=theApp.margin |point.x >= theApp.margin

34、+lenx*width | point.y >= theApp.margin +leny*width )return ;int x = ( point.x - theApp.margin ) / width ;int y = ( point.y - theApp.margin ) / width ; int Px = ( theApp.PreClick.x - theApp.margin) / width ; int Py = ( theApp.PreClick.y - theApp.margin ) / width ;/設(shè)置畫筆的屬性,并關(guān)聯(lián)到dcCClientDC dc(this)

35、;int penWidth = 5; CPen pen(PS_SOLID, penWidth, RGB(255, 0, 0); dc.SelectObject(&pen); if( x = Px && y = Py ) /前后兩次點擊的是同一張圖片return ;elseif( Px <0 | Py <0 ) /這是第一次點擊的情況return ;elseif( theApp.PicArray y x .visible = true && theApp.PicArray Py Px .visible = true &&theA

36、pp.PicArray y x .type = theApp.PicArray Py Px .type &&match( theApp.PicArray y x , theApp.PicArray Py Px , dc ) )theApp.PicArray y x .visible = false ;theApp.PicArray Py Px .visible = false ;CDC* pDC=GetDC();paint_black( theApp.PicArray y x , pDC );paint_black( theApp.PicArray Py Px ,pDC ) ;

37、theApp.score += 10 ;CString str ; str.Format( "您的得分是 %u ,共%d關(guān),現(xiàn)在是第 %d 關(guān)", theApp.score ,totalStage,theApp.stage) ;pDC->TextOut( 150 , 15 , str) ;theApp.remain_num -= 2 ; if( theApp.remain_num = 0 ) /剩余圖片數(shù)為0,則通關(guān)theApp.score += theApp.stage * 100 ; CString str ; str.Format( "您的得分是 %u

38、 ,共%d關(guān),現(xiàn)在是第 %d 關(guān)", theApp.score ,totalStage,theApp.stage) ;pDC->TextOut( 150 , 15 , str) ;if( theApp.stage = totalStage ) MessageBox( "你已經(jīng)成功完成所有關(guān)卡!","恭喜!",MB_OK ) ;elseMessageBox("成功完成游戲!下面進(jìn)行下一關(guān)!","恭喜!",MB_OK );theApp.remain_num = lenx * leny ;theApp.s

39、tage + ; NewStage( pDC ) ;ReleaseDC( pDC ) ;theApp.PreClick = point ; /重畫黑色的背景BOOL CLinkView:OnEraseBkgnd(CDC* pDC) /設(shè)置brush為希望的背景顏色CBrush backBrush( RGB(0, 0, 0) );/保存舊的brushCBrush* pOldBrush = pDC->SelectObject(&backBrush);CRect rect;pDC->GetClipBox(&rect);/畫需要的區(qū)域pDC->PatBlt(rect.

40、left, rect.top, rect.Width(), rect.Height(), PATCOPY);pDC->SelectObject(pOldBrush);return TRUE;/最小化后再次恢復(fù)窗口時,需要重畫窗口void CLinkView:OnPaint() CPaintDC dc(this);CDC* pDC = GetDC();theApp.PaintPicture( pDC );ReleaseDC( pDC ) ;/鼠標(biāo)移動時,經(jīng)過的的圖片要變色void CLinkView:OnMouseMove(UINT nFlags, CPoint point ) /在圖片范

41、圍內(nèi)if( point.x > theApp.margin && point.y > theApp.margin &&point.x < theApp.margin + width * lenx && point.y <theApp.margin + width * leny )CDC* pDC = GetDC();/重畫所有圖片,主要是為了將上次經(jīng)過的變色的圖片恢復(fù)正常狀態(tài)theApp.PaintPicture( pDC );int i = ( point.x - theApp.margin )/width ;int j

42、 = ( point.y - theApp.margin )/width ;if( theApp.PicArrayji.visible = true )/鼠標(biāo)經(jīng)過的圖片要變色CBitmap bitmap3 ;bitmap3.LoadBitmap( 171 + theApp.stage ) ;/171是第一張變色圖片的資源號CDC dcCompatible3 ;dcCompatible3.CreateCompatibleDC( pDC) ;dcCompatible3.SelectObject( &bitmap3 ) ;pDC->BitBlt( theApp.margin + i*w

43、idth, theApp.margin + j*width,width,width,&dcCompatible3,0,theApp.PicArrayji.type*width,SRCCOPY ) ;/將鼠標(biāo)指向的圖片畫到右邊的空白處,圖片下面顯示說明文字CBitmap bitmap4 ;bitmap4.LoadBitmap( 191 + theApp.stage ) ;/191是第一張正常圖片的資源號CDC dcCompatible4 ;dcCompatible4.CreateCompatibleDC( pDC) ;dcCompatible4.SelectObject( &bi

44、tmap4 ) ;pDC->BitBlt( theApp.margin + width*lenx + width , theApp.margin + width ,width,width,&dcCompatible4,0,theApp.PicArrayji.type*width,SRCCOPY ) ;pDC->TextOut( theApp.margin + width*lenx + width , theApp.margin + width *2 , theApp.pic_infotheApp.stage -1 theApp.PicArrayji.type ) ;Rele

45、aseDC( pDC ) ;void CLinkView:OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) if( nChar = 1 )CDC * pDC = GetDC() ;CString str ; str.Format( "您的得分是 %u ,共%d關(guān),現(xiàn)在是第 %d 關(guān)", theApp.score ,totalStage,theApp.stage) ;pDC->TextOut( 150 , 15 , str) ;if( theApp.stage > totalStage )MessageBox( "

46、;你已經(jīng)成功完成所有關(guān)卡!","恭喜!",MB_OK ) ;elseMessageBox("您使用了秘籍,直接進(jìn)入下一關(guān)!","提示",MB_OK ) ;theApp.remain_num = lenx * leny ;theApp.stage + ; NewStage( pDC ) ;str.Format( "您的得分是 %u ,共%d關(guān),現(xiàn)在是第 %d 關(guān)", theApp.score ,totalStage,theApp.stage) ;pDC->TextOut( 150 , 15 , str

47、) ;ReleaseDC( pDC ) ;void CLinkView:OnCancelMode() CView:OnCancelMode();Link.cpp/ link.cpp : Defines the class behaviors for the application./#include "stdafx.h"#include "link.h"#include "MainFrm.h"#include "linkDoc.h"#include "linkView.h"#include &l

48、t;windows.h>#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CLinkAppBEGIN_MESSAGE_MAP(CLinkApp, CWinApp)/AFX_MSG_MAP(CLinkApp)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NOT EDIT what you see in

49、 these blocks of generated code!/AFX_MSG_MAP/ Standard file based document commandsON_COMMAND(ID_FILE_NEW, CWinApp:OnFileNew)ON_COMMAND(ID_FILE_OPEN, CWinApp:OnFileOpen)END_MESSAGE_MAP()/ CLinkApp constructionCLinkApp:CLinkApp()CLinkApp theApp;#include "mmsystem.h"#pragma comment(lib,"

50、;winmm.lib") DWORD WINAPI Play_Sound( LPVOID lpParameter )char buf128; MCI_OPEN_PARMS mciOpen; MCIERROR mciError; mciOpen.lpstrDeviceType = "mpegvideo" /mciOpen.lpstrElementName 是const char *類型的指針,這樣賦值很麻煩!char temp50 ;strcpy( temp , theApp.file_path ) ;mciOpen.lpstrElementName = temp ; mciError = mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,(DWORD)&mciOpen); if(mciError) mciGetErrorString(mciError,buf,128); return 0; UINT DeviceID = mciOpen.wDeviceID ; MCI_PLAY_PARMS mciPlay; mciEr

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論