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

下載本文檔

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

文檔簡介

1、.課 程 設(shè) 計 報 告 課程名稱:面向?qū)ο蟪绦蛟O(shè)計C+ 設(shè)計題目: 連連看 專 業(yè): 計算機科學與技術(shù) 姓 名: 學 號: 指導教師: 李 曉 虹 2016 年 1 月 7日一、系統(tǒng)需求分析 隨著人們工作壓力變得越來越大,現(xiàn)如今更多的人開始通過玩游戲來排解內(nèi)心的壓力,而各種各樣的游戲也排入市場,一些大型網(wǎng)絡(luò)游戲更是一些年輕用戶的最愛,所有連連看游戲面對市場的競爭壓力還是非常大的。分析連連看游戲,查找規(guī)則并對主要功能進行模仿程序?qū)崿F(xiàn),對于實現(xiàn)過程中出現(xiàn)的bug進行調(diào)試解決。經(jīng)過對游戲的初步分析,連連看游戲含有如下規(guī)則:根據(jù)輸入的信息,執(zhí)行相應(yīng)的布局,設(shè)定游戲的難以程度等,游戲能繼續(xù)玩的基本點是

2、兩次點擊的圖案相同,并且能夠通過某種不超過三個轉(zhuǎn)折點的路線連接起來,使兩個圖案塊消除。2、 總體設(shè)計2.1 界面設(shè)計界面采用C#技術(shù)實現(xiàn),分為游戲狀態(tài)區(qū)、游戲區(qū)和玩家排行榜。游戲狀 態(tài)區(qū)左邊是游戲進度,右邊是游戲時間,從點開第一個方塊開始計時,時間是倒著計算的;每消除一對游戲進度則會加1,時間也會加1,后面會顯示對應(yīng)的百分比;中間一大塊區(qū)域是游戲區(qū);游戲區(qū)的右邊是玩家排行榜,排行榜顯示對應(yīng)等級中成績前三的玩家名稱以及分數(shù)。2.2 功能設(shè)計實現(xiàn)功能包括:重新開始、計時、計分、游戲進度顯示、排行榜、游戲 主題切換、游戲等級切換。當玩家不想玩當前這局或玩的比較困難,覺得玩不下去了,可以點擊重新開始進

3、行重新布局,重新計時。計時和計分從實際上來說其實質(zhì)是一樣的,計分是根據(jù)玩家某局勝利后所花費的時間,也就是說花了多少時間,分數(shù)就是多少,花時間越少,對應(yīng)的分數(shù)越靠前。游戲進度是以一個進度條來顯示的,后面還有對應(yīng)的百分比,能讓玩家清晰的知道目前的游戲狀態(tài)。排榜功能是本游戲中的一個難點,排行榜的數(shù)據(jù)時存放在xml文件里面的,不同的等級對應(yīng)不同的排行榜,每當用戶變換等級時系統(tǒng)會從xml文件中讀取出前三玩家,當玩家勝利時,系統(tǒng)會對當前所得分數(shù)與xml中的數(shù)據(jù)進行比對,如果可以排榜,則提示玩家是否進行排榜,如果玩家想進入排行榜則還需輸入名稱,系統(tǒng)將會把當前玩家列入排行榜,然后顯示到游戲界面上。2.3 游戲

4、流程設(shè)計運行游戲程序,系統(tǒng)進行初始化、初始化操作包括游戲參數(shù)初始化、時 間初始化、游戲狀態(tài)初始化、布局方塊、隨機排圖等,之后等待鼠標單擊游戲方塊,第一次單擊時,游戲開始計時。第一次點擊時記錄下該方塊的坐標,點擊的方塊邊框會顯示紅色,第二次點擊時也獲得對應(yīng)坐標,并進行判斷,如果兩次點擊的為同一個方塊,則直接返回,不做任何操作,否則判斷兩個方塊的圖案是否相等,如果相等,則進行兩個方塊位置的判斷;兩個方塊的位置分為兩種情況,整個游戲的核心算法也在這里,第一種情況是兩個方塊的位置處在同一條直線上,水平線上或者垂直線上;第二種情況是兩個方塊能形成一個矩陣,兩個方塊分別是這個矩陣的兩個對角。在第二種情況中

