2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  畢業(yè)設(shè)計(jì)(論文)任務(wù)書</p><p>  注:本任務(wù)書要求一式兩份,一份系部留存,一份報(bào)教務(wù)處實(shí)踐教學(xué)科。</p><p><b>  摘要</b></p><p>  游戲發(fā)展至今已經(jīng)有30多年歷史,在這個(gè)短暫的時(shí)期里,隨著硬件水平的提高,游戲開發(fā)新技術(shù)層出不窮,經(jīng)典游戲比比皆是。大部分的人一聽到連連看游戲,通常就會(huì)想

2、到這是一個(gè)小游戲。</p><p>  連連看游戲,是指在一個(gè)區(qū)域內(nèi),分布著許多不同的圖片,通過(guò)點(diǎn)擊兩張相同的圖片并符合一定的規(guī)則消除它們的一個(gè)游戲。我們最常見的是在QQ游戲大廳里的QQ連連看,網(wǎng)絡(luò)上也有許多各式各樣的單機(jī)版連連看游戲。在游戲的過(guò)程中,可以考慮下如何使用自己掌握的程序去實(shí)現(xiàn)游戲的效果,并嘗試去開發(fā)屬于自己的連連看,這是一件十分愜意的事情。在本章中,我們將詳細(xì)的教大家如何使用Java去開發(fā)一款屬于自

3、己的單機(jī)連連看。</p><p>  本游戲采用JAVA語(yǔ)言開發(fā),以MyEclipse為開發(fā)平臺(tái)。游戲主界面是基于GUI(圖形用戶界面)的開發(fā),使得游戲界面簡(jiǎn)單清晰。并調(diào)用了其中的一些函數(shù),完成了事件的觸發(fā)功能。希望通過(guò)這次開發(fā)設(shè)計(jì)出的連連看小游戲,給大家的生活帶來(lái)一點(diǎn)樂(lè)趣。</p><p>  游戲通過(guò)定義動(dòng)態(tài)的二維數(shù)組,根據(jù)一定的算法實(shí)現(xiàn)規(guī)定的路徑判斷。</p><

4、p>  關(guān)鍵詞:連連看、小游戲、JAVA、GUI、數(shù)組</p><p><b>  Abstract</b></p><p>  Game development has 30 years of history, in this short period, along with the hardware level, game development new t

5、echnology emerge in an endless stream, classic games meet the eye everywhere. Most of the people hear Lianliankan game, they usually think this is a small game.</p><p>  Lianliankan game, refers to a region,

6、 the distribution of many different pictures, click through to two cards of the same picture and conform to certain rules to eliminate them in a game. It is most common in QQ game hall QQ Lianliankan, the network also ha

7、s a lot of every kind of stand-alone edition game. In the course of the game, can consider how to use their mastery of the program to achieve game effects, and try to develop their own look again and again, this is a ver

8、y happy thing. In this </p><p>  The game using JAVA language development, take MyEclipse as the development platform. The game 's interface is based on the GUI (graphical user interface ) development, w

9、hich makes the game interface simple and clear. And call some of these functions, completed the event trigger function. Hope that through this design Lianliankan game, for everyone to bring to life a little fun.</p>

10、;<p>  The game through the definition of the dynamic two-dimensional array, according to certain provisions of the path algorithm to determine.</p><p>  Key words: Lianliankan, game, JAVA, GUI, array

11、</p><p><b>  目錄</b></p><p><b>  摘要IV</b></p><p>  第一章 緒論- 1 -</p><p>  一 游戲產(chǎn)業(yè)介紹- 1 -</p><p>  二 游戲的發(fā)展概況- 1 -</p><p&g

12、t;  第二章 連連看游戲描述- 2 -</p><p>  一 游戲規(guī)則描述- 2 -</p><p>  二 游戲設(shè)計(jì)的目的- 2 -</p><p>  三 游戲可行性論證- 2 -</p><p>  第三章 連連看游戲的分析與設(shè)計(jì)- 3 -</p><p>  一 游戲的設(shè)計(jì)- 3 -</p

13、><p>  1 功能設(shè)計(jì)- 3 -</p><p>  2 游戲模塊設(shè)計(jì)- 3 -</p><p>  3 算法模塊- 4 -</p><p>  4 界面顯示模塊- 4 -</p><p>  5 菜單控制模塊- 4 -</p><p>  6 地圖設(shè)計(jì)- 5 -</p>

14、<p>  7 算法設(shè)計(jì)- 5 -</p><p>  8 類的設(shè)計(jì)- 7 -</p><p>  1)Control.java 監(jiān)聽器類。- 7 -</p><p><b>  - 7 -</b></p><p>  2)LoadAndSave.java 游戲數(shù)據(jù)部分。- 7 -</p

15、><p>  3)Model.java 驅(qū)動(dòng)類。- 7 -</p><p>  4)GamePanel.java 繪制類。- 7 -</p><p>  5)ImageLoader.java 圖片加載器。- 9 -</p><p>  6)MainFrame.java 主窗體繪制。- 9 -</p><p&

