




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
緒論1.1研究現(xiàn)狀在電腦普及發(fā)展的今天,游戲已成為人們生活中必不可少的一部分,連連看游戲總是排在受玩家歡迎排名的前5位,休閑、趣味、益智是其玩不厭的精華,且不分男女老少是一款適合大眾的經(jīng)典休閑小游戲。但是,隨著智能手機的普及,手機游戲占據(jù)了中國游戲市場的一大半,而更具游戲性、創(chuàng)新性的單機游戲卻銷量平平。根據(jù)《2019年中國游戲產(chǎn)業(yè)發(fā)展報告》,2019年中國游戲用戶規(guī)摸達6.4億人,同比增長2.5%。國內(nèi)游戲企業(yè)通過深耕自主研發(fā),移動游戲市場收入保持持續(xù)上升,但是單機游戲市場繼續(xù)萎縮,分別占市場份額的26.6%和4.3%[1]。經(jīng)典的單機游戲連連看的市場自然也不太可觀,因此我們要分析目前單機游戲存在的問題,以經(jīng)典單機游戲連連看為例,發(fā)現(xiàn)問題并想辦法解決。目前我國單機游戲漸漸淡出人們視野,是因為其普遍存在以下幾點問題,第一,游戲產(chǎn)品本身質(zhì)量不高,即游戲制作水平不足;第二,游戲性不強,即游戲重復(fù)可玩性不高;第三,文化屬性不強[2]。在世界范圍內(nèi)來看掌機和家用游戲機才是單機游戲的主陣地,如任天堂的3DS掌機,索尼的PlayStation4以及微軟的Xboxone家用游戲機等。但單機游戲在中國的發(fā)展并不順利。據(jù)報告,全球游戲玩家在2016年創(chuàng)造了996億美元的收入,其中單機游戲收入占73%。由此可見游戲產(chǎn)業(yè)尤其是單機游戲產(chǎn)業(yè)在全球范圍內(nèi)來看是一個具有強大旺盛生命力的產(chǎn)業(yè)。2016年中國游戲產(chǎn)業(yè)規(guī)模實現(xiàn)165.7億元人民幣,但其中單機游戲收入僅占0.4%[3]。當前發(fā)展比較好的小游戲平臺——狗仔游戲盒子,里面提供的單機小游戲都非常受歡迎,里面包括黃金礦工、金牌炮彈射手等等。但是大部分的單機小游戲質(zhì)量參差不齊,都存在各自的缺點[4]。在國外,玩家玩游戲的第一選擇是獨立游戲。大型獨立游戲的發(fā)展周期一般很長,發(fā)展計劃龐大。然而,中小型作品往往受到公眾的喜愛,如"植物大戰(zhàn)僵尸"和"超級馬里奧",這是流行的世界各地的。這兩款獨立游戲在中國非常成熟和流行。這些獨立游戲不僅分布在公共PC平臺上,而且還涵蓋許多其他不同的平臺[5]。如今,連連看在各種平臺上占據(jù)著很大的地位。Linux系統(tǒng)、各種系統(tǒng)都有連連看可以玩。男人和女人,老少游戲玩家,白領(lǐng),可以成為每個人最喜好的網(wǎng)頁游戲[6][7]。1.2主要研究的目的及內(nèi)容這種設(shè)計的主要目的是在Windows平臺下設(shè)計一個簡單有趣的游戲,讓人們下班后放松和學(xué)習(xí)。與目前大型單機或網(wǎng)絡(luò)游戲(以下簡稱大型游戲)不同,這款小型游戲旨在滿足人們休閑的需要,在努力工作后放松人們的精神[8]。這種休閑游戲很容易玩,不像在線游戲,它需要注冊帳戶和下載很長一段時間。它不需要實時保持在線狀態(tài)。在沒有網(wǎng)絡(luò)時也可以使用。它不像大型游戲那樣耗時和費力,也不會把人們的精力牢牢地投入到游戲里。對于我們來說,隨著自由時間的日益分散,這個游戲不僅能給人們帶來最大的放松,而且還不會像大型游戲一樣疲憊不堪,而這個小游戲不會占用太多的電腦資源。可以說,工作和娛樂都是正確的[9]。此外,我還想利用這個畢業(yè)項目來掌握如何制作游戲軟件,制作游戲軟件的簡單過程,以及制作游戲軟件的一般步驟。同時,我想整合我在大學(xué)學(xué)習(xí)多年的專業(yè)知識和其他知識,為未來的就業(yè)打下基礎(chǔ)。1.3設(shè)計思路連連看看游戲的主要問題是鼠標點擊兩次的圖片是否可以消失。當然,如果您單擊兩張相同的圖片,那就做處理。如果選擇兩張不同的圖片,則不會處理它。如果所有路徑中至少有一個路徑的拐點不超過兩個,可以通過兩個相同的圖片連接,則可以消除該路徑:如果沒有,則不會進行處理。此課題內(nèi)容以及目標如下:(1)有難度選擇,根據(jù)時間進度條的自減量以及消去成對塊后時間進度條的回復(fù)量來設(shè)置難度。(2)點擊重新開始后可隨機生成游戲界面。(3)方塊選中后圖片要有明顯標示。(4)選擇兩個具有相同樣式的方塊。如果連接它們的拐點不超過兩個,則可以消除該對方塊。在每場比賽中,玩家需要在指定時間內(nèi)消除所有對塊。消除所有對塊時,則確定成功。(5)當出現(xiàn)無解的局面時,可按下重新排列按鈕。(6)游戲自動統(tǒng)計玩家獲得的分數(shù)通過對以上功能的逐步實現(xiàn),使游戲界面美觀,操作簡單,并盡力增加游戲的娛樂性,趣味性,以勾起玩家的興趣。
2相關(guān)技術(shù)簡介2.1C++語言目前,一些語言以犧牲靈活性為代價提高效率。但這種靈活性正是C/C++程序員所需要的。這些解決方案對程序員有太多的限制(例如屏蔽某些基本代碼控制機制),它們提供的功能也不盡如人意。這些語言不能輕易地與以前的系統(tǒng)交互,不能很好地與當前的網(wǎng)絡(luò)編程相結(jié)合。對于C/C++用戶來說,最理想的解決方案是在快速發(fā)展的同時調(diào)用基礎(chǔ)平臺的所有功能。他們希望有一個與最新網(wǎng)絡(luò)標準保持同步并與現(xiàn)有應(yīng)用程序很好地集成的環(huán)境。此外,一些C/C++開發(fā)人員還需要在必要時進行一些基礎(chǔ)編程。效率與安全:新興網(wǎng)絡(luò)經(jīng)濟迫使企業(yè)更快地應(yīng)對競爭威脅。開發(fā)人員必須不斷縮短開發(fā)周期并推出新版本的應(yīng)用程序,而不僅僅是開發(fā)"標志性"版本。更新軟件組件是一項非常容易出錯的工作,因為修改代碼可能會無意中更改原始程序的語義。為了幫助開發(fā)人員完成此工作,C++版本的更新提供了內(nèi)部支持。一般來說,這些功能使開發(fā)后續(xù)版本的程序項目的過程更加穩(wěn)健,從而降低了后續(xù)版本的開發(fā)成本[10]。擴展交互性:作為自動管理、類型安全的環(huán)境,C++適用于大多數(shù)企業(yè)應(yīng)用。但實踐經(jīng)驗表明,有些應(yīng)用程序仍然需要一些基礎(chǔ)代碼,原因要么是基于性能的考慮,要么是因為與現(xiàn)有應(yīng)用程序界面的兼容性。這些情況可能會迫使開發(fā)人員使用C++,即使他們更喜歡更高效的開發(fā)環(huán)境。在C++中,每個對象自動生成為COM對象。開發(fā)人員不再需要明確實現(xiàn)IUnknown和其他COM接口。這些功能是內(nèi)置的。同樣,C++可以調(diào)用現(xiàn)有的COM對象,無論它們以何種語言編寫。無論是支持COM的呼叫還是純api,它都是為了使開發(fā)人員能夠直接在C#++環(huán)境中具有必要的強大功能。結(jié)論:C++是一種現(xiàn)代的面向?qū)ο笳Z言。它使程序員快速便捷地創(chuàng)建基于Microsoft.NET平臺的解決方案。這種框架使C++組件可以方便地轉(zhuǎn)化為XML網(wǎng)絡(luò)服務(wù),從而使任何平臺的應(yīng)用程序都可以通過Internet調(diào)用它。C++提高開發(fā)人員的效率,同時努力消除可能導(dǎo)致嚴重結(jié)果的編程錯誤。C++使C/C++程序員能夠快速開發(fā)網(wǎng)絡(luò),同時保持開發(fā)人員所需的動力和靈活性。2.2MicrosoftVisualVisualStudio是由微軟公司發(fā)型的開發(fā)編程運行環(huán)境,是當前市面上最盛行的Windows平臺應(yīng)用程序開發(fā)的環(huán)境。VisualStudio2010版本在2010年4月12日上市,它比以前更加簡單明了的原因是它重新設(shè)計和組織了其集成以及開發(fā)環(huán)境(IDE)的界面。VisualStudio2010同時帶來了MicrosoftVisualStudio2010CTP(CommunityTechnologyPreview--CTP)、NETFramework4.0,并支持開發(fā)面向Windows7的應(yīng)用的程序。除了MicrosoftSQLServer,它還能夠支持IBMDB2和Oracle數(shù)據(jù)庫。而且,VisualStudio能夠更深層次的支持SQLServer。SQLServerYukon也將數(shù)據(jù)庫引擎整合了公共語言運行時(CLR)的功能,并且將數(shù)據(jù)庫和工具的結(jié)合提高到新水平[11]。3需求分析連連看游戲所占內(nèi)存比較小,對計算機存儲容量沒有過分特殊要求,可以在任意一款計算機上運行。連連看游戲的基本規(guī)則為,每次刪除一對棋子時,游戲限制時間都會自動增加。當所有的時間花完了,游戲就以失敗告終。在有限時間內(nèi),消除全部游戲區(qū)域內(nèi)的棋子,則可以進入下一關(guān)較大難度的游戲,重現(xiàn)開始新等級的游戲[12]。每升級一個等級,游戲的時間消耗就會變得更快。此款連連看游戲要實現(xiàn):(1)連連看的總體地圖設(shè)計:整個游戲區(qū)域被視為由若干個空方塊組成的地圖,每個空方塊都充滿了不同的圖案。充滿不同圖案的空方塊可以稱為小方塊。根據(jù)某些規(guī)則,這些不同的小塊分布在整個游戲區(qū)域的不同位置,每個小塊必須有另一個小塊與其相應(yīng)的塊完全相同。(2)圖案方塊的連接判斷:若選中的兩個小圖塊圖案相同,且在同一條直線上,它們之間也沒有其他的障礙物,則可以用直線進行直接消除;若沒在同一條直線上,但是中間沒有其他障礙物,可以利用折線進行消除;如果不是以上兩種情況,則返回開始,直到出現(xiàn)以上兩種情況再進行連線消除。(3)鼠標交互功能的實現(xiàn):用戶在用鼠標選擇了兩次圖案后,程序要自己判斷是否是可以消除的情況,若果符合可以消除的情況,則進行圖塊的消除,反之則不進行消除,在重復(fù)上述的選擇與操作。(4)游戲勝利的判斷:對于整個游戲區(qū)域進行掃描判斷,若發(fā)現(xiàn)游戲區(qū)域有兩個及以上的圖塊沒有消除,則游戲沒有勝利,若檢測到整個游戲區(qū)域的圖塊都被消除完畢,則游戲勝利。(5)英雄榜的顯示及更新:當用戶當前級別超過記錄文件中的水平時,英雄列表對話框?qū)棾觥R笥脩糨斎胄彰⒂涗浽谟涗浳募小#?)游戲的幫助功能:在游戲界面中需要提供游戲使用說明等幫助提示,以方便對此連連看游戲不了解的用戶對游戲進行操作和使用。而系統(tǒng)功能的主要實現(xiàn)為:游戲界面初始化及圖塊隨機生成、判斷鼠標前后點擊的圖塊能否消除、難度及聲音選擇、計時與得分。4系統(tǒng)設(shè)計連連看游戲不單單要功能完備,且要界面友好,因此,對于一個成功的連連看游戲設(shè)計項目,功能模塊的設(shè)計是關(guān)鍵[13]。4.1概要設(shè)計在系統(tǒng)需求分析階段,分析清連連看游戲要“做什么”,形成目標系統(tǒng)的邏輯模型。那么,我們需要做的是將"做什么"的邏輯模型轉(zhuǎn)變?yōu)?如何做"的物理模型,即開始實現(xiàn)系統(tǒng)要求。要開始實施系統(tǒng)要求,我們需要描述系統(tǒng)的整體結(jié)構(gòu)。在系統(tǒng)功能分析的基礎(chǔ)上,做系統(tǒng)功能模塊圖如圖4-1所示的系統(tǒng)體系結(jié)構(gòu)圖:圖4-1系統(tǒng)體系結(jié)構(gòu)圖連連看游戲系統(tǒng)功能模塊有以下幾個:首先是界面初始化,再接著是隨機生成圖片,然后是判斷圖片是否消除,即圖片消除判斷,再是連線消除加分和勝利條件判斷。對于用戶玩家來說則有如下幾個功能:開始游戲、暫停游戲、重新排列、游戲設(shè)置以及其他相關(guān)[14]。1)界面初始化:用戶在開始游戲后,游戲的整個界面開始進行準備工作,即開始初始化,整個游戲的頁面會出現(xiàn)游戲難度的選擇、游戲背景音樂的選擇、游戲關(guān)卡的選擇、游戲幫助的選擇。主要負責顯示游戲界面、等級、時間顯示以及游戲幫助等內(nèi)容。其主要有如下幾個處理模塊:主菜單處理模塊、連接提示處理模塊、換盤處理模塊、初始化棋盤數(shù)據(jù)處理模塊、游戲信息處理模塊。(1)主菜單處理模塊:主菜單處理模塊比較簡單,只需要創(chuàng)建一個菜單對象。并在對話框初始化函數(shù)中進行加載相應(yīng)資源并設(shè)置到對話框中即可。(2)連接提示處理模塊:連接提示模塊,主要調(diào)用棋子類中的查找有效連接接口函數(shù),通過返回的兩個圖標相同的棋子位置來設(shè)置兩個棋子的狀態(tài)為按下。(3)換盤處理模塊:換盤處理模塊,主要是把棋盤數(shù)組中的數(shù)據(jù)重新進行隨機排列。(4)初始化棋盤數(shù)據(jù)模塊:初始化棋盤數(shù)據(jù)模塊,利用隨機數(shù),隨機地選擇在棋盤數(shù)組中插入棋子數(shù)據(jù)。每一類棋子生成兩組四個相同的數(shù)據(jù)。(5)游戲信息處理模塊:游戲信息處理模塊,主要利用設(shè)置定時器,每一秒進行更新顯示區(qū)域。在這些區(qū)域中,以繪圖方式進行輸出。2)隨機生成圖片:在用戶點擊開始游戲按鈕后,整個游戲地圖會隨機生成圖案不同的小圖片,也就是連連看的棋子,每一個棋子都有其相對應(yīng)的一個,這兩個棋子組成一對,只要用戶兩次點擊相同圖案的棋子,則可以將兩個相同圖塊的棋子消除。3)圖片消除判斷:用戶在用鼠標第一次點擊棋子后,被點擊的這個棋子的圖案將被記錄;然后用戶第二次點擊棋子,如果用戶兩次點擊的棋子之間沒有其他的(障礙物)棋子,即兩個棋子之間是可以構(gòu)成一條橫著或者豎著的直線,又或者是兩個棋子之間構(gòu)成了一條折線,同樣中間是沒有障礙物的,那么,這就滿足了棋子消除的條件,可以進行棋子的消除。4)連線消除加分:如果有兩個棋子可以進行連線消除,那么就可以加一分,每連線消除一對棋子,就加一分,直到所有棋子消除完畢,則停止加分。5)勝利條件判斷:如果整個游戲地圖的棋子全部消除完畢,則游戲勝利。如果整個游戲地圖的棋子大于等于一,則游戲失敗。對于用戶玩家來說:用戶想玩游戲的時候可以點擊開始游戲以進行一場新的游戲,如果中途不想繼續(xù)游戲了,也可以點擊暫停游戲,讓游戲先暫停,休息過后可以點擊繼續(xù)游戲來開始游戲。用戶如果對當前的棋子排列不滿意,也可以點擊重新排列一達到棋子換盤的目的,也可以進行游戲設(shè)置以及游戲幫助[15]。4.2系統(tǒng)結(jié)構(gòu)設(shè)計將系統(tǒng)劃分為若干個模塊的目的是降低軟件系統(tǒng)的復(fù)雜程度,提高可讀性、可維護性,然而模塊劃分不能是過于隨意,需保模塊獨立性。系統(tǒng)在概要設(shè)計中一般采用結(jié)構(gòu)化設(shè)計。其以需求分析階段生成的數(shù)據(jù)流圖為基礎(chǔ),按一定步驟進行映射,形成軟件結(jié)構(gòu)。首先將整個系統(tǒng)化分為數(shù)個子模塊,在系統(tǒng)中,設(shè)計了游戲界面初始化及圖片隨機生成、判斷鼠標前后點擊的圖片能否消除、難度及聲音選擇、計時與得分等模塊。然后,進一步細分模塊,添加細節(jié)功能與實現(xiàn)。本文所設(shè)計的連連看游戲主流程圖如圖4-2所示。圖4-2主流程圖首先,游戲開始時先是游戲界面初始化,頁面初始化會顯示主菜單、難度選擇等。初始化完成之后,系統(tǒng)就開始進行隨機地成對的分發(fā)棋子,讓整個游戲區(qū)域布滿棋子,這些棋子每個都可以找到與之匹配的一個,即都可以進行消除,不會落單。這一步就是游戲地圖的完成。接著用戶第一次用鼠標選擇一個棋子,系統(tǒng)記錄在案,用戶在開始第二次棋子選擇。如果連續(xù)兩次所選擇的棋子是一樣的,而且兩個棋子之間沒有其他多余的障礙物,則可以進行兩個相同棋子的消除。如果兩次所選擇的棋子圖案不一樣,就返回上一步,再次進行兩次圖片的選擇。每次進行一次圖片消除后就判斷一次所有的棋子是否消除完畢,若所有的棋子都消除完畢了,則游戲結(jié)束,如果沒有消除完畢,則繼續(xù)進行棋子選擇和棋子消除步驟。4.3詳細設(shè)計4.3.1功能模塊的算法設(shè)計在連連看游戲中,要實現(xiàn)游戲的各個功能,大致可以分為以下幾個模塊,其算法展示如下:時間限制模塊如圖4-3所示,消除提示模塊如圖4-4所示,鼠標交互功能如圖4-5所示,游戲升級模塊如圖4-6所示:1)時間限制模塊的算法設(shè)計圖4-3時間限制模塊(1)在比賽開始時,將時間設(shè)置為60秒;(2)設(shè)置時間間隔為1000ms的定時器Timer1;(3)每次間隔到達時,當前限制時間縮短1s;(4)游戲中淘汰一對棋子的,將限制時間增加3次;例如,當前限制時間為50秒。如果移除棋子,限制時間為53秒。(5)如果限制時間為0s,則游戲結(jié)束,游戲結(jié)束對話框?qū)棾觥H绻斍坝螒蚣墑e超過記錄級別,英雄列表對話框?qū)棾觥?)消除提示模塊的算法設(shè)計:圖4-4消除提示模塊(1)判斷提示次數(shù)變量的值,如果提示次數(shù)等于0,則彈出游戲結(jié)束對話框,結(jié)束游戲并退出游戲;(2)如果提示次數(shù)的值不為0,則遍歷查找當前棋盤中剩余的還沒有消除的其他的相同的棋子;(3)在那些還沒有消除的相同的棋子中,查找可以消除的棋子,即擁有相同圖案的棋子;(4)找到圖案相同的棋子后,在可以消除的棋子上給出提示連線,然后將提示次數(shù)變量減少1,直到提示次數(shù)變?yōu)?。3)消除相同棋子模塊的算法設(shè)計(鼠標交互功能):圖4-5鼠標交互功能(1)當用戶首次單擊棋子時,將第一次棋子的坐標和類型保存到“第一選擇變量”;(2)用戶鼠標第二次點擊棋子,獲取第二次鼠標選擇的棋子的坐標和類型;(3)比較用戶第一次和第二次棋子的坐標和類型。如果點擊的兩次的棋子類型相同,請轉(zhuǎn)到步驟(4);如果沒有,去步驟(5);(4)在用戶點擊兩次的棋子上畫一條連接線,消除一對棋子,退出并等待下一個鼠標選擇;(5)將用戶第二次選擇的棋子的坐標和類型分配給“第一選擇變量”。4)游戲升級模塊的算法設(shè)計:圖4-6游戲升級模塊(1)在用戶完成一局游戲后,保存當前游戲等級和限制時間初始值;(2)判斷當前游戲中的所有棋子是否已被淘汰。如果當前游戲區(qū)域的所有棋子都已消除,則將當前游戲級別提高一個級別,并將有限時間的初始值降低"5s";(3)如果本場游戲的棋子沒有被淘汰,將保存當前游戲級別和有限時間,繼續(xù)當前游戲;(4)如果游戲等級增加了一級,就重新開始游戲。5)消除提示模塊的算法設(shè)計:(1)判斷提示次數(shù)變量的值,如果提示次數(shù)變量的值等于0,則游戲提示次數(shù)完畢,游戲結(jié)束;(2)如果提示時間變量值大于0,將搜索當前棋盤中具有相同圖案的棋子;(3)找到圖案相同的棋子后,在相同棋子中,查找兩個棋子中間沒有其他多余障礙物的,可以消除的棋子;(4)找到可以消除的棋子后,在可以消除的兩個棋子上面給出提示連線,則提示次數(shù)變量減少1。6)棋子換盤模塊的算法設(shè)計:(1)首先,將當前棋盤陣列中的數(shù)據(jù)保存到臨時數(shù)組;(2)從臨時數(shù)組中回收,隨機取出數(shù)據(jù)并保存到棋盤陣列中。7)英雄榜模塊的算法設(shè)計:(1)讀取配置文件(setup.ini),得到并顯示當前最高等級及姓名;(2)在游戲結(jié)束時,將當前用戶級別與最高水平進行比較。如果它高于配置文件中的最高水平,"英雄列表"對話框?qū)棾觯竽斎胍粋€名稱并將其保存到配置文件以及用戶級別。8)音樂播放模塊的算法設(shè)計:音樂播放模塊比較簡單,只需要在用戶選擇音樂播放時,把音樂資源載入程序并播放。游戲背景音樂播放,是通過調(diào)用Windows的API函數(shù)來實現(xiàn)的。當用戶選擇“游戲設(shè)置”|“播放音樂”命令時,就播放音樂。相反,如果取消,就停止播放音樂。要實現(xiàn)這個功能,需要如下幾步:(1)在工程文件中,添加靜態(tài)庫文件及頭文件;(2)實現(xiàn)CLlkDlg類中的PlayBackMusic()成員函數(shù)。4.3.2游戲地圖設(shè)計宏觀觀察整個游戲區(qū)域,可以把整個游戲區(qū)想象成一個由若干個空方塊組成的地圖,然后用不同的圖案填滿每個空塊,可以稱為一個小瓦片,即游戲的棋子。這些小塊根據(jù)某些規(guī)則隨機分布在游戲區(qū)域的不同位置,每個小塊必須有另一個小塊與其相應(yīng)的塊完全相同,以確保所有塊可以消除和終止游戲。如圖4-7所示。圖4-7游戲地圖設(shè)計圖如圖4-7所示,整個游戲區(qū)域被抽象成具有坐標屬性的平面,平面上散落著幾個小,這些小瓷磚的圖片成對出現(xiàn)。在之前的描述和分析之后,整個游戲區(qū)域地圖可以由一個數(shù)組來表示。此陣列設(shè)計為動態(tài)分配的int型二維陣列,以表示地圖中的行數(shù)成員變量中定義了整型指針變量,用于記錄動態(tài)分配的一維數(shù)組映射空間的第一個地址。對于游戲區(qū)域中的某個小塊類型,可以使用重新塑造的整型ID來識別它。在這里,添加行變量x和列變量y以識別地圖的行和列位置。完成地圖數(shù)據(jù)結(jié)構(gòu)設(shè)計后,初始化游戲。因為小塊需要成對出現(xiàn),當?shù)貓D被初始化時,它不僅需要采取簡單的隨機數(shù)字的圖像類型,然后把隨機選擇的填充地圖放入游戲區(qū)域,而且還要選擇成對的填充地圖,也就是說,地圖中的小塊必須是雙數(shù)的。將地圖陣列設(shè)置為動態(tài)分配模式的目的是使數(shù)據(jù)空間根據(jù)行數(shù)和列數(shù)動態(tài)獲取。如果設(shè)計了大小不同的地圖,則可以提前定義有關(guān)行數(shù)和列數(shù)的幾個宏組。在創(chuàng)建時,根據(jù)不同的宏分配不同大小的地圖空間,然后可以初始化地圖數(shù)據(jù)。在執(zhí)行連連看類對象時,定義了地圖中行數(shù)和列數(shù)的幾大宏。在連連看類對象的構(gòu)造器中,對行和列進行真實確認和分配,并根據(jù)當前行和列的數(shù)量動態(tài)打開地圖數(shù)據(jù)空間。由于地圖數(shù)據(jù)由堆棧區(qū)域中的new動態(tài)創(chuàng)建,因此在銷毀對象時需要釋放內(nèi)存空間,并且在對象的破壞器中反復(fù)調(diào)用delete以從新對象中釋放所有空間。4.3.3棋子類的設(shè)計棋子類的設(shè)計,包含如下幾個功能函數(shù):1)游戲游戲勝負判斷處理(1)等待用戶的鼠標輸入信息;(2)在定時器中,每次扣除游戲的限制時間一秒;(3)當游戲時間為零秒時,彈出游戲失敗結(jié)束提示,并根據(jù)用戶選擇重新開始游戲或者結(jié)束游戲;(4)在用戶消除一對棋子后,就對當前棋盤數(shù)組進行遍歷。如果是空,如果是空,說明用戶已經(jīng)全部消除完畢。調(diào)用升級處理。如果不是空,則返回步驟(1)。2)戲升級處理(1)當游戲中的棋子全部被消除完畢后,彈出升級提示對話框;(2)當用戶選擇繼續(xù)游戲時,就調(diào)用主對話框類的重新開始游戲接口函數(shù)。但是要把當前游戲等級增加一級;(3)當用戶選擇不繼續(xù)時,直接調(diào)用退出函數(shù)。3)查找處理(1)遍歷整個棋盤數(shù)組;(2)查找一根直線可以連接的一對棋子,如果沒有則轉(zhuǎn)下一步;如果有則轉(zhuǎn)步驟(6);(3)查找一個有拐角,即兩根直線可以連接的一對棋子。如果沒有則轉(zhuǎn)下一步,如果有則轉(zhuǎn)步驟(6);(4)查找有兩個拐角的,即三根直線可以連接的一對棋子。如果沒有則轉(zhuǎn)下一步,如果有則轉(zhuǎn)步驟(6);(5)如果返回假,表示查找失敗;(6)如果返回真,表示查找成功,并把棋子的位置在輸出參數(shù)中返回。4)提示處理提示處理是通過調(diào)用查找函數(shù),把其中可以連接的一對棋子的位置通過輸入?yún)?shù)返回給上層調(diào)用者。由調(diào)用者設(shè)置相關(guān)棋子為選中狀態(tài)。棋子類的實現(xiàn),分為以下幾步(1)首先聲明棋子類CChessMan,其中包含兩個構(gòu)造函數(shù)、查找接口函數(shù)、判斷棋子為空函數(shù)及鼠標左鍵響應(yīng)函數(shù)。(2)添加棋子類的實現(xiàn),其中包含基本的構(gòu)造函數(shù)、析構(gòu)函數(shù)、鼠標左鍵響應(yīng)函數(shù)等。(3)實現(xiàn)棋子類的查找接口、棋盤判空功能函數(shù)。要注意,其中查找函數(shù)有兩種:一種是輸入兩個棋子坐標查找有無連接線;另一種是在前一種基礎(chǔ)上,如果棋子間有連接就要把棋子的拐角位置輸出。(4)實現(xiàn)棋子類的配對接口函數(shù)分為兩種:一種是判斷當前棋盤上有無配對棋子;另一種是在前一種的基礎(chǔ)上添加輸出配對棋子坐標的功能。(5)實現(xiàn)各種不同的查找函數(shù)。包含查找一根直線連接函數(shù)、查找一個拐角連接函數(shù)和查找兩個拐角連接函數(shù)。4.3.4棋子的連接判斷對于選中的兩個方塊的處理,必須符合如下3個條件:1)選中的兩個小圖塊的填充圖案一致。2)兩個選定的小塊可以通過與X或Y軸平行的幾個直線連接,并且彼此垂直,沒有障礙物。3)連接它們的這些直線段不超過兩個拐點(連接線由x軸和y軸的平行線組成)現(xiàn)在針對條件2)和條件3)進行分析,如圖4-8所示。依圖4-8所示可知,相同圖案的連接方式可以分成以下3種:1)直接方式。2)有一個折點的垂直線段連接。3)有兩個折點的垂直線段連接.。(1)直接連接方式在直接連接模式下,所選的兩個棋子必須位于同一水平線上(x方向或Y方向),并且兩個正方形之間沒有其他圖案正方形。(2)單個拐點連接方式如果選定的兩個方塊通過折點連接,則對于折點,每個折點必須具有且至少一個坐標(x或y)與目標點之一相同,即折點必須在位于兩個目標點所在的X或Y方向的行上。此外,對于折點連接的情況,應(yīng)通過第一個選定方塊的橫向線或縱向線的交叉點和第二個選定方塊的縱線和橫向線的交叉獲得折點。(3)兩個折點的連接方式這樣,由兩個折點連成的直線和兩個對象之間的直線可以形成平行線。因此,根據(jù)此規(guī)則,水平線可以在游戲區(qū)域允許的條件下上下移動,然后通過判斷整條帶垂直折線點的曲線之間有無障礙物方式來確定是否可以連同。經(jīng)過上述詳細分析,能否對選定的兩個塊進行消除,可以采用這種方式進行設(shè)計。首先,判斷簡單的直接連接,看看它是否符合條件。如果不能,再加深一個級別的復(fù)雜性,判斷折點的情況,依次類推,如下圖4-8所示。圖4-8連線規(guī)則圖連線流程圖如圖4-9所示。圖4-9連線流程圖(1)首先判斷直連方式是否成功,直連方式判斷成功后就可以進行棋子的消除了;(2)如果直連方式判斷為失敗,則開始判斷單個拐點方式是否成功,單個拐點方式判斷成功后,則進行棋子的消除;(3)如果單個拐點方式判斷為失敗,則開始判斷兩個拐點方式是否成功,判斷兩個拐點方式為成功后,則進行棋子的消除,如果判斷為失敗,則不進行消除。這里把直接連接方式分為直通,左通,右通3種情況,如4-10圖所示。圖4-10連接方式圖下面簡單介紹直通、左通這兩種情況(右通與左通類似)(1)直通:直通就是在選定的兩個圖塊連線中,沒有任何其他圖塊進行阻礙。(2)左通:左通就是選定的兩個圖塊的連線間有其他圖塊進行阻礙,但通過其左側(cè)可以將它們無阻連通。直連中的此種情況跟之前分析的兩個折點連接方式中的其中一點類似,如4-11圖所示。圖4-11兩折通道圖以上兩種左通之間的區(qū)別是,直連左通的連接線直接在其相鄰位置連通,從而不構(gòu)成垂直折點偏移的效果,而雙個折點偏移方式中的其中一個類似的情況是,線的連通至少要偏移一個方塊的距離來形成連通。同理,有上通和下通,其情況類似于左通和右通。通過行判斷是否通(并返回能通過的行)4.3.5鼠標交互功能的實現(xiàn)(1)首先,每個小塊的寬度和高度,以鼠標的當前坐標位置點為模型,來獲取當前鼠標著陸點所在的游戲區(qū)域中行和列的具體位置:(2)判斷行數(shù)和列數(shù)是否符合條件。確保計算的行和列數(shù)在預(yù)先定義區(qū)域中行和列的最大數(shù)量范圍內(nèi),并且單擊的區(qū)域的狀態(tài)不是空白的方形區(qū)域。(3)要判斷此鼠標事件的選擇是否與第一個選取的相同,我們只需要檢查用于記錄第一個選定的小塊的行和列數(shù)的成員變量是否有效。(4)對于所選小塊是第一個框,首先在選定的小塊中添加一個紅色矩形外邊框,以提示選擇了第一個方塊的用戶。(5)對選定的塊做出一些判斷,以獲得更高效的處理。判斷所選塊是否與前一個塊相同,然后跳到下一步,檢查兩個選定的塊是否可以被抵消。(6)調(diào)用前面功能函數(shù)isLink,以判斷兩個選定的模式是否可以相互抵消。(7)如果可以抵消,應(yīng)適當修改內(nèi)部核心地圖中兩個選定塊的數(shù)據(jù)狀態(tài),并將其狀態(tài)記錄為已銷毀的空塊狀態(tài)。(8)第二個圖塊選擇和相關(guān)功能操作完成后,應(yīng)清理工程中所記錄的第一個圖塊的位置,以便選擇下一個新的塊組。(9)最后,判斷鼠標操作是否已成功完成,如果成功,給用戶一個提示,然后重新開始新的關(guān)卡。為了實現(xiàn)游戲和用戶互動,選擇鼠標交互模式。以下是鼠標交互功能的簡要描述。鼠標選擇兩個塊后,程序?qū)⒆詣哟_定是否可以消除所選塊。若能則進行消除,反之則不消除。在整個游戲過程中,不斷重復(fù)上面描述的判定與操作,在整個游戲過程中,上述判斷和操作會不斷重復(fù),直到游戲在全部淘汰后結(jié)束,或游戲在指定時間之前失敗。下面將鼠標事件處理工作歸納為如圖4-12所示的流程。圖4-12鼠標交互流程圖依據(jù)預(yù)先設(shè)計的鼠標交互處理流程,上面已經(jīng)將其轉(zhuǎn)換成實現(xiàn)流程圖。下面則按照流程的子功能模塊分配方式,對整個功能模塊的實現(xiàn)過程進行簡單描述。(1)每個小塊的寬度和高度由鼠標的當前位置坐標建模,并獲取游戲區(qū)域當前鼠標落點的特定行和列坐標(x,y)。(2)判斷行和列的數(shù)量是否符合最大條件。確保計算獲得的行和列坐標(x,y)在預(yù)定區(qū)域中行和列的最大數(shù)量范圍內(nèi),并且點擊的區(qū)域的狀態(tài)不是已消除的空白塊。(3)要判斷鼠標選擇是否與選擇第一個塊相同,我們只需要判斷記錄第一個選定塊的行和列數(shù)的成員變量是否有效。(4)如果所選方塊是第一個選定的方塊,請首先記錄當前選定的方塊的坐標,然后直接在屏幕上繪制一個線框,并在塊區(qū)域周圍添加一個紅色矩形邊框,以提示玩家第一個選定的塊的位置。(5)在這一處理中,對選定圖塊作一些判斷,便以更高效地處理。判斷選中的圖塊與前一圖塊是否為同一圖塊,并且只有在此次選擇不與上次選定的圖塊為同一圖塊時,才跳到下一步對兩個選定的圖塊是否可以消除的判定流程中去。(6)最后,判斷此關(guān)所有鼠標操作是否已全部結(jié)束,如果是則給予用戶順利通關(guān)或不幸失敗提示,然后等待玩家重新開始新一關(guān)的指令。為了實現(xiàn)鼠標交互功能,按下左鼠標按鈕時觸發(fā)的命令消息可以被截獲,并對該消息的處理函數(shù)OnLButtonDown()進行重寫。4.3.6游戲勝利的判斷在游戲程序中,游戲結(jié)束的判斷往往是非常重要的,它表示著進行一次游戲的最終結(jié)果。對于本連連看游戲程序?qū)τ螒蚪Y(jié)束的判斷,自然是先檢查游戲區(qū)域中的小方塊是否都消除,由于某個位置是否由小方塊采用不同的數(shù)值進行記錄,所以只需判斷各個小方塊位置的狀態(tài)就可以了。其次,由于本游戲程序的設(shè)計是按照連貫性進行設(shè)計的,如果在游戲中,當?shù)貓D中的所有部分都被淘汰時,則應(yīng)自動執(zhí)行下一個級別。在這里,我們可以通過if和else判斷。另一種情況是,當游戲沒有完成,當時間被消耗或當沒有生命點,有一個死局,即沒有一組棋子在游戲地圖中可以消除,則游戲依然結(jié)束彈出游戲結(jié)束對話框。此外,應(yīng)提示游戲結(jié)束的原因,并應(yīng)將相應(yīng)的值添加到計數(shù)器進行跟蹤,當計數(shù)器值為0時,觸發(fā)模式用于在游戲功能結(jié)束時終止游戲。圖4-13判斷游戲勝利如圖4-13所示,要判斷游戲的勝利,實現(xiàn)起來較為簡單,只需對地圖中的所有區(qū)域的狀態(tài)進行檢測即可判定。如果檢測到地圖中至少有兩個棋子還沒有被消除,則證明游戲沒有勝利。繼續(xù)檢查所有游戲區(qū)域,知道檢測出游戲區(qū)域內(nèi)的所有棋子都被消除了,這才說明游戲勝利,即游戲結(jié)束。還有另一種情況,即整個游戲區(qū)域內(nèi)的棋子還沒有消除完畢,但是游戲時間到了,那么,也同樣彈出游戲結(jié)束對話框。(1)等待用戶的鼠標輸入信息;(2)在定時器中,每次扣除游戲的限制時間一秒;(3)當游戲時間為零秒時,彈出游戲失敗結(jié)束提示,并根據(jù)用戶選擇重新開始游戲或者結(jié)束游戲(4)在用戶消除一對棋子后,就對當前棋盤數(shù)組進行遍歷。如果是空,如果是空,說明用戶已經(jīng)全部消除完畢。調(diào)用升級處理。如果不是空,則返回步驟(1)。(5)當整個游戲區(qū)域內(nèi)所有的棋子都被消除后,則游戲勝利。5系統(tǒng)調(diào)試與測試5.1程序調(diào)試在編程過程中,不可避免地會出現(xiàn)一些錯誤。對于程序語句的語法錯誤,編譯器將在編譯程序時自動提示并要求立即更正。因此,此類錯誤很容易找到和糾正。但另一種錯誤是由于程序運行時的操作不正確或邏輯錯誤。這種錯誤是非常隱蔽的,有時出現(xiàn),有時不出現(xiàn),因此,研究這種動態(tài)錯誤是非常耗時和費力的。5.2程序的測試測試的主要內(nèi)容(1)主菜單和界面顯示功能的測試圖5-1主菜單和界面顯示功能測試此測試案例主要測試游戲的菜單和界面顯示是否成功。測試步驟如下:一是運行連連看程序并開始調(diào)試:其次,程序啟動后,菜單和主接口將顯示如圖5-1所示的樣子。(2)游戲地圖的測試:圖5-2地圖測試游戲地圖的測試則是要在整個游戲區(qū)域內(nèi)看到一個由若干個空方塊構(gòu)成的地圖,如圖5-1所示,而且每個空塊包含不同的棋子圖案。這些具有不同圖案的方塊根據(jù)某些規(guī)則分布在整個游戲區(qū)域的不同位置,每個小塊都有與其相對應(yīng)的相同小塊。圖案方塊的連接測試:圖5-3連接測試用鼠標選擇兩個小圖塊,若它們之間沒有障礙物,且又在同一條直線上,那么就可以用一條直線消除;若是不在同一條直線上,但是中間也沒有其他的障礙物,則可以利用折線進行消除如圖5-2所示。如果以上兩種情況都沒有出現(xiàn),則返回重新尋找可以消除的棋子即小圖塊。(3)鼠標交互功能實現(xiàn)的測試:圖5-4交互功能測試游戲開始后,在用戶用鼠標進行了兩次選擇之后,我們要看到程序自己給出的判斷,兩次選舉中的圖案能消除或者不能消除,若能消除則要進行消除。如圖5-4所示,用戶如果選擇的是兩個相同的棋子,就進行消除,如果不能消除的話要重新進行選擇。(4)游戲勝利的測試:圖5-5游戲勝利的測試1圖5-6游戲勝利的測試2在整個游戲區(qū)域內(nèi),如果發(fā)現(xiàn)沒有可供選擇的棋子了,也就是整個游戲區(qū)域內(nèi)的棋子被全部消除,則立即彈出游戲勝利對話框,用戶可以選擇再來一局,也可以選擇退出游戲。如圖5
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)蒙古藝術(shù)學(xué)院《歐美影視文化》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京中醫(yī)藥大學(xué)翰林學(xué)院《定性數(shù)據(jù)分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東工藝美術(shù)學(xué)院《操作系統(tǒng)原理實驗課》2023-2024學(xué)年第二學(xué)期期末試卷
- 九江學(xué)院《民舞-運動舞蹈劇目排練與實踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東省淄博市臨淄區(qū)2024-2025學(xué)年三年級數(shù)學(xué)第二學(xué)期期末聯(lián)考模擬試題含解析
- 綿陽城市學(xué)院《醫(yī)學(xué)影像成像原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川護理職業(yè)學(xué)院《高分子物理B》2023-2024學(xué)年第二學(xué)期期末試卷
- 鐵路冬季四防安全培訓(xùn)
- 2025水質(zhì)檢測技術(shù)服務(wù)合同
- 2025年高考歷史歷史問答題5種公式法5種記憶法匯編
- YS-T 3038-2020 黃金生產(chǎn)用顆粒活性炭
- 新生兒低蛋白血癥指南課件
- 四川省宜賓市2023-2024學(xué)年八年級上學(xué)期期末義務(wù)教育階段教學(xué)質(zhì)量監(jiān)測英語試題
- 電力各種材料重量表總
- 班級管理課件:班級文化管理
- 門窗工程工作總結(jié)報告
- (完整文檔版)CRF表
- 發(fā)展心理學(xué)第五章 幼兒的心理發(fā)展
- 廣東深圳市道路交通管理事務(wù)中心招考聘用員額制工作人員筆試歷年高頻考點試題含答案帶詳解
- 家長會課件:四下英語家長會優(yōu)質(zhì)課件
- 華文版書法五年級下冊 第10課 走之旁 教案
評論
0/150
提交評論