




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、湖南涉外經(jīng)濟(jì)學(xué)院課程設(shè)計(jì)報(bào)告課程名稱:程序設(shè)計(jì)實(shí)訓(xùn)(2)報(bào)告題目:連連看游戲的開(kāi)發(fā)學(xué)生姓名:唐 杰所在學(xué)院:信息科學(xué)與工程學(xué)院專業(yè)班級(jí):計(jì)科1002班學(xué)生學(xué)號(hào):指導(dǎo)教師:鄒 競(jìng)2013年6月25日課程設(shè)計(jì)任務(wù)書(shū)報(bào)告題目連連看游戲的開(kāi)發(fā)完成時(shí)間2013-6學(xué)生姓名唐 杰專業(yè)班級(jí)計(jì)科1002班指導(dǎo)教師鄒競(jìng)職稱講師總體設(shè)計(jì)要求和技術(shù)要點(diǎn)設(shè)計(jì)一個(gè)連連看游戲程序,游戲程序的功能需求如下:游戲區(qū)是一個(gè)包含了多種不同花色游戲牌的二維棋盤(pán),棋盤(pán)的行數(shù)和列數(shù)可以自行定義。每一種花色的游戲牌的數(shù)量都是偶數(shù)。兩張花色相同的游戲牌的之間的路徑如果滿足以下條件,這兩張游戲牌即可消去:路徑連線由不多于3條的水平和垂直的線
2、段構(gòu)成,任何一條線段都不能穿越其他的游戲牌,但可以不在棋盤(pán)中,路徑兩端的游戲牌必須具有相同的花色。游戲只要用鼠標(biāo)即可進(jìn)行操作。最初棋盤(pán)里布滿了游戲牌,游戲開(kāi)始時(shí)進(jìn)行計(jì)時(shí)。第一次使用鼠標(biāo)點(diǎn)擊棋盤(pán)中的游戲牌,該游戲牌此時(shí)為“被選中”,以特殊方式顯示;再次以鼠標(biāo)點(diǎn)擊其他游戲牌,若該游戲牌與被選中的游戲牌兩者花色相同,且把第一張游戲牌到第二張游戲牌連起來(lái),中間的線段不超過(guò)3條,則消掉這一對(duì)游戲牌,否則第一張游戲牌恢復(fù)成未被選中狀態(tài),而第二張游戲牌變成被選中狀態(tài)。每消去一對(duì)游戲牌,應(yīng)檢查棋盤(pán)內(nèi)是否至少還存在一對(duì)能消去的游戲牌,如果不存在,則在原有位置對(duì)游戲牌進(jìn)行重排,直到至少存在一對(duì)能夠消去的游戲牌。如
3、果在指定的時(shí)間內(nèi)消去了所有的游戲牌,游戲勝利;如果時(shí)間耗盡還未能消除全部的游戲牌,游戲失敗。要求每人獨(dú)立完成,使用主流開(kāi)發(fā)工具,盡可能采用面向?qū)ο蠓椒?,在設(shè)計(jì)判斷兩張相同花色游戲牌能否消去的算法時(shí),盡可能使用狀態(tài)空間搜索算法(如回溯法、分支限界法等),要求代碼的具有一定的可讀性、可維護(hù)性和可擴(kuò)充性??梢詤⒖冀處熃o定的程序或者其他程序,但程序和報(bào)告嚴(yán)禁全盤(pán)抄襲。工作內(nèi)容及時(shí)間進(jìn)度安排第11周第12周:對(duì)需要開(kāi)發(fā)的軟件進(jìn)行需求分析和軟件設(shè)計(jì)第13周:論證方案設(shè)計(jì)第14周第16周:程序設(shè)計(jì)第17周:測(cè)試、修改程序,撰寫(xiě)報(bào)告第18周:驗(yàn)收答辯課程設(shè)計(jì)成果1與設(shè)計(jì)內(nèi)容對(duì)應(yīng)的軟件程序2課程設(shè)計(jì)總結(jié)報(bào)告摘
4、要在計(jì)算機(jī)逐步滲入社會(huì)生活各個(gè)層面的今天,計(jì)算機(jī)已經(jīng)成為人們?nèi)粘I畈豢苫蛉钡囊徊糠?,越?lái)越多的人使用計(jì)算機(jī)辦公、娛樂(lè)、購(gòu)物等等。游戲行業(yè)發(fā)展一日千里,該行業(yè)極大的影響和改變了人們的生活和娛樂(lè)方式,游戲?yàn)橄M(fèi)者提供豐富多彩的虛擬空間,使消費(fèi)者可以自由自在的享受虛擬世界的樂(lè)趣,實(shí)現(xiàn)自己在現(xiàn)實(shí)生活著那個(gè)可能永遠(yuǎn)不能實(shí)現(xiàn)的夢(mèng)想,滿足了消費(fèi)者的心理和精神需求。連連看游戲是一款很流行的小游戲,有的是連水果圖片,有的是連麻將牌,有的是連各種小圖片的等等。各種圖片讓人看得眼花繚亂,這也可以鍛煉人的反應(yīng)能力和眼力,所以這款小游戲受到了越來(lái)越多人的喜愛(ài),尤其是小孩子的喜愛(ài)。連連看游戲也是比較經(jīng)典的一款小游戲,實(shí)
5、現(xiàn)它的方法很多,可以用很多不同算法設(shè)計(jì)和語(yǔ)言實(shí)現(xiàn),如C,C#,C+,VB,JAVA等。在本課程設(shè)計(jì)中我是利用C#語(yǔ)言編寫(xiě),開(kāi)發(fā)平臺(tái)是Microsoft Visual Studio 2010,功能較為簡(jiǎn)單,寓學(xué)于樂(lè)。程序的功能是通過(guò)找出游戲中兩個(gè)相同圖案的小方塊,然后分別點(diǎn)擊兩個(gè)小方塊將其消除;可通過(guò)倒計(jì)時(shí)的方式控制游戲時(shí)間,游戲時(shí)間到或者沒(méi)有匹配的圖案時(shí)則游戲結(jié)束,需要重新開(kāi)局,每一局開(kāi)始倒計(jì)時(shí)都重新開(kāi)始;能夠響應(yīng)鼠標(biāo)事件。論文首先介紹了進(jìn)行該游戲課程設(shè)計(jì)的目的,然后是任務(wù)描述和設(shè)計(jì)的相關(guān)要求,最后是最重要的需求分析和設(shè)計(jì)方案。重點(diǎn)介紹了在游戲過(guò)程中各種事件的處理,其中又以鼠標(biāo)事件的處理最為最
6、要,鼠標(biāo)事件是利用鼠標(biāo)所發(fā)出的信息了解用戶的意圖,進(jìn)而做出相對(duì)應(yīng)的動(dòng)作,消除需要消除的小方塊。關(guān)鍵詞:連連看游戲;算法設(shè)計(jì);事件;C#;Microsoft Visual Studio 2010目 錄摘 要I一、課程設(shè)計(jì)目的1二、任務(wù)描述和要求22.1 問(wèn)題描述22.2 任務(wù)描述22.3 設(shè)計(jì)要求3三、需求分析43.1功能分析43.2功能需求43.3 功能模塊53.4系統(tǒng)需求分析總結(jié)6四、設(shè)計(jì)方案74.1 總體設(shè)計(jì)74.1.1 系統(tǒng)基本功能74.1.2 系統(tǒng)流程84.1.3 主要功能模塊104.2 詳細(xì)設(shè)計(jì)104.2.1 規(guī)則詳解104.2.2部分程序代碼解析114.2.3運(yùn)行結(jié)果分析16五、總
7、結(jié)20六、參考文獻(xiàn)21一、課程設(shè)計(jì)目的程序設(shè)計(jì)實(shí)訓(xùn)課程是是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)重要的實(shí)踐性課程之一,其實(shí)踐性和應(yīng)用性都很強(qiáng)。本課程設(shè)計(jì)是對(duì)這門(mén)課程經(jīng)過(guò)一個(gè)學(xué)期的學(xué)習(xí)后進(jìn)行的一次全面而綜合的練習(xí)。C#程序設(shè)計(jì)的設(shè)計(jì)目的就是加深理論教學(xué)內(nèi)容的理解和掌握,使學(xué)生較系統(tǒng)地掌握程序設(shè)計(jì)及其在軟件開(kāi)發(fā)的廣泛應(yīng)用,同時(shí)也是為后續(xù)各門(mén)計(jì)算機(jī)課程的學(xué)習(xí)和畢業(yè)設(shè)計(jì)打下基礎(chǔ)。本次課程設(shè)計(jì)的目的主要有:(1)鞏固和加深學(xué)生對(duì)C#的基本知識(shí)和語(yǔ)法的理解與掌握;(2)掌握C#語(yǔ)言編程和調(diào)試的基本技能;(3)運(yùn)用C#語(yǔ)言對(duì)程序進(jìn)行簡(jiǎn)單的框架設(shè)計(jì);(4)讓學(xué)生掌握較為簡(jiǎn)單的算法分析能力;(5)提高與運(yùn)用C#語(yǔ)言能解決實(shí)際問(wèn)題
8、的能力。(6)更深入地理解和掌握該課程中的有關(guān)基本概念,程序設(shè)計(jì)思想和方法。(7)對(duì)掌握知識(shí)的深度、運(yùn)用理論去處理問(wèn)題的能力、實(shí)驗(yàn)?zāi)芰Α⒄n程設(shè)計(jì)能力進(jìn)行考核。(8)培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí)獨(dú)立完成課題的能力。(9)掌握程序設(shè)計(jì)說(shuō)明文檔的能力與技巧;二、任務(wù)描述和要求本章主要內(nèi)容包括本課程設(shè)計(jì)的任務(wù)描述和設(shè)計(jì)要求兩大模塊。任務(wù)描述主要是介紹在課程設(shè)計(jì)的整個(gè)過(guò)程的任務(wù)流程和時(shí)間規(guī)劃等;設(shè)計(jì)要求是提出課程設(shè)計(jì)過(guò)程中要注意的一些細(xì)節(jié)問(wèn)題。2.1 問(wèn)題描述連連看游戲,用戶需要找出游戲中相同的兩個(gè)方塊,用鼠標(biāo)分別點(diǎn)擊兩個(gè)相同的小方塊,如果它們之間的連接線不超過(guò)三條直線,就可以將著兩個(gè)小方塊消掉,當(dāng)游戲中沒(méi)
9、有滿足條件的圖案時(shí),還可以實(shí)現(xiàn)重新排列的功能,即點(diǎn)擊“重列”按鈕就可以重新排列本局游戲中剩余的圖案,但計(jì)時(shí)器還是會(huì)繼續(xù)計(jì)時(shí),在游戲結(jié)束時(shí)能夠看到最后的得分。2.2 任務(wù)描述隨著人們工作壓力變得越來(lái)越大,現(xiàn)如今更多的人開(kāi)始通過(guò)玩游戲來(lái)排解內(nèi)心的壓力,而各種各樣的游戲也排入市場(chǎng),一些大型網(wǎng)絡(luò)游戲更是一些年輕用戶的最愛(ài),所有連連看游戲面對(duì)市場(chǎng)的競(jìng)爭(zhēng)壓力還是非常大的。分析連連看游戲的游戲規(guī)則,查找規(guī)則并對(duì)主要功能進(jìn)行模仿程序?qū)崿F(xiàn),對(duì)于實(shí)現(xiàn)過(guò)程中出現(xiàn)的bug進(jìn)行調(diào)試解決。經(jīng)過(guò)對(duì)連連看游戲的初步分析,游戲含有如下規(guī)則:根據(jù)用戶執(zhí)行的鼠標(biāo)事件,做出相應(yīng)的消除操作。在檢驗(yàn)兩個(gè)小方塊能否消掉的時(shí)候,要讓兩個(gè)小方
10、塊同時(shí)滿足兩個(gè)條件才行,就是兩者配對(duì)并且連線成功。如果要配對(duì)并且連線成功又要分為三種情況,也就是檢測(cè)三種情況。這三種檢測(cè)分別檢測(cè)一條直路徑,這樣就會(huì)有三條路徑;如果這三條路徑上面都是空的小方塊,那么就剛好是三條直線把兩個(gè)小方塊連接起來(lái)了。要讓兩個(gè)小方塊連接起來(lái),一條路徑最多不能超過(guò)三條直線,也就是最多只能有兩個(gè)轉(zhuǎn)彎。 具體任務(wù)如下:(1)本課題為連連看游戲的開(kāi)發(fā);(2)需要為Windows操作系統(tǒng)的用戶設(shè)計(jì)完成一款連連看游戲,這是一個(gè)根據(jù)某種算法隨機(jī)排列具有不同圖案的小方塊,并形成一個(gè)友好的用戶界面,供用戶娛樂(lè)之用的小軟件;(3)本游戲在難度設(shè)置上跟傳統(tǒng)的小游戲有點(diǎn)區(qū)別,不是分為初、中、高三個(gè)
11、難度等級(jí),而是一個(gè)已經(jīng)固定的難度,即每局游戲的圖案種類數(shù)為20種,每種圖案的重復(fù)數(shù)為4對(duì);(4)程序模塊清晰,具有較好的人機(jī)交互能力,核心代碼需要加上必要的注釋,以便用戶能夠很快讀懂本游戲的集體實(shí)現(xiàn)過(guò)程;(5)設(shè)計(jì)過(guò)程中,前兩周,對(duì)整個(gè)游戲所實(shí)現(xiàn)的功能進(jìn)行詳細(xì)的設(shè)計(jì)以及對(duì)存在的問(wèn)題及解決辦法進(jìn)行最終確定;一周完成游戲的程序編寫(xiě),并優(yōu)化;最后一周,寫(xiě)出設(shè)計(jì)本游戲的詳細(xì)文檔說(shuō)明,并作課程設(shè)計(jì)匯報(bào);(6)連連看游戲課程設(shè)計(jì)實(shí)現(xiàn)流程圖如圖2.1所示:制定規(guī)則設(shè)計(jì)算法算法實(shí)現(xiàn)調(diào)試 測(cè)試數(shù)據(jù)分析完成設(shè)計(jì)報(bào)告圖2.1 課程實(shí)現(xiàn)流程圖圖2.1描述了整個(gè)課程設(shè)計(jì)的實(shí)現(xiàn)流程。前期工作是制定規(guī)則和設(shè)計(jì)算法,這一階段
12、主要任務(wù)是搜集相關(guān)資料,然后根據(jù)搜集到的資料結(jié)合自己所學(xué)知識(shí)制定系統(tǒng)實(shí)現(xiàn)算法;中期工作是算法實(shí)現(xiàn)和調(diào)試系統(tǒng),這一階段主要任務(wù)是完成算法的實(shí)現(xiàn),然后進(jìn)行調(diào)試和優(yōu)化系統(tǒng);后期工作是對(duì)數(shù)據(jù)結(jié)果進(jìn)行分析,然后完成課程設(shè)計(jì)報(bào)告。2.3 設(shè)計(jì)要求 按照指導(dǎo)老師對(duì)課程設(shè)計(jì)的要求,學(xué)生要自行完成各個(gè)環(huán)節(jié),并且實(shí)現(xiàn)且達(dá)到靈活運(yùn)用的目的,要求能夠全面深入理解和熟練掌握所學(xué)的內(nèi)容,能夠分析、設(shè)計(jì)和解答各類專業(yè)問(wèn)題。(1)系統(tǒng)需求分析,對(duì)系統(tǒng)中需要實(shí)現(xiàn)的功能進(jìn)行具體分析和設(shè)計(jì);(2)采用結(jié)構(gòu)化、模塊化程序設(shè)計(jì)思想設(shè)計(jì);(3)理解連連看游戲玩法的特點(diǎn),并分析玩法的實(shí)現(xiàn)功能;(4)設(shè)計(jì)是否消除相同小方塊的判斷算法;(5)
13、游戲“暫停/重新開(kāi)始”的實(shí)現(xiàn)方法;(6)進(jìn)行概念設(shè)計(jì)和邏輯結(jié)構(gòu)設(shè)計(jì),以便使系統(tǒng)實(shí)現(xiàn)進(jìn)展順利;(7)進(jìn)行詳細(xì)的設(shè)計(jì)方案,包括總體設(shè)計(jì)和詳細(xì)設(shè)計(jì),這包括程序設(shè)計(jì)代碼的分析和系統(tǒng)運(yùn)行界面截圖的分析;(8)要求人機(jī)交互性較強(qiáng),界面較美觀;設(shè)計(jì)方案和執(zhí)行結(jié)果的分析總結(jié)。三、需求分析需求分析的主要任務(wù)即詳細(xì)的找出程序所需要的各種功能實(shí)現(xiàn),是對(duì)系統(tǒng)功能進(jìn)一步分析和抽象,以確定系統(tǒng)應(yīng)當(dāng)做什么的問(wèn)題,從而完成系統(tǒng)的邏輯設(shè)計(jì)。本課程設(shè)計(jì)是連連看游戲的實(shí)現(xiàn),首先是要實(shí)現(xiàn)連連看游戲的基本功能,根據(jù)連連看游戲的玩法,設(shè)計(jì)程序,實(shí)現(xiàn)程序功能。本系統(tǒng)需求分析分為四個(gè)部分:功能分析、功能需求、功能模塊和系統(tǒng)需求分析報(bào)告。3.
14、1功能分析每次用戶選擇兩個(gè)相同的小方塊,如果小方塊滿足一定條件(這兩個(gè)小方塊之間存在轉(zhuǎn)彎少于3的路徑),則兩個(gè)小方塊可以消掉,給定任意具有相同圖案的兩個(gè)小方塊,用戶需要尋找這兩個(gè)小方塊之間在轉(zhuǎn)彎最少的情況下,如果這個(gè)最優(yōu)路徑的轉(zhuǎn)彎數(shù)目小于3,則這兩個(gè)小方塊可以消掉。所以,主要需要解決的問(wèn)題就是怎么樣得出相同小方塊之間的最優(yōu)路徑,這個(gè)最優(yōu)路徑首先需要保證轉(zhuǎn)彎數(shù)目最少。游戲開(kāi)始時(shí),系統(tǒng)會(huì)在游戲區(qū)域中隨機(jī)布下20*4個(gè)不同圖案的小方塊。第一次使用鼠標(biāo)點(diǎn)擊游戲界面中的小方塊,該小方塊此時(shí)為被選中狀態(tài),再次用鼠標(biāo)點(diǎn)擊其他小方塊,若該小方塊與被選中的小方塊圖案相同,且把第一個(gè)小方塊到第二個(gè)小方塊連起來(lái),連
15、線的路徑中間的直線不超過(guò) 3 根(最多兩次轉(zhuǎn)彎),則消掉這一對(duì)小方塊,否則第一個(gè)小方塊恢復(fù)成未被選中狀態(tài),而第二個(gè)小方塊變成“被選中”狀態(tài)。每次消除一對(duì)小方塊會(huì)增加一定的時(shí)間。勝利條件:將游戲區(qū)域上的小方塊全部消除掉且時(shí)間未消耗完。失敗條件:時(shí)間消耗完,或者剩下的小方塊沒(méi)有路徑能夠匹配(即界面上的小方塊仍未全部消掉)。3.2功能需求(1)游戲界面大致分為兩大區(qū),左邊為游戲操作區(qū),右邊是設(shè)置區(qū);(2)本游戲功能較為簡(jiǎn)單,只具有連連看游戲的基本功能(計(jì)時(shí)器、積分器、暫停/重新開(kāi)始、重列),默認(rèn)的圖案種類數(shù)是20種,重復(fù)數(shù)每種圖案為4對(duì);(3)游戲操作區(qū)是系統(tǒng)自動(dòng)排列的默認(rèn)的20*4個(gè)小方塊,用戶可
16、以點(diǎn)擊小方塊來(lái)消除具有相同圖案的小方塊;(4)設(shè)置區(qū)中顯示當(dāng)前游戲的種類數(shù)、重復(fù)數(shù)、“開(kāi)始游戲”按鈕、“重列”按鈕、“暫停/重新開(kāi)始”按鈕和得分情況;(5)在游戲操作區(qū)的下方顯示有“剩余時(shí)間”的進(jìn)度條,當(dāng)進(jìn)度條的時(shí)間耗完時(shí),則游戲結(jié)束;(6)游戲中用到的部分圖案如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3.3 功能模塊本游戲主要細(xì)分為以下幾大模塊:(1)游戲主界面 以Microsoft Visual Studio 2010為開(kāi)發(fā)
17、平臺(tái)設(shè)計(jì)主界面,主要控件有1個(gè)主窗體Form、1個(gè)groupbox、1個(gè)progressbar、4個(gè)button、7個(gè)label。(2)隨機(jī)排列小方塊(3)鼠標(biāo)事件(4)小方塊消除判斷(5)游戲難度設(shè)置本游戲沒(méi)有用戶自定義游戲難度選擇,而是使用默認(rèn)的圖案種類數(shù)是20種,每種圖案的重復(fù)數(shù)是4對(duì),所以游戲的靈活性較差。(6)游戲重列 對(duì)本局游戲中剩下的小方塊重新排列,計(jì)時(shí)器不會(huì)暫停。此模塊的主要作用就是在用戶自身不能找到能夠消掉的小方塊的情況下,通過(guò)重列剩下的小方塊來(lái)產(chǎn)生新的路徑,使游戲能夠繼續(xù)玩下去。(7)暫停/重新開(kāi)始 點(diǎn)擊“暫?!卑粹o能夠使當(dāng)前正在運(yùn)行的游戲暫時(shí)停止,主要是使讓時(shí)間停止,不再
18、倒計(jì)時(shí);游戲暫停時(shí)鼠標(biāo)不能對(duì)游戲操作區(qū)域進(jìn)行操作,此時(shí)“暫停”按鈕變成“重新開(kāi)始”按鈕,用戶只要點(diǎn)擊“重新開(kāi)始”按鈕即可繼續(xù)游戲操作。(8)游戲勝利(游戲結(jié)束,需要重新開(kāi)始游戲)(9)游戲失?。ㄓ螒蚪Y(jié)束,需要重新開(kāi)始游戲)3.4系統(tǒng)需求分析總結(jié)本系統(tǒng)的結(jié)構(gòu)基本合理,系統(tǒng)功能也基本能夠達(dá)到連連看游戲的要求,采用了最基本的最短路徑優(yōu)先的算法,使系統(tǒng)地運(yùn)行效率達(dá)到最高。本系統(tǒng)的輸入邊界是用戶進(jìn)行的鼠標(biāo)事件操作和對(duì)游戲的復(fù)雜程度進(jìn)行設(shè)置;輸出邊界是游戲結(jié)束,游戲勝利或者游戲失敗。通過(guò)對(duì)連連看游戲規(guī)則以及相關(guān)算法的分析,本系統(tǒng)總的數(shù)據(jù)量較小,規(guī)模不是很大,適合于在普通微機(jī)或小型機(jī)上運(yùn)行。四、設(shè)計(jì)方案設(shè)計(jì)
19、方案是對(duì)一個(gè)系統(tǒng)進(jìn)行詳細(xì)而具體的設(shè)計(jì),本系統(tǒng)的設(shè)計(jì)方案主要分為總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩部分。總體設(shè)計(jì)是對(duì)整個(gè)系統(tǒng)結(jié)構(gòu)化的設(shè)計(jì),包括系統(tǒng)的大致框架和各個(gè)函數(shù)以及類的說(shuō)明;詳細(xì)設(shè)計(jì)是對(duì)各個(gè)類和函數(shù)進(jìn)行定義和具體實(shí)施,以及各種圖例的詳解。4.1 總體設(shè)計(jì)本課程設(shè)計(jì)采用的是單機(jī)模式,當(dāng)在規(guī)定的時(shí)間內(nèi)消除完全部的小方塊則游戲過(guò)關(guān),如果在規(guī)定的時(shí)間內(nèi)沒(méi)能消除完所有的小方塊則游戲結(jié)束,需要重新開(kāi)始新游戲。游戲規(guī)則是模仿普通的連連看游戲,主要是鼠標(biāo)兩次點(diǎn)擊的小方塊能否消去的問(wèn)題。前提是點(diǎn)擊兩個(gè)具有相同的圖案的小方塊,若點(diǎn)擊的是同一個(gè)小方塊或者兩個(gè)不同的圖案的小方塊,則不進(jìn)行處理;在兩個(gè)相同圖案的小方塊用三根以內(nèi)(
20、包括三根)的直線能連在一起,就可以消掉;否則,不進(jìn)行處理。游戲過(guò)程,如果用戶在規(guī)定的時(shí)間內(nèi)消掉所有的小方塊則提示游戲勝利,會(huì)彈出一個(gè)“游戲勝利!”的對(duì)話框;如果在規(guī)定時(shí)間內(nèi)小方塊沒(méi)有消完則提示時(shí)間到游戲失敗,會(huì)彈出一個(gè)“游戲失??!”的對(duì)話框??紤]到本游戲是單機(jī)小游戲,所以充分考慮到它的娛樂(lè)性,并沒(méi)有很復(fù)雜的功能。系統(tǒng)的總體設(shè)計(jì)是對(duì)整個(gè)系統(tǒng)的結(jié)構(gòu)化設(shè)計(jì),包括系統(tǒng)基本功能的設(shè)計(jì)、系統(tǒng)流程的設(shè)計(jì)和各個(gè)功能模塊的設(shè)計(jì)等。4.1.1 系統(tǒng)基本功能本系統(tǒng)與我們常玩的連連看游戲相比較為簡(jiǎn)單,只具有連連看游戲的基本功能,邏輯設(shè)計(jì)方面也只有簡(jiǎn)單的“開(kāi)始游戲”、“重列”、圖案“種類數(shù)”和“重復(fù)數(shù)”的設(shè)定、剩余時(shí)間
21、和暫停/重新開(kāi)始。開(kāi)始游戲:初始化游戲區(qū)域,隨機(jī)排列小方塊。重列:對(duì)正在進(jìn)行的游戲中剩余的小方塊重新排列。種類數(shù):本游戲固定圖案種類是20種。重復(fù)數(shù):每種圖案的重復(fù)次數(shù)是4次,也就是4對(duì)。剩余時(shí)間:計(jì)時(shí)器,通過(guò)顯示時(shí)間進(jìn)度的方式對(duì)游戲進(jìn)行倒計(jì)時(shí)。暫停/重新開(kāi)始:暫停正在運(yùn)行的游戲,游戲暫停后也可以重新開(kāi)始(繼續(xù)本局游戲)。系統(tǒng)基本功能如圖4.1所示 圖4.1 系統(tǒng)基本功能圖圖4-1是連連看游戲的系統(tǒng)基本功能圖,從圖中可以看出系統(tǒng)主要分為六大功能,即開(kāi)始游戲、重列、種類數(shù)、重復(fù)數(shù)、剩余時(shí)間和暫停/重新開(kāi)始的設(shè)置。4.1.2 系統(tǒng)流程系統(tǒng)流程是對(duì)系統(tǒng)進(jìn)行大概分析后得出的系統(tǒng)各功能的流動(dòng)情況以及各個(gè)
22、操作之間的關(guān)系,上一步操作都與下一步操作有著緊密的聯(lián)系,即下一步操作都是由上一步操作所決定的。系統(tǒng)流程主要是對(duì)系統(tǒng)流程圖的分析,系統(tǒng)流程圖清晰的地反映出了系統(tǒng)的運(yùn)行情況和走向。(1)鼠標(biāo)事件具體流程圖如圖4.2所示圖4.2 鼠標(biāo)事件具體流程圖圖4.2是鼠標(biāo)事件的具體流程圖,在連連看游戲中,鼠標(biāo)事件是很重要的一部分,因?yàn)榛径际强际髽?biāo)去操作的,所以鼠標(biāo)事件的控制就非常重要了;上圖就是鼠標(biāo)在游戲過(guò)程中的具體判斷過(guò)程,主要是兩個(gè)相同小方塊之間路徑的判斷,分為一條直線(沒(méi)有轉(zhuǎn)彎)、兩條直線(一個(gè)轉(zhuǎn)彎)、三條直線(兩個(gè)轉(zhuǎn)彎)。(2)系統(tǒng)詳細(xì)運(yùn)行流程如圖4.3所示圖4.3 運(yùn)行流程圖圖4.3是游戲詳細(xì)的運(yùn)
23、行流程圖,圖中清晰地描述了系統(tǒng)的執(zhí)行過(guò)程,即根據(jù)不同的事件,游戲狀態(tài)的轉(zhuǎn)換。過(guò)程為:游戲開(kāi)始,等待事件,發(fā)出鼠標(biāo)事件,根據(jù)用戶發(fā)出的鼠標(biāo)命令,然后進(jìn)行各種判斷,系統(tǒng)分別作出不同的反應(yīng)。4.1.3 主要功能模塊private void Form1_MouseDown(object sender, MouseEventArgs e) /最重要的鼠標(biāo)事件private void ProcessCorner(Point p1,Point p2) /此方法做處理畫(huà)線和消除private void button1_Click_1(object sender, EventArgs e) /開(kāi)始游戲按鈕pri
24、vate void button2_Click(object sender, EventArgs e) /重列按鈕private void button3_Click(object sender, EventArgs e) /暫停/重新開(kāi)始按鈕private void pbtimer_Tick(object sender, EventArgs e) /計(jì)時(shí)器操作,判斷游戲是否失敗public bool IsDirectLink(int x1, int y1, int x2, int y2) /判斷兩個(gè)小方塊是否為直連關(guān)系,即判斷兩個(gè)小方塊之間是否能用一條之間連接(沒(méi)有轉(zhuǎn)彎)public boo
25、l IndirectLink(int x1, int y1, int x2, int y2) /處理直連以外的情況,即一個(gè)轉(zhuǎn)彎和兩個(gè)轉(zhuǎn)彎的情況4.2 詳細(xì)設(shè)計(jì)總體設(shè)計(jì)是對(duì)整個(gè)系統(tǒng)的結(jié)構(gòu)化和模塊化設(shè)計(jì),包括各功能模塊的設(shè)計(jì)和各個(gè)功能函數(shù)的說(shuō)明。詳細(xì)設(shè)計(jì)則是對(duì)各個(gè)類和功能函數(shù)進(jìn)行具體的定義和實(shí)施。下面是對(duì)系統(tǒng)中幾個(gè)較為重要的函數(shù)進(jìn)行描述。在總體設(shè)計(jì)中提到過(guò)要想消掉兩個(gè)小方塊,可以分為三種情況,下面就是三種情況的詳細(xì)解釋:4.2.1 規(guī)則詳解1、兩個(gè)相同的小方塊相鄰,則可以直接消掉。2、若不相鄰的先在第一個(gè)小方塊的同一行中找一個(gè)空方塊;1)找到后看第二個(gè)小方塊橫向到這個(gè)空方塊所在的列是否有小方塊;2
26、)沒(méi)有的話再看第一個(gè)小方塊到與它同行的那個(gè)空方塊之間是否有小方塊;3)如果還是沒(méi)有的話,再?gòu)呐c第一個(gè)小方塊同行的那個(gè)空方塊豎向到與第二個(gè)小方塊的同行看是否有其他的小方塊。沒(méi)有的話路經(jīng)就是通了,則可以將兩個(gè)小方塊消掉。 3、若上述2失敗后,再在第一個(gè)小方塊的同列找一個(gè)空方塊;1)找到后看第二個(gè)小方塊豎向到這個(gè)空方塊所在的行是否有小方塊;2)沒(méi)有的話,再看第一個(gè)小方塊到與它同列的那個(gè)空方塊之間是否有小方塊;3)如果還是沒(méi)有的話,再?gòu)呐c第一個(gè)小方塊同列的那個(gè)空方塊橫向到與第二個(gè)小方塊同列看是否有其他的小方塊。沒(méi)有的話路經(jīng)就是通了,則可以將兩個(gè)小方塊消掉。如果以上三步都失敗,說(shuō)明這兩個(gè)按鈕不可以消掉。
27、兩個(gè)小方塊能夠相連并消掉的所有情況如下所示: (1) (2) (3) (4) (5) (6) (7) -(1)兩個(gè)小方塊相鄰,可以直接消掉;(2)兩個(gè)小方塊在同一行上面且不相鄰,但中間沒(méi)有其他方塊阻擋;(3)兩個(gè)小方塊在同一行上,但中間有其他圖案的小方塊阻隔;(4)兩個(gè)小方塊在同一列,但中間有其他圖案的小方塊阻隔;(5)兩個(gè)小方塊既不在同一行也不在同一列,用三條直線連接(因?yàn)榈谝粋€(gè)小方塊的右邊可能有其他小方塊阻隔);(6)兩個(gè)小方塊既不在同一行也不在同一列,用兩條直線連接(第一個(gè)小方塊的某一方正好可以連接到第二個(gè)小方塊);(7)兩個(gè)小方塊既不在同一行也不在同一列,用三條直線連接(系統(tǒng)自動(dòng)檢測(cè),
28、連線從第一個(gè)小方塊的空閑的一面引出)4.2.2部分程序代碼解析 private int picnum = 20; /本局中圖片的數(shù)量 private int multipic = 4;/一張圖片重復(fù)出來(lái)的次數(shù),一定為偶數(shù) /鼠標(biāo)事件處理,主要是判斷轉(zhuǎn)彎數(shù)目和位置,并做相應(yīng)的消除操作 private void Form1_MouseDown(object sender, MouseEventArgs e) int curx = e.X / 31; int cury = e.Y/ 34; if (curx 18 | cury 10) return; if (gamestop = true) ret
29、urn; if (gmapcurx, cury != 0) Pen pen = new Pen(new SolidBrush(this.BackColor); g_g.DrawRectangle(pen, new Rectangle(curx * 31,cury * 34, 31, 34); two+; switch (two) case 1: fpoint = new Point(curx, cury);break; case 2: if (AI.IsLink(fpoint.X, fpoint.Y, curx, cury) two = 0; /獲得拐點(diǎn)數(shù)目和位置,做畫(huà)線處理 ProcessC
30、orner(fpoint,new Point(curx,cury); if (CheckWin(ref gmap) starttimer = false; MessageBox.Show(恭喜過(guò)關(guān)!); pbtimer.Stop(); bStart = false; else if (pbvalue = 0) break; two = 1; fpoint = new Point(curx, cury); break; default: break; /此方法做處理畫(huà)線和消除,直連時(shí)加10分,一個(gè)轉(zhuǎn)彎加20分,兩個(gè)轉(zhuǎn)彎加40分 private void ProcessCorner(Point p
31、1,Point p2) Point corner = new Point3; corner = AI.GetPoints(); Pen pen = new Pen(new SolidBrush(Color.Red), 5);/線畫(huà)筆 Pen bkpen = new Pen(new SolidBrush(this.BackColor), 5);/擦去畫(huà)筆 pbvalue += 4; switch (corner2.X) /轉(zhuǎn)彎數(shù) case 1: score += 20; /一個(gè)轉(zhuǎn)彎加20分; g_g.DrawLine(pen, new Point(p1.X*31+15,p1.Y*34+17),
32、new Point(corner0.X*31+15,corner0.Y*34+17); g_g.DrawLine(pen, new Point(p2.X * 31+15, p2.Y * 34+17), new Point(corner0.X * 31+15, corner0.Y * 34+17); Thread.Sleep(100); EraseBlock(g_g, p1, p2); g_g.DrawLine(bkpen, new Point(p1.X * 31 + 15, p1.Y * 34 + 17), new Point(corner0.X * 31 + 15, corner0.Y *
33、34 + 17); g_g.DrawLine(bkpen, new Point(p2.X * 31 + 15, p2.Y * 34 + 17), new Point(corner0.X * 31 + 15, corner0.Y * 34 + 17); break; case 2: score += 40; /兩個(gè)轉(zhuǎn)彎加40分 Point ps = new Point(p1.X*31+15,p1.Y*34+17),new Point( corner1.X*31+15,corner1.Y*34+17),new Point(corner0.X*31+15,corner0.Y*34+17),new P
34、oint(p2.X*31+15,p2.Y*34+17); g_g.DrawLines(pen, ps); Thread.Sleep(100); EraseBlock(g_g, p1, p2); g_g.DrawLines(bkpen,ps); break; case 0: score += 10;/直連加10分 g_g.DrawLine(pen, new Point(p1.X * 31 + 15, p1.Y * 34 + 17), new Point(p2.X * 31 + 15, p2.Y * 34 + 17); Thread.Sleep(100); EraseBlock(g_g, p1,
35、p2); g_g.DrawLine(bkpen, new Point(p1.X * 31 + 15, p1.Y * 34 + 17), new Point(p2.X * 31 + 15, p2.Y * 34 + 17); break; default: break; label5.Text = score.ToString(); /開(kāi)始游戲按鈕,初始化游戲區(qū)域、計(jì)時(shí)器開(kāi)始計(jì)時(shí)、分?jǐn)?shù)歸零并重新開(kāi)始累積分?jǐn)?shù) private void button1_Click_1(object sender, EventArgs e) int m = 0; gamestop = false; label5.Tex
36、t = m.ToString(); if (!starttimer) progressBar1.Value = PBMAX; pbtimer.Interval = 500; /時(shí)間初始值為500 pbtimer.Start(); /計(jì)時(shí)器開(kāi)始計(jì)時(shí) starttimer = true; /處理分?jǐn)?shù) score = 0; /初始游戲時(shí)分?jǐn)?shù)歸零 picnum = 20; /每次開(kāi)局固定的圖案數(shù) multipic = 4; /每種圖案重復(fù)的次數(shù) IniteBmp(picnum); pbvalue = 500; /初始化時(shí)間值 bStart = true; this.Invalidate(); /重列按
37、鈕private void button2_Click(object sender, EventArgs e) FreshMap(ref gmap); /調(diào)用重新排列函數(shù),僅對(duì)游戲中剩余的小方塊進(jìn)行重列 this.Invalidate(); / 時(shí)間判斷,即對(duì)游戲是否失敗進(jìn)行判斷,時(shí)間耗完則游戲結(jié)束private void pbtimer_Tick(object sender, EventArgs e) pbvalue = pbvalue - reducestep; if (pbvalue 100) pbvalue = 100; if (pbvalue = 0 & starttimer) pb
38、timer.Stop(); /計(jì)時(shí)器停止 starttimer = false; MessageBox.Show(游戲失敗!); gamestop = true; return; else progressBar1.Value = pbvalue; /給時(shí)間進(jìn)度條賦值 /暫停按鈕,主要是時(shí)間暫停,并且鼠標(biāo)不能在游戲區(qū)域操作private void button3_Click(object sender, EventArgs e) this.button3.Visible = false; gamestop = true; pbtimer.Stop(); this.button4.Visible
39、 = true; /判斷兩個(gè)小方塊是否為直連關(guān)系,即判斷兩個(gè)小方塊之間是否能用一條之間連接(沒(méi)有轉(zhuǎn)彎) public bool IsDirectLink(int x1, int y1, int x2, int y2) if (x1 = x2 & y1 = y2) return false; if (x1 = x2) int bigger = y1 y2 ? y1 : y2; int smaller = y1 y2 ? y2 : y1; int miny = smaller+ 1; while (mapx1, miny = BLANK) miny+; if (miny = N) break; i
40、f (miny = bigger) return true; else return false; if (y1 = y2) int bigger = x1 x2 ? x1 : x2; int smaller = x1 x2 ? x2 : x1; int minx = smaller + 1; while (mapminx, y1 = BLANK) minx+; if (minx = M) break; if (minx = bigger) return true; else return false; return false; /處理直連以外的情況,即一個(gè)轉(zhuǎn)彎和兩個(gè)轉(zhuǎn)彎的情況 public
41、 bool IndirectLink(int x1, int y1, int x2, int y2) int pos = 0; Point ar1 = new Point209; int ar1Len = 0; Point ar2 = new Point209; int ar2Len = 0; pos = y1 - 1; while (0 = pos & pos N & mapx1,pos = BLANK) ar1Len = FindEmpty(x1, pos, ref ar1); ar2Len = FindEmpty(x2, y2, ref ar2); if (IsShare(ref ar1
42、, ar1Len, ref ar2, ar2Len) co = 2; corner1 = new Point(x1, pos); return true; pos-; pos = y1 + 1; while (0 = pos & pos N & mapx1,pos = BLANK) ar1Len = FindEmpty(x1, pos, ref ar1); ar2Len = FindEmpty(x2, y2, ref ar2); if (IsShare(ref ar1, ar1Len, ref ar2, ar2Len) co = 2; corner1 = new Point(x1, pos);
43、 return true; pos+; /如果兩點(diǎn)是左右且非直連關(guān)系 pos = x1 - 1; while (0 = pos & pos M & mappos,y1 = BLANK) ar1Len = FindEmpty(pos, y1, ref ar1); ar2Len = FindEmpty(x2, y2, ref ar2); if (IsShare(ref ar1, ar1Len, ref ar2, ar2Len) co = 2; corner1 = new Point(pos, y1); return true; pos-; pos = x1 + 1; while (0 = pos & pos M & mappos,y1 = BLANK) ar1Len = FindEmpty(pos, y1, ref ar1); ar2Len = FindEmpty(x2, y2, ref ar2); if (IsShare(ref ar1, ar1Len, ref ar2, ar2Len) co = 2; corner1 = new Point(pos, y1); return true; pos+; /
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)藕粉市場(chǎng)全面調(diào)研及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 2024年中國(guó)片狀模塑料行業(yè)市場(chǎng)調(diào)查報(bào)告
- 2025年茶油行業(yè)報(bào)告
- 中國(guó)動(dòng)植物提取物行業(yè)市場(chǎng)前景預(yù)測(cè)及投資價(jià)值評(píng)估分析報(bào)告
- 以問(wèn)題為鑰開(kāi)啟地理之智:PBL模式在高中地理教學(xué)中的創(chuàng)新與實(shí)踐
- 以錯(cuò)為鑒探尋初中數(shù)學(xué)習(xí)題教學(xué)的優(yōu)化之道
- 2020-2025年中國(guó)烤鴨行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報(bào)告
- 以讀啟智:初中生語(yǔ)文課外閱讀指導(dǎo)的實(shí)踐與探索
- 以誘思探究理論賦能高中歷史教學(xué):理念實(shí)踐與突破
- 以設(shè)計(jì)為驅(qū)動(dòng):STEM教學(xué)對(duì)小學(xué)生科學(xué)探究能力的提升研究
- 2025江蘇省惠隆資產(chǎn)管理限公司招聘30人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 《農(nóng)村基層干部廉潔履行職責(zé)規(guī)定》解讀與培訓(xùn)
- 氣胸完整版本
- 招標(biāo)代理服務(wù)服務(wù)方案
- (新版)孤殘兒童試題庫(kù)(含答案)
- 微小灶外賣訂餐系統(tǒng)
- 通風(fēng)與空調(diào)工程施工工藝流程圖
- 協(xié)議回款承諾書(shū)
- 商業(yè)發(fā)票模板(INVOICE)
- 中英文對(duì)照財(cái)務(wù)報(bào)表-模板
- 各種常見(jiàn)留置管道的固定方法及注意事項(xiàng)
評(píng)論
0/150
提交評(píng)論