16、gt;  9 算法設(shè)計(jì)- 9 -</p><p>  二 主要問(wèn)題- 11 -</p><p>  三 技術(shù)要求- 11 -</p><p>  四 設(shè)計(jì)要求- 11 -</p><p>  1 開發(fā)環(huán)境- 11 -</p><p>  2 理論基礎(chǔ)- 11 -</p><p>  

17、3 開發(fā)目標(biāo)- 11 -</p><p>  第四章 游戲運(yùn)行及測(cè)試分析- 12 -</p><p>  一 程序運(yùn)行情況- 12 -</p><p>  二 測(cè)試計(jì)劃及分析- 15 -</p><p>  1 檢驗(yàn)的先后順序- 15 -</p><p>  2 程序異常處理- 15 -</p>

18、<p><b>  結(jié)論- 16 -</b></p><p><b>  致謝- 17 -</b></p><p>  參考文獻(xiàn)- 17 -</p><p><b>  第一章 緒論</b></p><p><b>  一 游戲產(chǎn)業(yè)介紹</b

19、></p><p>  游戲產(chǎn)業(yè)作為現(xiàn)代電腦電子技術(shù)的產(chǎn)物,正在以其獨(dú)特的魅力在全世界的娛樂(lè)領(lǐng)域占據(jù)主流位置,我們?cè)诔姓J(rèn)廣大娛樂(lè)網(wǎng)民的選擇空間狹小的同時(shí),也必須明確的一點(diǎn)就是游戲本身所具有的強(qiáng)大的吸引力。游戲的吸引力主要在于,它在讓玩家打發(fā)時(shí)間的同時(shí),可以讓人在緊張工作之余帶來(lái)最大程度的放松,也可以增進(jìn)人們之間的交流、溝通,通過(guò)游戲還可以認(rèn)識(shí)更多的朋友,也可以到達(dá)跨省、跨市、甚至跨國(guó)間人們互相娛樂(lè)的目的,從

20、而滿足了人們休閑的需要。而且游戲產(chǎn)業(yè)促動(dòng)高科技技術(shù)不斷升級(jí),作為經(jīng)濟(jì)增長(zhǎng)的一大支撐點(diǎn),已經(jīng)成為經(jīng)濟(jì)騰飛的“第四產(chǎn)業(yè)”。</p><p>  現(xiàn)在小游戲、網(wǎng)頁(yè)游戲越來(lái)越受網(wǎng)民歡迎,除了玩的方法簡(jiǎn)單外(不像其他游戲還需要注冊(cè)下載繁瑣過(guò)程),很多游戲不乏經(jīng)典。由于手機(jī)互聯(lián)網(wǎng)的不斷發(fā)展,傳統(tǒng)網(wǎng)游已經(jīng)不能跟上時(shí)代的潮流,而網(wǎng)頁(yè)游戲無(wú)需客戶端的特性,決定了將來(lái)會(huì)是Web游戲主宰網(wǎng)游市場(chǎng)。作為最基本的網(wǎng)頁(yè)游戲之一,“連連看”游

21、戲的設(shè)計(jì)與實(shí)現(xiàn)可以積累開發(fā)網(wǎng)頁(yè)游戲的經(jīng)驗(yàn),完善開發(fā)思路,為以后更高層次上的網(wǎng)頁(yè)游戲開發(fā),打下堅(jiān)實(shí)的基礎(chǔ),更好的推動(dòng)網(wǎng)頁(yè)游戲的發(fā)展。</p><p><b>  二 游戲的發(fā)展概況</b></p><p>  游戲“連連看”顧名思義就是找出相關(guān)聯(lián)的東西,這個(gè)連連看在網(wǎng)上基本是用在小游戲中,就是找出相同的兩樣?xùn)|西,在一定的規(guī)則之內(nèi)可以做為相關(guān)聯(lián)處理?!斑B連看”的發(fā)展經(jīng)歷了

22、從桌面游戲、在線游戲、社交游戲三個(gè)過(guò)程。</p><p>  游戲“連連看”是源自臺(tái)灣的桌面小游戲,自從流入大陸以來(lái)風(fēng)靡一時(shí),也吸引眾多程序員開發(fā)出多種版本的“連連看”。這其中,顧方編寫的“阿達(dá)連連看”以其精良的制作廣受好評(píng),這也成為顧方“阿達(dá)系列軟件”的核心產(chǎn)品。并于2004年,取得了國(guó)家版權(quán)局的計(jì)算機(jī)軟件著作權(quán)登記證書。</p><p>  隨著Flash應(yīng)用的流行,網(wǎng)上出現(xiàn)了多種在線