5、分為兩種情況,一種是a轉(zhuǎn)一個拐點能到達b點,另一種是a經(jīng)過兩個拐點到達b點。如果兩個點能達成其中的某個條件連通,則畫線,然后消除兩個點,這里是直接把兩個方塊從面板上刪除了(有些程序是把這兩個方塊隱藏)。消除一對方塊后,游戲進度會加1,剩余時間也會加1秒,右邊顯示的對應(yīng)的方塊對數(shù)會減1。當這些條件都不成立的時候,說明兩點之間不能連線,則不進行任何操作。游戲會在兩種情況下結(jié)束,一種是玩家在規(guī)定的時間內(nèi)把所有的方塊都消除了,判斷方式有三個,一個是判斷進度完成,一個是判斷面板上是否還有方塊,一個是判斷右邊顯示的方塊對數(shù)是否為0。運行流程圖2.4開發(fā)環(huán)境開發(fā)環(huán)境:visual c+ 6.0開發(fā)語言:MF

6、C+C/C+操作系統(tǒng):windows7/XP三、詳細設(shè)計實現(xiàn)該功能的代碼如下:/ 連連看View.cpp : implementation of the CMyView class/#include "stdafx.h"#include "連連看.h"#include "連連看Doc.h"#include "連連看View.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMyVie

7、wIMPLEMENT_DYNCREATE(CMyView, CFormView)BEGIN_MESSAGE_MAP(CMyView, CFormView)/AFX_MSG_MAP(CMyView)ON_COMMAND(ID_Exit, OnExit)ON_COMMAND(ID_Begin, OnBegin)ON_WM_LBUTTONDOWN()ON_WM_TIMER()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMyView construction/destructionCMyView:CMyView(): CFormView(CMyView:IDD)/AFX_DATA_

8、INIT(CMyView)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INIT/ TODO: add construction code hereCMyView:CMyView()void CMyView:DoDataExchange(CDataExchange* pDX)CFormView:DoDataExchange(pDX);/AFX_DATA_MAP(CMyView)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA

9、_MAPBOOL CMyView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CFormView:PreCreateWindow(cs);void CMyView:OnInitialUpdate()CFormView:OnInitialUpdate();GetParentFrame()->RecalcLayout();ResizeParentToFit();initdata();/ CM

10、yView diagnostics#ifdef _DEBUGvoid CMyView:AssertValid() constCFormView:AssertValid();void CMyView:Dump(CDumpContext& dc) constCFormView:Dump(dc);CMyDoc* CMyView:GetDocument() / non-debug version is inlineASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc);return (CMyDoc*)m_pDocument;#endif /_

