




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
連連看游戲的設(shè)計與實現(xiàn)連連看游戲的設(shè)計與實現(xiàn)連連看游戲的設(shè)計與實現(xiàn)資料僅供參考文件編號:2022年4月連連看游戲的設(shè)計與實現(xiàn)版本號:A修改號:1頁次:1.0審核:批準(zhǔn):發(fā)布日期: 連連看游戲的設(shè)計與實現(xiàn)學(xué)生姓名:蔡艷芳指導(dǎo)老師:鄧廣慧摘要本文用VisualC++來設(shè)計與實現(xiàn)簡單的連連看游戲的基本功能,玩家可以在游戲區(qū)域中通過鍵盤控制來選取相同的兩個物件,采用特定的消除規(guī)則對它們進(jìn)行消除的操作,當(dāng)游戲區(qū)域中的所有方塊對都被消除后玩家即可勝利。本次課程設(shè)計對該游戲的算法以及游戲圖案的繪制進(jìn)行詳細(xì)的介紹。運用連線相消的方法完成了連連看游戲。關(guān)鍵詞:VisualC++;連連看;游戲;3D繪圖 1引言連連看游戲介紹游戲“連連看”顧名思義就是找出相關(guān)聯(lián)的東西,它來源于街機游戲《四川麻將》和《中國龍》,是給一堆圖案中的相同圖案進(jìn)行配對的簡單游戲,在2003年,一個叫做朱俊的網(wǎng)友將這種形式搬到了PC上,立刻成為辦公一族的新寵,并迅速傳遍了世界各地。飽受工作壓力的人們沒有太多的時間進(jìn)行復(fù)雜的游戲,而對于這種動動鼠標(biāo)就能過關(guān)的游戲情有獨鐘。之后村子的連連看風(fēng)靡版,阿達(dá)的連連看奧運版,連連看反恐版,還有敏敏連連看,水晶連連看等遍地開花,造就了一個連連看的新世界。連連看游戲有多種地圖樣式和道具系統(tǒng)、大大加強了游戲的可玩性,是一款老少皆宜的休閑佳品。課程設(shè)計的目的網(wǎng)絡(luò)小游戲制作的目的是滿足了人們休閑的需要,在緊張工作之余休閑類的小游戲能夠給人帶來最大程度的放松,也可以增進(jìn)人們之間的交流,溝通,通過游戲還可以認(rèn)識更多的朋友,也可以到達(dá)跨省、跨市,甚至跨國間人們互相娛樂的目的。另外也想通過本次課程設(shè)計將三年來所學(xué)的專業(yè)知識和其他方面的知識融入到實際應(yīng)用中。主要問題 開始制作游戲時,主要要解決的問題有以下幾個方面:如何設(shè)置整個游戲的界面;如何控制連連看游戲中隨機圖片的生成且每種圖片必須為偶數(shù)個;游戲開始后,判斷鼠標(biāo)兩次點擊的圖片能否消去,即圖片是否相同且圖片之間路徑的判斷。課題實現(xiàn)技術(shù)的簡要說明VisualC++是一個功能強大的可視化軟件開發(fā)工具,VisualC++不僅是一個C++編譯器,而且是一個基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrateddevelopmentenvironment,IDE)。VisualC++由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lassWizard等開發(fā)工具。這些組件通過一個名為DeveloperStudio的組件集成為和諧的開發(fā)環(huán)境。VisualC++一直被認(rèn)為是目前最好的軟件開發(fā)工具之一,其在界面開發(fā)、執(zhí)行速度、代碼的移植性方面都有很強的優(yōu)勢。所以,實現(xiàn)本系統(tǒng),VC++是一個相對較好的選擇。2系統(tǒng)需求分析整個游戲程序包括了進(jìn)入記錄,圖片消去和過關(guān)結(jié)果三個階段,在處理鼠標(biāo)響應(yīng)事件中伴隨著3D繪圖。程序通過調(diào)試運行,實現(xiàn)了設(shè)計目標(biāo),能夠滿足連連看游戲玩家的需要??尚行苑治觯?)技術(shù)可行性分析技術(shù)上的可行性分析主要分析現(xiàn)有技術(shù)條件能否順利完成開發(fā)工作,硬件、軟件配置能否滿足開發(fā)者的需要,各類技術(shù)人員的數(shù)量,水平,來源等。連連看系統(tǒng)的工作主要是在開發(fā)者和玩家之間架起一座橋梁,能相互溝通信息和處理信息。這一特點非常適合計算機特點,通過網(wǎng)絡(luò)Internet技術(shù),發(fā)揮計算機的信息傳輸速度快、準(zhǔn)確度高的優(yōu)勢。計算機硬件和軟件技術(shù)的飛速發(fā)展,為系統(tǒng)的建設(shè)提供了技術(shù)條件。(2)社會可行性分析社會可行性有時也稱為操作可行性,主要論證新系統(tǒng)在玩家在游戲過程中的感受與反饋信息。在當(dāng)前信息技術(shù)飛速發(fā)展的大環(huán)境下,計算機技術(shù)和軟件技術(shù)的更新使得游戲更加的易掌握。功能需求分析關(guān)于連連看的功能描述如下:運行游戲并進(jìn)行初始化工作,將整個游戲區(qū)域分成縱向和橫向擴展的若干個小方塊,并且這些小方塊是由多種動物圖案成對地分布于游戲區(qū)域的不同位置。玩家可以通過選取相同的兩個物件來對它們進(jìn)行消除的操作,直到將游戲區(qū)域中的所有方塊對都被消除后為勝利。性能需求分析(1)硬件環(huán)境處理器:InterCR300或是更高。內(nèi)存:128MB(建議196MB)。硬盤空間:20MB。(2)軟件環(huán)境操作系統(tǒng):Windows98或是Windows2000/WindowsNTServer。 3系統(tǒng)設(shè)計系統(tǒng)功能設(shè)計連連看系統(tǒng)的設(shè)計流程圖如圖所示。游戲框架的搭建游戲框架的搭建菜單的制作連線相消算法的設(shè)計與實現(xiàn)繪圖界面的設(shè)計連連看系統(tǒng)圖連連看游戲的設(shè)計流程圖系統(tǒng)功能模塊總設(shè)計這個游戲的主要類是游戲模式類,類名為CLinkToLinkDlg。這個類主要對包括圖案方塊的銷毀判斷,游戲勝利判斷以及整個游戲用戶交換功能的實現(xiàn)。它的圖如圖所示。CLinkToLinkDlgm_mem3DBkDC:CDCm_mem3DBkBmp:Cbitmapm_memAnimalDC:CDC m_memAnimalBmp:Cbitmapm_MemDC:CDC m_memBitmap:Cbitmapm_map:intm_nRow: int m_nCol:int m_nX1:int m_nY1:int GameDraw(CDC*pDC):voidStartNewGame():voidIsLink(intx1,inty1,intx2,inty2):BOOLIsWin(void):BOOLX1_Link_X2(intx,inty1,inty2):BOOLY1_Link_Y2(intx1,intx2,inty):BOOLOneCornerLink(intx1,inty1,intx2,inty2):BOOLTwoCornerLink(intx1,inty1,intx2,inty2):BOOLYthrough(intx,inty,BOOLbAdd):BOOLXthrough(intx,inty,BOOLbAdd):BOOLLineX(intx,inty1,inty2):BOOLLineY(intx1,intx2,inty):BOOL圖游戲模式類圖4系統(tǒng)詳細(xì)設(shè)計與實現(xiàn)游戲地圖設(shè)計對于整個游戲區(qū)域,可以把它看作一個是由若干個小方塊構(gòu)成的地圖,而且每一個小方塊放置著不同的動物圖案,可將其稱之為圖案小方塊。這些圖案小方塊零散地分布在地圖的不同位置區(qū)域,并且每一個圖案小方塊都有與其對應(yīng)的完全一樣的另外一個小方塊,如圖所示。圖游戲地圖設(shè)計圖如圖所示,整個游戲游戲區(qū)域被抽象成一個有坐標(biāo)位置屬性的平面,平面上零散地分布著若干個小方塊,并且這些小方塊的物種起碼是成對出現(xiàn)的。經(jīng)過前面的描述和分析后,可以把游戲區(qū)域地圖用一個數(shù)組m_map來表示。m_map是把地圖設(shè)計成一個動態(tài)分配的int整形一維數(shù)組,對地圖中的行列數(shù)的表達(dá),用一個轉(zhuǎn)換法則即可??梢栽贚inkToLinkDlg類對象定義中添加地圖核心數(shù)據(jù)的成員變量,具體如下:=1\*GB3①直接連接方式在直接連接方式中,必須要求所選定的兩個方塊在同一水平直線上(可以為x方向或y方向),并且兩個方塊之間沒有任何其他圖案方塊。=2\*GB3②一個這點連接方式所選定的兩個方塊如果通過折點的方式連接,那么對于折點來說,每個折點必定有且至少有一個坐標(biāo)(x或y)是和其中一個目標(biāo)點相同的,即折點必定在兩個目標(biāo)點所在的x方向或y方向的直線上。此外,對于一個折點連接的情況,折點應(yīng)該為第一個選中方塊的橫向線或縱向線與第二個選中方塊的縱向線和橫向線相交而得出。=3\*GB3③兩個折點的連接方式這種方式的兩個折點所連成的直線與兩物件的直接連線可以構(gòu)成平行線,因此可以根據(jù)這個規(guī)律,將這條水平線在游戲區(qū)域允許的條件上下移動,然后通過判斷整條帶垂直折線點的曲線之間有無障礙物方式來確定是否可以連同。這種情況可以分為兩種情況:1)選中的兩圖案方塊在同一直線,兩折點間的直連線可在其這兩個方塊之間的空間位置作移動,其約束是不超過游戲邊界區(qū)域。2)選中的兩圖案方塊不在同一直線,兩折點間的直連線可在兩個方塊之間的空間位置作移動,其約束是兩方塊之間的區(qū)域。經(jīng)過上面詳細(xì)的分析后,可以對選定的兩方塊是否可以作抵消操作可以這樣設(shè)計下去。首先,對簡單的直接連情況進(jìn)行判斷,看其是否符合條件,假如不能,再加深一個級別的復(fù)雜度,對一個折點的情況進(jìn)行判斷,依次類推,如下圖所示。圖連線規(guī)則圖連線流程圖如圖所示。圖連線流程圖根據(jù)如圖所示的流程圖,可以對選定的兩個方塊(分別在(x1,y1)以及(x2,y2)兩個區(qū)域位置,其中x,y分別代表行與列的概念)是否可以抵消作以下實現(xiàn)。把該功能封裝在IsLink()函數(shù)里面,其代碼如下所示:計算鼠標(biāo)點擊方塊的的位置 intx=FRONTWIDTH+%FRONTWIDTH1:0)-1; inty=FRONTHEIGHT+%FRONTHEIGHT1:0)-1; 在游戲區(qū)域內(nèi)并且該區(qū)域還有該區(qū)域不是空的區(qū)域 if(x<m_nCol&&y<m_nRow&&m_map[y*m_nCol+x]!=BLANK_STATE) { 假設(shè)尚未記錄第一個方塊 if(m_nX1==BLANK_STATE) { 判斷是否點擊的方塊非本身,是否點擊同一種動物 if((m_nX1!=x||m_nY1!=y)&& m_map[m_nY1*m_nCol+m_nX1]==m_map[y*m_nCol+x] ) { 檢測是否可以消除 if(IsLink(m_nX1,m_nY1,x,y)) { 數(shù)據(jù)清理 m_map[m_nY1*m_nCol+m_nX1]=BLANK_STATE; m_map[y*m_nCol+x]=BLANK_STATE; } }清空記錄方塊的值 m_nX1=BLANK_STATE; m_nY1=BLANK_STATE; 示的描述方案,可以在內(nèi)存創(chuàng)建兩個內(nèi)存位圖,并對它們的圖像進(jìn)行載入。在需要使用的時候,則可以從這些內(nèi)存位圖中直接去拷貝,并繪制到游戲區(qū)域內(nèi)存位圖中去,接下來添加關(guān)于繪圖的成員變量,如下所示。Theframeworkdoesthisautomatically 鄧VisualC++實用教程.清華大學(xué)出版社,2004[2]唐俊明.VisualC++編程實例與技巧.高等教育出版,2002[3]潘錦平.軟件系統(tǒng)開發(fā)技術(shù).西安電子科技大學(xué)出版社,1997[4]張海藩.軟件工程導(dǎo)論.清華大學(xué)出版社.2008附件."menuitemtosystemmenu. ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX<0xF000); CMenu*pSysMenu=GetSystemMenu(FALSE); if(pSysMenu!=NULL) { CStringstrAboutMenu; (IDS_ABOUTBOX); if(!()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu); } } Theframeworkdoesthisautomatically ForMFCapplicationsusingthedocument/viewmodel,voidCLinkToLinkDlg::StartNewGame(){ HCURSORCLinkToLinkDlg::OnQueryDragIcon(){ return(HCURSOR)m_hIcon;}voidCLinkToLinkDlg::OnLButtonDown(UINTnFlags,CPointpoint){ 算鼠標(biāo)點擊方塊的的位置 intx=FRONTWIDTH+%FRONTWIDTH1:0)-1; inty=FRONTHEIGHT+%FRONTHEIGHT1:0)-1; 游戲區(qū)域內(nèi)并且該區(qū)域還有該區(qū)域不是空的區(qū)域 if(x<m_nCol&&y<m_nRow&&m_map[y*m_nCol+x]!=BLANK_STATE) { 設(shè)尚未記錄第一個方塊 if(m_nX1==BLANK_STATE) { 錄第一個方塊的位置 m_nX1=x; m_nY1=y; 斷是否點擊的方塊非本身,是否點擊同一種動物 if((m_nX1!=x||m_nY1!=y)&& m_map[m_nY1*m_nCol+m_nX1]==m_map[y*m_nCol+x] ) { 測是否可以消除 if(IsLink(m_nX1,m_nY1,x,y)) { 據(jù)清理 m_map[m_nY1*m_nCol+m_nX1]=BLANK_STATE; m_map[y*m_nCol+x]=BLANK_STATE; } } 空記錄方塊的值 m_nX1=BLANK_STATE; m_nY1=BLANK_STATE; //通知重繪 Invalidate(FALSE); } } //察看是否已經(jīng)勝利 if(IsWin()) { MessageBox("恭喜您勝利闖關(guān),即將開始新局"); StartNewGame(); }}BOOLCLinkToLinkDlg::X1_Link_X2(intx,inty1,inty2){ //保證y1的值小于y2 if(y1>y2) { //數(shù)據(jù)交換 intn=y1; y1=y2; y2=n; } //直通 for(inti=y1+1;i<=y2;i++) { if(i==y2) returnTRUE; if(m_map[i*m_nCol+x]!=BLANK_STATE) break; } //左通 if(XThrough(x-1,y1,FALSE)&&XThrough(x-1,y2,FALSE)) returnTRUE; //右通 if(XThrough(x+1,y1,TRUE)&&XThrough(x+1,y2,TRUE)) returnTRUE; returnFALSE;}////Y直接連通//BOOLCLinkToLinkDlg::Y1_Link_Y2(intx1,intx2,inty){ if(x1>x2) { intx=x1; x1=x2; x2=x; } //直通 for(inti=x1+1;i<=x2;i++) { if(i==x2) returnTRUE; if(m_map[y*m_nCol+i]!=BLANK_STATE) break; } //上通 if(YThrough(x1,y-1,FALSE)&&YThrough(x2,y-1,FALSE)) returnTRUE; //下通 if(YThrough(x1,y+1,TRUE)&&YThrough(x2,y+1,TRUE)) returnTRUE; returnFALSE;}////是否同一直線通//BOOLCLinkToLinkDlg::LineX(intx,inty1,inty2){ if(y1>y2) { inty=y1; y1=y2; y2=y; } for(inty=y1;y<=y2;y++) { if(m_map[y*m_nCol+x]!=BLANK_STATE) returnFALSE; if(y==y2) returnTRUE; } returnFALSE;}////是否同一直線通//BOOLCLinkToLinkDlg::LineY(intx1,intx2,inty){ if(x1>x2) { intx=x1; x1=x2; x2=x; } for(intx=x1;x<=x2;x++) { if(m_map[y*m_nCol+x]!=BLANK_STATE) returnFALSE; if(x==x2) returnTRUE; } returnFALSE;}////1直角接口連通//BOOLCLinkToLinkDlg::OneCornerLink(intx1,inty1,intx2,inty2){ if(x1>x2) { intn=x1; x1=x2; x2=n; n=y1; y1=y2; y2=n; } if(y2<y1) { if(LineY(x1+1,x2,y1)&&LineX(x2,y1,y2+1)) returnTRUE; if(LineY(x2-1,x1,y2)&&LineX(x1,y2,y1-1)) returnTRUE; returnFALSE; } else { if(LineY(x1+1,x2,y1)&&LineX(x2,y1,y2-1)) returnTRUE; if(LineY(x2-1,x1,y2)&&LineX(x1,y2,y1+1)) returnTRUE; returnFALSE; } returnFALSE;}////2直角接口連通//BOOLCLinkToLinkDlg::TwoCornerLink(intx1,inty1,intx2,inty2){ if(x1>x2) { intn=x1; x1=x2; x2=n; n=y1; y1=y2; y2=n; } //右通 if(XThrough(x1+1,y1,TRUE)&&XThrough(x2+1,y2,TRUE)) returnTRUE; //左通 if(XThrough(x1-1,y1,FALSE)&&XThrough(x2-1,y2,FALSE)) returnTRUE; //上通 if(YThrough(x1,y1-1,FALSE)&&YThrough(x2,y2-1,FALSE)) returnTRUE; //下通 if(YThrough(x1,y1+1,TRUE)&&YThrough(x2,y2+1,TRUE)) returnTRUE; //右 for(intx=x1+1;x<m_nCol;x++) { if(m_map[y1*m_nCol+x]>-1) break; if(OneCornerLink(x,y1,x2,y2)) returnTRUE; } //左 for(x=x1-1;x>-1;x--) { if(m_map[y1*m_nCol+x]!=BLANK_STATE) break; if(OneCornerLink(x,y1,x2,y2)) returnTRUE; } //上 for(inty=y1-1;y>-1;y--) { if(m_map[y*m_nCol+x1]!=BLANK_STATE) break; if(OneCornerLink(x1,y,x2,y2)) returnTRUE; } //下 for(y=y1+1;y<m_nRow;y++) { if(m_map[y*m_nCol+x1]!=BLANK_STATE) break; if(OneCornerLink(x1,y,x2,y2)) returnTRUE; } returnFALSE;}BOOLCLinkToLinkDlg::XThrough(intx,inty,BOOLbAdd){ if(bAdd) { for(inti=x;i<m_nCol;i++) if(m_map[y*m_nCol+i]!=BLANK_STATE) returnFALSE; } else { for(inti=0;i<=x;i++) if(m_map[y*m_nCol+i]!=BLANK_STATE) returnFALSE; } returnTRUE;}BOOLCLinkToLinkDlg::YThrough(intx,inty,BOOLbAdd){ if(bAdd) { for(inti=y;i<m_nR
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保安人員技術(shù)素養(yǎng)提升的路徑計劃
- 公共服務(wù)行業(yè)的品牌工作計劃
- 苗圃未來希望助力孩子成長計劃
- 加強跨國經(jīng)營管理提升全球競爭力計劃
- 弘揚學(xué)生尊重勞動的精神計劃
- 2025年地理信息大數(shù)據(jù)合作協(xié)議書
- 2025年中國橡膠行業(yè)市場運行態(tài)勢、產(chǎn)業(yè)鏈全景及發(fā)展趨勢報告
- 七年級下冊《立方根》課件與練習(xí)
- 利用大數(shù)據(jù)分析預(yù)測用戶需求變化
- 2025年路面清潔裝備項目建議書
- 汽車運行材料ppt課件(完整版)
- GB∕T 1732-2020 漆膜耐沖擊測定法
- 我國油菜生產(chǎn)機械化技術(shù)(-119)
- 2022《化工裝置安全試車工作規(guī)范》精選ppt課件
- 吞咽障礙篩查表
- Q∕GDW 12067-2020 高壓電纜及通道防火技術(shù)規(guī)范
- 汽車系統(tǒng)動力學(xué)-輪胎動力學(xué)
- 艾琳歆日內(nèi)交易2011-2月至4月份圖表
- 中國民航國內(nèi)航空匯編航路314系列航線
- 山西特色文化簡介(課堂PPT)
- 工業(yè)廠房工程技術(shù)標(biāo)(共93頁)
評論
0/150
提交評論