23、Flash版本“連連看”。如“水晶連連看”、“果蔬連連看”等,流行的“水晶連連看”以華麗界面吸引了一大批的女性玩家?! ?008年,隨著社交網(wǎng)絡(luò)的普及和開放平臺(tái)的興起,“連連看”被引入了社交網(wǎng)絡(luò)?!斑B連看”與個(gè)人空間相結(jié)合,被快速的傳播,成為一款熱門的社交游戲,其中以開發(fā)者其中以開發(fā)者Jonevey在Manyou開放平臺(tái)上推出的“寵物連連看”最為流行。</p><p>  第二章 連連看游戲描述</p>

24、;<p>  近年來(lái),Java作為一種新的編程語(yǔ)言。以其簡(jiǎn)單性、可移植性和平臺(tái)無(wú)關(guān)性等優(yōu)點(diǎn),得到廣泛的應(yīng)用,特別是Java與萬(wàn)維網(wǎng)的完美結(jié)合,使其成為網(wǎng)絡(luò)編程和嵌入式編程領(lǐng)域的首選編程語(yǔ)言。</p><p><b>  一 游戲規(guī)則描述</b></p><p>  1、概要:玩家可以將2個(gè)相同圖案的牌連接起來(lái),連接不多于3根直線,就可以成功的將兩個(gè)圖片消

25、除。</p><p>  2、操作:第一次使用鼠標(biāo)點(diǎn)擊游戲界面中的牌,該牌此時(shí)為“被選中”以特殊方式顯示;再次以鼠標(biāo)點(diǎn)擊其他牌,若該牌與被選中的牌圖案相同,且把第一個(gè)牌到第二個(gè)牌連起來(lái),中間的直線不超過(guò)3根,則消掉這一對(duì)牌,否則第一個(gè)牌變?yōu)槲幢贿x中狀態(tài),而第二張牌變成選中狀態(tài)。</p><p>  3、勝利條件:將游戲界面上的牌全部消除掉。</p><p>  4、

26、失敗條件: 到規(guī)定的時(shí)間,界面上仍然有未消除的牌。</p><p><b>  二 游戲設(shè)計(jì)的目的</b></p><p>  通過(guò)本次畢業(yè)設(shè)計(jì),讓我們掌握如何制作一個(gè)游戲軟件,以及制作游戲軟件的整個(gè)流程,制作游戲軟件的步驟,讓學(xué)生熟悉項(xiàng)目開發(fā)的完整過(guò)程,為即將到來(lái)的就業(yè)工作打下基礎(chǔ)。另外也通過(guò)本次設(shè)計(jì)將三年來(lái)所學(xué)的專業(yè)知識(shí)和其他方面的知識(shí)融入到實(shí)際應(yīng)用中,在實(shí)際運(yùn)用

27、中學(xué)習(xí)和掌握J(rèn)ava程序開發(fā)的全過(guò)程,進(jìn)一步熟悉掌握J(rèn)ava程序設(shè)計(jì)語(yǔ)言的基礎(chǔ)內(nèi)容、基本技能和方法,同時(shí)培養(yǎng)學(xué)生進(jìn)行分析問(wèn)題、解決問(wèn)題的能力;培養(yǎng)學(xué)生進(jìn)行設(shè)計(jì)分析、設(shè)計(jì)方法、設(shè)計(jì)操作與測(cè)試、設(shè)計(jì)過(guò)程的觀察、理解和歸納能力的提高。</p><p>  1、主要是能通過(guò)開發(fā)“連連看”這個(gè)小游戲,學(xué)會(huì)Java程序開發(fā)的環(huán)境搭建與配置,并提高自己Java程序設(shè)計(jì)編程的實(shí)際能力。通過(guò)這次。</p><p

28、>  2、進(jìn)一步熟悉掌握J(rèn)ava程序設(shè)計(jì)的基礎(chǔ)內(nèi)容,如用戶圖形界面設(shè)計(jì)(GUI)、Java多線程編程等。</p><p>  3、大體了解怎樣用Java來(lái)編寫小游戲,增強(qiáng)我們實(shí)踐能力和創(chuàng)新精神的綜合培養(yǎng)。</p><p><b>  三 游戲可行性論證</b></p><p>  “連連看”游戲是一個(gè)經(jīng)典的游戲,它因操作簡(jiǎn)單、娛樂(lè)性強(qiáng)而廣

29、受歡迎。我們通過(guò)所學(xué)的JAVA,利用MyEclipse設(shè)計(jì)一個(gè)操作簡(jiǎn)單、界面美觀、功能齊全的“連連看游戲”。通過(guò)本游戲的開發(fā),達(dá)到學(xué)習(xí)Java技術(shù)和熟悉軟件開發(fā)流程的目的。</p><p>  這個(gè)游戲是用圖形界面實(shí)現(xiàn)的,通過(guò)編譯解釋后,出現(xiàn)一個(gè)圖形界面。界面上方有一行菜單欄,點(diǎn)擊菜單欄上的按鈕,出現(xiàn)下拉菜單,選擇開始,進(jìn)入游戲界面,游戲界面是由若干個(gè)小方格組成的,每個(gè)小方格有一個(gè)圖標(biāo),點(diǎn)擊其中相同的圖標(biāo),若它們