11、DEBUG/ CMyView message handlersvoid CMyView:OnDraw(CDC* pDC) / TODO: Add your specialized code here and/or call the base classMyPaint();/*void CMyView:initdata()CDC *pDC=GetDC();int i,j;int n=129;for(i=0;i<7;i+)for(j=0;j<12;j+)mapij.x=100+41*j;mapij.y=100+41*i;mapij.flag=0;mapij.p=0;bmp0.LoadB

12、itmap(234);cbmp0.CreateCompatibleDC(pDC);cbmp0.SelectObject(&bmp0);bmp200.LoadBitmap(IDB_BITMAP200);cbmp200.CreateCompatibleDC(pDC);cbmp200.SelectObject(&bmp200);for(i=1;i<104;i+)bmpi.LoadBitmap(n+i);cbmpi.CreateCompatibleDC(pDC);cbmpi.SelectObject(&bmpi);bg.LoadBitmap(IDB_bg);cbg.Cre

13、ateCompatibleDC(pDC);cbg.SelectObject(&bg);CBitmap bm;bm.CreateCompatibleBitmap(pDC,680,480);mdc.CreateCompatibleDC(pDC);mdc.SelectObject(&bm);ReleaseDC(pDC);flag=0;start=0;AfxGetApp()->m_pMainWnd->SetWindowPos(NULL,300,100,690,530,NULL);void CMyView:MyPaint()CDC *pDC=GetDC();int i,j;i

14、nt x,y,f;mdc.BitBlt(0,0,680,480,&cbg,0,0,SRCCOPY);for(i=0;i<7;i+)for(j=0;j<12;j+)x=mapij.x;y=mapij.y;f=mapij.flag;if(0=mapij.p) mdc.BitBlt(x,y,40,40,&cbmpf,0,0,SRCCOPY);elsemdc.BitBlt(x,y,40,40,&cbmp0,0,0,PATINVERT);pDC->BitBlt(0,0,680,480,&mdc,0,0,SRCCOPY);ReleaseDC(pDC);vo

15、id CMyView:OnExit() / TODO: Add your command handler code hereexit(0);void CMyView:OnBegin() / TODO: Add your command handler code herestart=1;srand(time(NULL);int i,j;int f42;for(i=0;i<42;i+)fi=1+rand()%21;for(i=0;i<7;i+)for(j=0;j<12;j+)if(i*12+j<42) mapij.flag=fi*12+j;elsemapij.flag=fi

16、*12+j-42;SetTimer(1,40,NULL);void CMyView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultif(0=start)return;int i=100,j=100;get_ij(point,&i,&j);if(100=i|100=j)return;if(200=mapij.flag|1=mapij.p)return;m_pflag.x=i;m_pflag.y=j;mapij.p=1;if

17、(1=flag)judge();mapm_p0.xm_p0.y.p=0;mapm_p1.xm_p1.y.p=0;flag=(flag+1)%2;CFormView:OnLButtonDown(nFlags, point);void CMyView:get_ij(CPoint p,int *x,int *y)int i,j;for(i=0;i<7;i+)for(j=0;j<12;j+)if(mapij.x<=p.x&&p.x<=mapij.x+40)&&(mapij.y<=p.y&&p.y<=mapij.y+40

18、)*x=i;*y=j;return;void CMyView:judge()if(mapm_p0.xm_p0.y.flag!=mapm_p1.xm_p1.y.flag)return;int i,j,n=0;bool right=false;int f84=0;search(m_p0.x,m_p0.y,&right,f);if(true=right)mapm_p0.xm_p0.y.flag=200;mapm_p1.xm_p1.y.flag=200;for(i=0;i<7;i+)for(j=0;j<12;j+)if(200=mapij.flag)n+;if(84=n)AfxMe

19、ssageBox("恭喜你n你勝利啦!n");start=0;void CMyView:search(int i,int j,bool *right,int *p)int n=i*12+j;pn=1;if(i-1=m_p1.x&&j=m_p1.y)*right=true;else if(i=m_p1.x&&j-1=m_p1.y)*right=true;else if(i=m_p1.x&&j+1=m_p1.y)*right=true;else if(i+1=m_p1.x&&j=m_p1.y)*right=true

20、;if(0<=i-1)&&(0<=j)&&200=mapi-1j.flag&&0=p12*(i-1)+j) search(i-1,j,right,p);if(0<=i)&&(0<=j-1)&&200=mapij-1.flag&&0=p12*i+j-1) search(i,j-1,right,p);if(0<=i)&&(j+1<12)&&200=mapij+1.flag&&0=p12*i+j+1) search(i,j+1,right,p);if(i+1<7)&&(0<=j)&&200=mapi+1j.flag&&0=p12*(i+1)+j) search(i+1,j,right,p);voi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論