30、符合算法要求就會(huì)消失,且游戲期間有一定的時(shí)間限制。游戲還設(shè)有炸彈、退出、幫助的功能,方便游戲操作。</p><p>  第三章 連連看游戲的分析與設(shè)計(jì)</p><p><b>  一 游戲的設(shè)計(jì)</b></p><p><b>  1 功能設(shè)計(jì)</b></p><p>  (1)、用戶可以通過(guò)點(diǎn)擊菜

31、單中的“開始游戲”選項(xiàng),開始新游戲程序。程序會(huì)載入圖片,并通過(guò)特定的算法排列圖片,并標(biāo)記圖片,以便判斷圖片是否相同。記錄圖片坐標(biāo),以方便計(jì)算圖片是否可以相連。確定圖片大小,以確定用戶點(diǎn)擊的是那張圖片。</p><p>  (2)、用戶選擇兩張一樣的圖片,通過(guò)鼠標(biāo)進(jìn)行選取,如果用戶兩次點(diǎn)擊的圖片不相同,那么系統(tǒng)認(rèn)為用戶沒(méi)有點(diǎn)(鼠標(biāo)記數(shù)歸 0),以完成用戶以后的選取工作。如果用戶選擇的是相同的圖片,那么系統(tǒng)會(huì)消除這兩

32、張圖片,并使鼠標(biāo)記數(shù)為 0,并消除這兩張圖片的標(biāo)記,使里面的圖片被標(biāo)記在外面。以便用戶可以進(jìn)行以后的選擇。</p><p>  (3)、用戶也可使通過(guò)使用“刷新”功能進(jìn)行圖片重新排版。</p><p>  (4)、用戶點(diǎn)擊提示系統(tǒng)將通過(guò)連線,提示用戶下一步可消除的圖片</p><p>  (5)、用戶點(diǎn)擊演示,系統(tǒng)自動(dòng)完成游戲</p><p>

33、;<b>  2 游戲模塊設(shè)計(jì)</b></p><p>  根據(jù)對(duì)“連連看”游戲的分析,該游戲可分為三個(gè)模塊:算法模塊、界面顯示模塊、菜單控制模塊。如下圖3-1所示:</p><p>  圖 3-1游戲流程模塊圖</p><p><b>  3 算法模塊</b></p><p>  (1).圖片路徑

34、處理設(shè)計(jì)</p><p>  (2).圖片的產(chǎn)生設(shè)計(jì)</p><p><b>  4 界面顯示模塊</b></p><p>  (1).游戲界面設(shè)計(jì)</p><p>  (2).游戲過(guò)關(guān)、失敗的設(shè)計(jì)</p><p><b>  5 菜單控制模塊</b></p>

35、<p><b>  (1). 開始游戲</b></p><p><b>  (2). 重新開始</b></p><p><b>  (3). 刷新</b></p><p><b>  (4). 提示</b></p><p><b>  

36、(5).演示</b></p><p>  (6).游戲難度選擇</p><p><b>  如下圖3-5所示</b></p><p><b>  6 地圖設(shè)計(jì)</b></p><p>  地圖的設(shè)計(jì)是采用GUI編程的網(wǎng)格布局,定義一個(gè)八行八列的網(wǎng)格布局,使用16個(gè)數(shù)字然后隨機(jī)產(chǎn)生四個(gè)數(shù)字

37、,用二維數(shù)組把它們打亂放到八行八列的網(wǎng)格布局中,注意的是二維數(shù)組的下標(biāo)要和網(wǎng)格布局是的行、列數(shù)相同。</p><p><b>  7 算法設(shè)計(jì)</b></p><p>  在檢驗(yàn)兩個(gè)方塊能否消掉的時(shí)候,我們要讓兩個(gè)方塊同時(shí)滿足兩個(gè)條件才行,就是兩者配對(duì)并且連線成功。如圖4-3所示</p><p>  分 3 種情況:從下面的這三種情況,我們可

38、以知道,需要三個(gè)檢測(cè),這三個(gè)檢測(cè)分別檢測(cè)一條直路經(jīng)。這樣就會(huì)有三條路經(jīng)。若這三條路經(jīng)上都是空按鈕,那么就剛好是三種直線(兩個(gè)轉(zhuǎn)彎點(diǎn))把兩個(gè)按鈕連接起來(lái)了。 </p><p><b>  (1)、相鄰 </b></p><p>  (2)、若不相鄰的先在第一個(gè)按鈕的同行找一個(gè)空按鈕。1.找到后看第二個(gè)按鈕橫向到這個(gè)空按鈕所在的列是否有按鈕。2.沒(méi)有的話再看第一個(gè)按鈕到與

39、它同行的那個(gè)空按鈕之間是否有按鈕。3.沒(méi)有的話,再?gòu)呐c第一個(gè)按鈕同行的那個(gè)空按鈕豎向到與第二個(gè)按鈕的同行看是否有按鈕。沒(méi)有的話路經(jīng)就通了可以消了. </p><p>  (3)、若(2)失敗后,再在第一個(gè)按鈕的同列找一個(gè)空按鈕。1.找到后看第二個(gè)按鈕豎向到這個(gè)空按鈕所在的行是否有按鈕 2.沒(méi)有的話,再看第一個(gè)按鈕到與它同列的那個(gè)空按鈕之間是否有按鈕。3.沒(méi)有的話,再?gòu)呐c第一個(gè)按鈕同列的那個(gè)空按鈕橫向到與第二個(gè)按鈕

40、同列看是否有按鈕。沒(méi)有的話路經(jīng)就通了,可以消了。</p><p>  若以上三步都失敗,說(shuō)明這兩個(gè)按鈕不可以消去。</p><p><b>  具體判斷流程見下圖</b></p><p>  (4)、圖片成對(duì)加載并打亂</p><p>  將圖片成對(duì)的顯示在場(chǎng)景中,并打亂主要用的是Map類。在該類中,用了一個(gè)數(shù)組以數(shù)字

41、標(biāo)記的形式來(lái)記錄加載的圖片是哪種圖片,在每次加載圖片的時(shí)候是一張圖片連續(xù)加載兩次,以保證加載圖片成對(duì)。然后用數(shù)組的隨機(jī)方法將數(shù)組打亂。 </p><p>  (5)、判斷兩圖是否能夠相連</p><p>  兩圖能相連的所有情況:</p><p><b>  8 類的設(shè)計(jì)</b></p><p>  在設(shè)計(jì)連連看

42、小游戲是,要編寫6個(gè)Java源文件 :Control.java , LoadAndSave.java , Model.java , GamePanel.java , ImageLoader.java , MainFrame.java</p><p>  Control.java 監(jiān)聽器類。</p><p>  主要用于接收用戶操作時(shí)發(fā)出的指令以及中轉(zhuǎn)發(fā)送。</p><

43、p>  LoadAndSave.java 游戲數(shù)據(jù)部分。</p><p>  主要用于存儲(chǔ)用戶得分情況,以及載入時(shí)加載圖片的算法</p><p>  Model.java 驅(qū)動(dòng)類。</p><p>  用于處理接收到的用戶動(dòng)作指令,以及初始化時(shí)用到的一切算法。如:設(shè)置游戲難度,圖片可消除判斷等。</p><p>  GamePanel

44、.java 繪制類。</p><p>  用于游戲是繪制選中時(shí)的邊框,和連接兩個(gè)相同圖片的連線。</p><p>  public void showPath(final Object obj) {</p><p>  new Thread(new Runnable() {</p><p>  ArrayList<Point> p

45、oints = (ArrayList<Point>) obj;</p><p>  ArrayList<Shape> shapes = new ArrayList<Shape>();</p><p>  int step = 30;</p><p>  public void run() {</p><p>

46、;<b>  // 添加起點(diǎn)矩形</b></p><p>  shapes.add(matrixToRect(points.get(0)));</p><p><b>  // 添加終點(diǎn)矩形</b></p><p>  shapes.add(matrixToRect(points.get(points.size() - 1

47、)));</p><p><b>  // 添加直線</b></p><p>  for (int i = 1; i < points.size(); i++) {</p><p>  Point p1 = getCenter(matrixToRect(points.get(i - 1)));</p><p>  

48、Point p2 = getCenter(matrixToRect(points.get(i)));</p><p>  if (p1.x == p2.x) {</p><p>  int distance = p2.y - p1.y;</p><p>  for (int j = 0; j <= Math.abs(distance); j += step)&

49、lt;/p><p>  shapes.add(new Line2D.Double(p1, new Point(p1.x,</p><p>  p1.y + distance / Math.abs(distance) * j)));</p><p>  } else if (p1.y == p2.y) {</p><p>  int distanc

50、e = p2.x - p1.x;</p><p>  for (int j = 0; j <= Math.abs(distance); j += step)</p><p><b>  shapes</b></p><p>  .add(new Line2D.Double(p1, new Point(</p><p&g

51、t;  p1.x + distance</p><p>  / Math.abs(distance) * j,</p><p><b>  p1.y)));</b></p><p><b>  }</b></p><p>  shapes.add(new Line2D.Double(p1, p2))

52、;</p><p><b>  }</b></p><p>  Graphics2D g2 = (Graphics2D) getGraphics();</p><p>  float dash[] = { 4F };</p><p>  g2.setStroke(new BasicStroke(2.0F, BasicSt

53、roke.CAP_BUTT,</p><p>  BasicStroke.JOIN_MITER, 11.0F, dash, 1.0F));</p><p>  for (int index = 0; index < shapes.size(); index++) {</p><p><b>  try {</b></p>&

54、lt;p>  Thread.sleep(10);</p><p>  } catch (InterruptedException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  for (int pre = 0; pre <=

55、 index; pre++) {</p><p>  if (pre < 2)</p><p>  g2.setColor(Color.BLUE);</p><p><b>  else</b></p><p>  g2.setColor(Color.RED);</p><p>  g2.d

56、raw(shapes.get(pre));</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  }).start();</p><p><b>  }<

57、;/b></p><p><b>  }</b></p><p><b>  效果如圖:</b></p><p>  ImageLoader.java 圖片加載器。</p><p>  用于加載庫(kù)中的圖片。</p><p>  MainFrame.java 主窗體繪制

58、。</p><p>  所有游戲中可見窗體的繪制。</p><p><b>  項(xiàng)目層次結(jié)構(gòu)圖:</b></p><p><b>  9 算法設(shè)計(jì)</b></p><p><b>  圖片消除算法</b></p><p>  for (int i = 0

59、; i < map.length; i++)</p><p>  for (int j = 0; j < map[0].length; j++) {</p><p>  Rectangle rect = matrixToRect(i, j);</p><p>  if (map[i][j] == 0)</p><p><b&

60、gt;  continue;</b></p><p>  g.drawImage(ImageLoader.getImageOf(map[i][j]), </p><p>  rect.x, rect.y, null);}</p><p><b>  圖片加載算法</b></p><p>  public

61、 class ImageLoader {</p><p>  private static BufferedImage cursorImage;</p><p>  private static BufferedImage icon;</p><p>  private static final BufferedImage[] </p><p&g

62、t;  images=new BufferedImage[Model.CARD_NUMBERS+1];</p><p>  public static BufferedImage getCursorImage(){</p><p>  if(cursorImage==null)//獲得圖片的編號(hào)</p><p><b>  try {</b>

63、;</p><p>  URLClassLoader </p><p>  urlLoader=(URLClassLoader) ImageLoader.class.getClassLoader();</p><p>  URL url=urlLoader.findResource("images/cursor.gif");</p>

64、<p>  cursorImage=ImageIO.read(url);</p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  return cursorImage;<

65、/p><p><b>  }</b></p><p>  public static BufferedImage getIconImage(){</p><p>  if(icon==null)//加載圖標(biāo)</p><p><b>  try {</b></p><p> 

66、 URLClassLoader </p><p>  urlLoader=(URLClassLoader) ImageLoader.class.getClassLoader();</p><p>  URL url=urlLoader.findResource("images/QQ.png");</p><p>  icon=ImageIO.re

67、ad(url);</p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  return icon;</p><p><b>  }</b>&l

68、t;/p><p>  public static BufferedImage getImageOf(int index){</p><p>  if(images[index]==null)//在已編號(hào)處加載圖片</p><p><b>  try {</b></p><p>  URLClassLoader </

69、p><p>  urlLoader=(URLClassLoader) ImageLoader.class.getClassLoader();</p><p>  URL url=urlLoader.findResource("images/"+index+".gif");</p><p>  images[index]=Image

70、IO.read(url);</p><p>  } catch (IOException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  return images[index];</p><p><b>

71、;  }</b></p><p><b>  }</b></p><p><b>  二 主要問(wèn)題</b></p><p>  開始制作游戲時(shí),主要解決的問(wèn)題有以下幾個(gè)方面:</p><p>  (1)、如何設(shè)置整個(gè)游戲的界面。</p><p>  (2)、如何控

72、制連連看游戲中隨機(jī)圖片的生成切每種圖片必須為偶數(shù)個(gè);游戲開始后,判斷鼠標(biāo)兩次點(diǎn)擊的圖片能否消去,即圖片是否相同且圖片之間路徑的判斷。</p><p>  (3)、如何判斷游戲是否結(jié)束以及輸贏的問(wèn)題。</p><p><b>  三 技術(shù)要求</b></p><p>  本游戲軟件可以在大多數(shù)計(jì)算機(jī)上運(yùn)行,游戲中能正確判斷鼠標(biāo)兩次點(diǎn)擊的圖片是否可

73、以消去、能正確判斷游戲是否已經(jīng)結(jié)束。</p><p><b>  四 設(shè)計(jì)要求</b></p><p><b>  1 開發(fā)環(huán)境</b></p><p>  在windows XP系統(tǒng)下,JAVA 程序設(shè)計(jì)語(yǔ)言及相應(yīng)的集成開發(fā)環(huán)境,利用MyEclipse實(shí)現(xiàn)。</p><p>  開發(fā)平臺(tái)jdk1.

74、6。</p><p><b>  2 理論基礎(chǔ)</b></p><p>  (1)、熟悉JAVA語(yǔ)言基礎(chǔ)</p><p><b>  (2)、GUI編程</b></p><p>  GUI 是 Graphical User Interface 的縮寫,圖形化用戶界面 </p><

75、p>  布局管理 FlowLayout(流式布局管理器) 從左到右的順序排列。 BorderLayout(邊界布局管理器) 東,南,西,北,中 GridLayout(網(wǎng)格布局管理器)事件處理機(jī)制 事件:用戶對(duì)組件的一個(gè)操作。 事件源:發(fā)生事件的組件。 監(jiān)聽器:我們需要處理某個(gè)事件,就需要在發(fā)生事件的組件上添加監(jiān)聽器;事件處理器:監(jiān)聽器中的方法。監(jiān)聽器被添加在組件上之后,組件上發(fā)生了對(duì)應(yīng)事 件就會(huì)執(zhí)行指定方法。動(dòng)作事件,Action

76、Event,在某一組件上發(fā)生了定義好的動(dòng)作,例如按鈕上鼠標(biāo)點(diǎn)擊 或按空格,菜單上鼠標(biāo)點(diǎn)擊或按回車等。</p><p>  MyEclipse的操作。</p><p><b>  3 開發(fā)目標(biāo)</b></p><p>  系統(tǒng)能夠提供友好的用戶界面,使操作人員的心情放松;</p><p>  系統(tǒng)具有良好的運(yùn)行效率,能夠得

77、到快速發(fā)現(xiàn)自我的目的;</p><p>  系統(tǒng)應(yīng)有良好的可擴(kuò)充性,可以容易的轉(zhuǎn)入其它系統(tǒng)應(yīng)用;</p><p>  平臺(tái)的設(shè)計(jì)具有一定的靈活性。</p><p>  第四章 游戲運(yùn)行及測(cè)試分析</p><p><b>  一 程序運(yùn)行情況</b></p><p>  點(diǎn)擊菜單中的開始游戲后的界面

78、,連連看游戲規(guī)則很簡(jiǎn)單,就是點(diǎn)中兩個(gè)互相匹配并且可以通過(guò)不多于兩個(gè)折點(diǎn)的折線連相同的圖片,然后消去。下圖是開始游戲后的界面效果</p><p><b>  選擇游戲難度(圖)</b></p><p>  點(diǎn)擊開始,開始當(dāng)前難度游戲,如果不選擇難度,則難度1到9隨機(jī)</p><p>  點(diǎn)擊刷新則所有圖片隨機(jī)改變位置其總數(shù)不變。</p>

79、;<p>  提示,可以根據(jù)算法隨機(jī)提示一組可以消去的圖片。</p><p>  點(diǎn)擊演示,電腦將自動(dòng)完成消除,每一步都有邊框以及連線顯示,直到所有方塊消除完畢</p><p>  圖片由用戶消除完畢,則如下圖顯示</p><p>  由于用戶每次只能消除一對(duì)圖形,即只會(huì)用到一個(gè)最短路徑,但由于實(shí)現(xiàn)并不知道用戶會(huì)選擇哪一對(duì)圖形,所以需要事先計(jì)算出所有可

80、能的最短路徑并保存起來(lái)。此外,采用這種方法的話似乎每次用戶消去一對(duì)相同圖像之后都需要重新計(jì)算出當(dāng)前所有可能被連接的相同圖形之間最短路徑,這是因?yàn)楫?dāng)某些圖像被消去之后可能會(huì)產(chǎn)生很多新路徑,而我們又不能確定這些空出來(lái)的格子到底能夠影響哪些路徑,所以就只好都重新計(jì)算一遍。</p><p><b>  二 測(cè)試計(jì)劃及分析</b></p><p><b>  1 檢驗(yàn)

81、的先后順序</b></p><p>  在檢驗(yàn)兩個(gè)方塊能否消掉的時(shí)候,我們要讓兩個(gè)方塊同時(shí)滿足兩個(gè)條件才行,就是兩者配對(duì)并且連線成功。所以,這里應(yīng)該先檢驗(yàn)配對(duì),如果該條件不成立的話,就不要再進(jìn)行連線檢查了,這樣可以避免很多不必要的復(fù)雜運(yùn)算。當(dāng)然,如果你在做這個(gè)游戲的時(shí)候,配對(duì)規(guī)則不夠如此簡(jiǎn)單的話,那么就看哪個(gè)算起來(lái)麻煩就把它放在后面。</p><p><b>  2

82、程序異常處理</b></p><p>  本程序沒(méi)有涉及到程序的異常處理,只有關(guān)于“死鎖”問(wèn)題,本質(zhì)上還是判別兩個(gè)格子是否可以消去的問(wèn)題。最直接的方法就是,對(duì)于游戲中尚未消去的格子,兩兩都計(jì)算一下,它們是否可以消去。此外,從上面的廣度優(yōu)先搜索可以看出,我們每次都是擴(kuò)展出起始格子A(x1,y1)能夠到達(dá)的格子。也就是說(shuō),對(duì)于每一個(gè)格子,我們可以調(diào)用一次上面的擴(kuò)展過(guò)程,得到所有可以到達(dá)的格子,如果這些格子

83、中有任意一個(gè)跟起始格子的圖形一致,則它們可以消去,目前游戲我還沒(méi)有發(fā)現(xiàn)“死鎖”狀態(tài)。</p><p><b>  結(jié)論</b></p><p>  “連連看”游戲的基本功能都已經(jīng)實(shí)現(xiàn)了,其中很多變量之間數(shù)據(jù)的傳遞都很復(fù)雜,要搞不明白就沒(méi)辦法再往下做了,路徑判斷問(wèn)題中用到數(shù)據(jù)結(jié)構(gòu)的知識(shí),也很抽象,代碼量也很大,另外這個(gè)游戲不會(huì)用到數(shù)據(jù)庫(kù),所用功能也很少,只需要判斷用戶每

84、次鼠標(biāo)點(diǎn)擊的坐標(biāo)以及當(dāng)前坐標(biāo)位置代表的圖片內(nèi)容就好了</p><p>  通過(guò)這次“連連看”游戲的設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正的提高自己的水平,從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,并且還發(fā)現(xiàn)了自己的許多不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固

85、。同時(shí)在這次的設(shè)計(jì)中也小小的體驗(yàn)了一下做項(xiàng)目的感受,</p><p>  我完成了這次JAVA課程設(shè)計(jì),不過(guò)這只是我學(xué)習(xí)路上的驛站。我相信我在未來(lái)的學(xué)習(xí)中會(huì)記住從本次課程設(shè)計(jì)中所學(xué)到的東西,并將它用到未來(lái)的學(xué)習(xí)中去。</p><p><b>  致謝</b></p><p>  彈指一揮間,大學(xué)三年已經(jīng)接近了尾聲。三年的艱苦跋涉,兩個(gè)月的精心準(zhǔn)

86、備,畢業(yè)設(shè)計(jì)終于到了劃句號(hào)的時(shí)候,心頭照例該如釋重負(fù),但創(chuàng)作過(guò)程中常常出現(xiàn)的輾轉(zhuǎn)反側(cè)和力不從心之感卻揮之不去。畢業(yè)設(shè)計(jì)創(chuàng)作的過(guò)程并不輕松:各種壓力的時(shí)時(shí)襲擾,知識(shí)積累的尚欠火候,致使我一次次埋頭于圖書館中,一次次在深夜奮力敲打鍵盤。第一次花費(fèi)如此長(zhǎng)的時(shí)間和如此多的精力,完成一套設(shè)計(jì)作品,其中的艱辛與困難難以訴說(shuō),但曲終幕落后留下的滋味,是值得我一生慢慢品嘗的。在這里需要的感謝的人很多,是他們讓我這大學(xué)三年從知識(shí)到人格上有了一個(gè)全新的改變

87、。</p><p>  感謝我的指導(dǎo)老師,夠順利完成畢業(yè)設(shè)計(jì),離不開他的悉心指導(dǎo),他對(duì)我的設(shè)計(jì)從確定題目、修改直到完成,給予了我許多的指點(diǎn)和幫助。感謝他在繁忙的工作之余,擠出時(shí)間對(duì)設(shè)計(jì)提出精辟的修改意見。在此,向老師致以最誠(chéng)摯的謝意。</p><p>  最后我也要感謝我的母校三年來(lái)對(duì)我的培養(yǎng)。以及所有教給我知識(shí)的老師們祝你們工作順利、身體健康!祝母校的明天越來(lái)越美好!</p>

88、<p><b>  參考文獻(xiàn)</b></p><p>  [1] 張明新,周耿烈.Java語(yǔ)言程序設(shè)計(jì). 重慶:重慶大學(xué)出版社,2004.</p><p>  [2] 周曉聰,李文軍,李師賢.面向?qū)ο蟪绦蛟O(shè)計(jì)與Java語(yǔ)言. 北京:機(jī)械工業(yè)出版社,2004.</p><p>  [3] Bruce Eckel.Java編程思想.北

89、京:機(jī)械工業(yè)出版社,2007.</p><p>  [4] James Cohoon,Jack Davidson.Java程序設(shè)計(jì). 北京:清華大學(xué)出版社,2005.</p><p>  [5] Steven Holzner.Java技術(shù)內(nèi)幕. 北京:機(jī)械工業(yè)出版社,2002.</p><p>  [6] 張洪斌.Java程序設(shè)計(jì)百事通. 北京:清華大學(xué)出版社,20

90、01.</p><p>  [7] 夏先波.Java JDK實(shí)例寶典. 北京:電子工業(yè)出版社,2007.</p><p>  [8] 吳其慶.Java程序設(shè)計(jì)經(jīng)典教程. 北京:冶金工業(yè)出版社,2005.</p><p>  [9] 耿祥義,張躍平.Java 2 實(shí)用教程. 北京:清華大學(xué)出版社,2007.</p><p>  [10] 蔡勇,

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論