java課程設(shè)計--連連看游戲的開發(fā)_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計報告</b></p><p>  課程名稱:程序設(shè)計實訓(xùn)</p><p>  報告題目:連連看游戲的開發(fā)</p><p><b>  學(xué)生姓名:</b></p><p><b>  所在學(xué)院:</b></p><p>

2、;<b>  專業(yè)班級:</b></p><p><b>  學(xué)生學(xué)號:</b></p><p><b>  指導(dǎo)教師:</b></p><p>  2013年6月20日</p><p><b>  課程設(shè)計任務(wù)書</b></p><p

3、><b>  摘 要</b></p><p>  近年來,Java作為一種新的編程語言,以其可移植性和平臺無關(guān)性等優(yōu)點,得到了廣泛地應(yīng)用,特別是Java與萬維網(wǎng)的完美結(jié)合,使其成為網(wǎng)絡(luò)編程和嵌入式編程領(lǐng)域的首選編程語言。 </p><p>  本設(shè)計報告闡述了連連看游戲的分析與設(shè)計的全過程,并在論文中相應(yīng)的位置插入了圖片、流程圖以及一些具有技巧性的程

4、序代碼,更加清晰的描述了該游戲是如何實現(xiàn)的。連連看游戲有編寫簡單容易上手等特點,非常適合人們在完成工作的時候適當(dāng)?shù)膴蕵芬蟆_@些小游戲大都是以益智和娛樂為目的,不僅給緊張工作的人們以放松,還可以讓人們的大腦得到開發(fā)。</p><p>  連連看游戲采用JAVA語言開發(fā),以MyEclipse為開發(fā)平臺。游戲主界面是基于SWING(圖形用戶界面)的開發(fā),使得游戲界面簡單清晰。并調(diào)用了其中的一些函數(shù),完成了事件的觸發(fā)功

5、能。希望通過這次開發(fā)設(shè)計出的連連看小游戲,給大家的生活帶來一點樂趣。 游戲通過定義動態(tài)的二維數(shù)組,根據(jù)一定的算法實現(xiàn)規(guī)定的路徑判斷。</p><p>  關(guān)鍵詞:連連看游戲;算法設(shè)計;路徑判斷;Java</p><p><b>  目 錄</b></p><p>  課程設(shè)計任務(wù)書II</p><p><b&

6、gt;  摘 要III</b></p><p><b>  一、緒 論1</b></p><p><b>  二、可行性分析2</b></p><p>  2.1 技術(shù)可行性2</p><p>  2.2 經(jīng)濟可行性2</p><p>  2.3 操

7、作可行性3</p><p>  三、課程設(shè)計題目任務(wù)描述和要求4</p><p>  3.1 任務(wù)描述4</p><p>  3.1.1 界面4</p><p><b>  3.1.2程序4</b></p><p>  3.2 設(shè)計要求及目的5</p><p>

8、<b>  四、需求分析6</b></p><p>  4.1 方案選擇6</p><p><b>  4.2功能描述6</b></p><p>  4.3 功能需求6</p><p>  4.4 功能模塊及思路7</p><p>  4.5 系統(tǒng)需求分析總結(jié)9&

9、lt;/p><p><b>  五、設(shè)計方案11</b></p><p>  5.1 總體設(shè)計11</p><p>  5.2 詳細設(shè)計12</p><p><b>  六、實現(xiàn)14</b></p><p>  6.1 游戲界面14</p><p&g

10、t;  6.2 游戲各功能及代碼15</p><p><b>  七、總結(jié)21</b></p><p><b>  八、參考資料22</b></p><p><b>  一、緒論</b></p><p>  計算機產(chǎn)業(yè)的進步與發(fā)展也促進了游戲產(chǎn)業(yè)的進步。當(dāng)前我們生活中的各

11、類游戲?qū)映霾桓F,但是經(jīng)典總會存在,有一些游戲不是時間的推移或是技術(shù)的革新可以洗刷掉它的存在和光環(huán)的。其中連連看游戲就是計算機游戲世界里典型的經(jīng)典游之一。</p><p>  電子游戲產(chǎn)業(yè)作為現(xiàn)代計算機技術(shù)的產(chǎn)物,正在以其獨特的魅力在全世界的娛樂領(lǐng)域占據(jù)主流位置。我們必須明確的一點就是游戲本身所具有的強大的吸引力。游戲其吸引力主要在于,它在讓玩家打發(fā)時間的同時,也可以讓人發(fā)泄對現(xiàn)實生活中的不滿,得到在現(xiàn)實中不能得到

12、的東西。而且游戲產(chǎn)業(yè)促動高科技技術(shù)不斷升級,作為經(jīng)濟增長的一大支撐點,已經(jīng)成為經(jīng)濟騰飛的“第四產(chǎn)業(yè)”。</p><p>  游戲產(chǎn)業(yè)的多樣性發(fā)展趨勢促使一門使程序設(shè)計更加方便、功能更加強大的開發(fā)語言發(fā)展起來。</p><p>  連連看游戲的設(shè)計主要采用的Java編程技術(shù),就語言技術(shù)、風(fēng)格、嚴謹?shù)忍攸c上來說,Java是編程語言中最為優(yōu)秀的一種語言之一,甚至由它而引發(fā)出計算機語言界中的多種新

13、的規(guī)范和特征。特別的,在連連看游戲的設(shè)計中需要將一些小圖片貼入到游戲界面上,如果利用C或C++來設(shè)計這部分是比較復(fù)雜的,但是使用Java語言只需將圖片set到button控件的背景圖片即可,并將圖片直接導(dǎo)入到控件中便可省去很部分的代碼。所以,Java的產(chǎn)生和發(fā)展使得程序設(shè)計的功能更加的強大、設(shè)計的方法更加的便捷。</p><p><b>  二、 可行性分析</b></p>

14、<p>  2.1 技術(shù)可行性</p><p>  此次編寫的連連看游戲是建立在MyEclipse8.5開發(fā)環(huán)境下,Java中swing為連連看游戲的設(shè)計提供了便利,此次設(shè)計主要是運用的Java語言編程與實現(xiàn)的。在此開發(fā)環(huán)境中是完全可行的。</p><p>  連連看游戲是涉及到圖形界面處理的,其中圖片的導(dǎo)入可以通過開發(fā)軟件的圖片導(dǎo)入控件直接導(dǎo)入,但是相應(yīng)的操作需要對界面進行重

15、繪,圖1.1是界面控制處理的流程圖:</p><p>  圖2.1 圖形界面控制</p><p><b>  2.2 經(jīng)濟可行性</b></p><p>  一個游戲的實現(xiàn),需要考慮玩家花費的人力物力,不計算能夠回收多少資金就不是一個好的項目負責(zé)人。一個新想法如果不經(jīng)過項目負責(zé)人的決策是不可能立項的。所以,在進行游戲設(shè)計的過程中,一定要把項目的

16、規(guī)模和市場效果考慮進去,否則游戲再好,如果不適合市場的需要也是徒勞 。</p><p>  通過花費、時間和人力的綜合考慮,連連看游戲的設(shè)計只需要一臺裝有開發(fā)軟件Java的計算機和一個具有相關(guān)知識的開發(fā)者,是有經(jīng)濟可行性的。 </p><p><b>  2.3 操作可行性</b></p><p>  從技術(shù)上來考慮,這是可以實現(xiàn)的。需要你熟悉

17、C#與asp.net 以及SQL SERVER 2008并能夠簡單的應(yīng)用,那樣留言簿就能夠?qū)崿F(xiàn)了。但對于用戶來說他要的僅僅是能夠與大家交流,分享心情的平臺。他并不會在乎你用什么技術(shù)去實現(xiàn)以及你花費多少精力去完成的。因此在操作上必須簡單,這是完全能夠去實現(xiàn)的。因此在操作上是完全可行的。 </p><p>  此次課程設(shè)計的連連看游戲是基于MyEclipse8.5之上的,只要你的電腦安裝了此軟件就可以玩連連看游戲了.

18、</p><p>  三、課程設(shè)計題目任務(wù)描述和要求</p><p><b>  3.1 任務(wù)描述</b></p><p><b>  3.1.1 界面</b></p><p>  用Java swing的JFrame設(shè)計界面,使用JFrame繼承。([1])其主體實現(xiàn)如下:public class

19、 TestLLK01 extends JFrame 設(shè)置游戲界面的大小以及布局</p><p>  this.setSize(1200, 800); //將窗體的大小設(shè)定</p><p>  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); </p>

20、<p>  this.setResizable(false); //窗體不能改變大小</p><p>  this.setTitle("連連看"); //設(shè)置標(biāo)題</p><p>  其界面如下(圖3.1.1):</p><p><b>  圖3.1.1</b>&l

21、t;/p><p><b>  3.1.2程序</b></p><p>  游戲過程,如果玩家在規(guī)定的時間內(nèi)消完則提示玩家勝利,如果在一定時間內(nèi)圖片沒有消完則提示玩家時間到,游戲失敗。</p><p>  經(jīng)過對游戲的初步分析,連連看游戲包含了如下規(guī)則:</p><p>  1、條件:程序的關(guān)鍵在于判斷用戶連續(xù)點擊的兩個圖案能

22、否消除。兩個圖片可以消除的條件有兩個: </p><p><b>  圖片相同 </b></p><p>  圖片間連線的轉(zhuǎn)角數(shù)不得超過2 。 </p><p><b>  2、操作:</b></p><p>  第一次使用鼠標(biāo)點擊游戲界面中的牌,該牌此時為"被選中",以特殊方式

23、顯示;再次以鼠標(biāo)點擊其他牌,若該牌與被選中的牌圖案相同,且把第一個牌到第二個牌連起來,中間的直線不超過 3 根,則消掉這一對牌,否則第一個牌恢復(fù)成未被選中狀態(tài),而第二個牌變成被選中狀態(tài)。在規(guī)定的時間內(nèi)將游戲界面上的牌全部消除掉。則游戲勝利 ,在規(guī)定時間,界面上的牌仍未全部消掉。則游戲失敗</p><p>  3.2 設(shè)計要求及目的</p><p>  通過本次課程設(shè)計,并在實際運用中學(xué)習(xí)和

24、熟悉Java程序開發(fā)的基礎(chǔ)過程,進一步熟悉掌握Java程序設(shè)計語言的基礎(chǔ)內(nèi)容、基本技能和方法,同時培養(yǎng)學(xué)生進行分析問題、解決問題的能力;培養(yǎng)學(xué)生進行設(shè)計分析、設(shè)計方法、設(shè)計操作與測試、設(shè)計過程的觀察、理解和歸納能力的提高。 </p><p>  主要是能通過開發(fā)“連連看”這個小游戲,提高自己Java程序設(shè)計編程的實際能力。</p><p>  進一步熟悉掌握Java程序設(shè)計的基礎(chǔ)內(nèi)容, J

25、ava多線程編程等。</p><p>  大體了解怎樣用Java來編寫小游戲,增強我們實踐能力和創(chuàng)新精神的綜合培養(yǎng)。 </p><p>  設(shè)計過程中,對整個游戲所實現(xiàn)的功能進行詳細的設(shè)計以及對存在的問題及解決辦法進行最終確定;而后完成游戲的程序編寫,并優(yōu)化;最后,寫出設(shè)計本游戲的詳細文檔說明,并作課程設(shè)計匯報。</p><p><b>  四、需求分析&

26、lt;/b></p><p><b>  4.1 方案選擇</b></p><p>  在概要設(shè)計階段,主要有兩中方案可供選擇: </p><p>  一、所有的圖片都是按約定好的種類數(shù)和在同一區(qū)域的重復(fù)次數(shù)隨機出現(xiàn),并且每張圖片的的出現(xiàn)次數(shù)為偶數(shù) ,時間會有限制,每一關(guān)的圖片數(shù)量或種方案的設(shè)計思想,時間是不同的,這樣就增加了游戲的難度。

27、</p><p>  二、在同一區(qū)域中,圖片出現(xiàn)的種類數(shù)和重復(fù)次數(shù)是可以由玩家選擇的,時間由游戲約定。不過玩家選擇的種類數(shù)和重復(fù)次數(shù)必須是偶數(shù)才可以順利完成游戲,否則游戲雖然可以正常運行,但無法完成游戲。</p><p>  在第一種方案中,由于出現(xiàn)的圖像按種類數(shù)和重復(fù)次數(shù)都由軟件約定,這樣就缺乏玩家自主選擇的空間,只是在玩系統(tǒng)已經(jīng)是設(shè)定好的游戲,不能改變什么,這樣就在無意中降低了玩家在游

28、戲的過程中樂趣,最后致使玩家放棄繼續(xù)玩下去。我們參考了網(wǎng)絡(luò)上的連連看游戲,考慮到游戲的娛樂性。所以我們放棄第一種方案的設(shè)計思想,參考網(wǎng)絡(luò)上流行的連連看的游戲,設(shè)計出第二種方案。</p><p><b>  4.2功能描述</b></p><p>  本設(shè)計采用單機模式,當(dāng)在規(guī)定的時間內(nèi)消完全部的圖片則當(dāng)前關(guān)卡通過,如果在規(guī)定的時間內(nèi)沒能消完所有的圖片則游戲結(jié)束,重新開

29、始新游戲。游戲規(guī)則是模仿普通的連連看游戲,主要是鼠標(biāo)兩次點擊的圖片能否消去的問題。當(dāng)前,前提是點擊兩張相同的圖片,若點擊的是同一張圖片或者兩張不同的圖片,則不予處理。在兩張想同圖片用三根以內(nèi)的直線能連在一起,就可以消去;否則,不予處理。</p><p>  游戲過程,如果玩家在一定的時間內(nèi)消完則提示玩家勝利;如果在一定時間內(nèi)圖片沒有消完則提示玩家時間到。</p><p><b>

30、  4.3 功能需求</b></p><p><b>  設(shè)計游戲界面</b></p><p><b>  游戲基本功能</b></p><p>  在游戲無解決方案時重排</p><p>  4.4 功能模塊及思路</p><p>  4.4.1 解決游戲區(qū)域問

31、題 </p><p>  這個問題最簡單,但是卻是最花時間的。正所謂:萬事開頭難。剛開始想了好多控件來實現(xiàn)。比如Label,Panel,button等等,[2]后來在參考文獻中發(fā)現(xiàn)一個掃雷游戲可以通過image控件來畫圖。因此在幾天之后才解決這個最早的最簡單的也是最頭疼的問題。 </p><p>  4.4.2 獲取圖片位置的思路 </p><p>  首先,最基本

32、的就是用button代替圖片進行布局了,然后將圖片set到button用來做背景圖片。這里采用最簡單的方法——數(shù)組??紤]到圖片是多行多列的格式。所以采用二維數(shù)組(數(shù)組名為game_grid[][]方式來控制比較直觀,并且為了程序容易解讀,統(tǒng)一在不同過程中用名為i和j的變量來分別表示行列。程序開始時給數(shù)組中的各個元素賦初值為0,即表示沒有圖片。 </p><p>  然后數(shù)組控制整個游戲區(qū)域,游戲區(qū)域最外圍為空白區(qū)

33、域,即相關(guān)元素的值為0。這樣就可以保證游戲剛開始后,第二層顯示的圖片之間的相連路徑處理時就沒有阻礙了。 </p><p>  這個游戲考慮到玩家對圖片的愛好不同,故可以自由修改。將數(shù)組game_grid的數(shù)據(jù)與圖片名匹配(如:game_grid的數(shù)據(jù)為1~25則圖片名為1,2...25與之一一對應(yīng)),玩家則只需要將自己喜歡的圖片改變圖片名字去替換就可以了。其button背景圖片的方法是用ImageIcon來存

34、儲圖片信息然后set到button中。這個思路的具體算法可以后面的3.2.2的第二個步驟中得以體現(xiàn)。 </p><p>  4.4.3 分類判斷法</p><p>  這里實質(zhì)上是一種遞歸的思想,要判斷圖片A與圖片B能否通過一條有N個轉(zhuǎn)角的路徑相連,可以轉(zhuǎn)化為判斷能否找到圖片C,C與A能直線相連,且C與B能用一條有N-1個轉(zhuǎn)角的路徑相連。若這樣的圖片C存在,那么A與B就可以通過一條有N個轉(zhuǎn)

35、角的路徑相連。 </p><p>  根據(jù)轉(zhuǎn)角數(shù)不得超過2個的規(guī)則,我們可以分為轉(zhuǎn)角數(shù)分別為0個、1個、2個這三種情況分別討論。[3] </p><p> ?。?)0轉(zhuǎn)角連通(直線連通):兩個圖片的縱坐標(biāo)或橫坐標(biāo)相等,且兩者連線間沒有其他圖案阻隔。 </p><p> ?。?)一個轉(zhuǎn)角連通:其實相當(dāng)于兩個圖片的橫向與縱向的直線相交只有一個焦點。</p>

36、<p>  圖4.4.2一個轉(zhuǎn)角連通 </p><p> ?。?)兩個轉(zhuǎn)角連通: 判斷圖片A與圖片B能否經(jīng)過有兩個轉(zhuǎn)角的路徑連通實質(zhì)上可以轉(zhuǎn)化為判斷能否找到一個點C,這個C點與A可以直線連通,且C與B可以通過有兩個轉(zhuǎn)角的路徑連通。若能找到這樣一個C點,那么A與B就可以經(jīng)過有兩個轉(zhuǎn)角的路徑連通 。 </p><p>  判斷是否經(jīng)兩個轉(zhuǎn)角連通的算法需要做兩個方向上的掃描:水平掃描

37、和垂直掃描。 </p><p>  水平判斷。如下圖所示,為了判斷A,B能否通過2個轉(zhuǎn)角連通,則從A開始在水平方向上向左右掃描,并判斷經(jīng)過的點能否與B點經(jīng)過1個轉(zhuǎn)角連通。顯然C點能與B點經(jīng)1個轉(zhuǎn)角連通,故A,B能經(jīng)2個轉(zhuǎn)角連通。</p><p>  圖4.4.3兩個轉(zhuǎn)角連通的判斷 </p><p>  垂直判斷。如下圖所示,為了判斷A,B能否通過2個轉(zhuǎn)角連通,則從A

38、開始在垂直方向上下掃描,并判斷經(jīng)過的點能否與B點經(jīng)過1個轉(zhuǎn)角連通。顯然C點能與B點經(jīng)1個轉(zhuǎn)角連通,故A,B能經(jīng)2個轉(zhuǎn)角連通。</p><p>  圖4.4.4兩個轉(zhuǎn)角連通的判斷 </p><p>  4.5 系統(tǒng)需求分析總結(jié)</p><p>  通過對現(xiàn)行連連看系統(tǒng)的調(diào)查與分析,本系統(tǒng)的結(jié)構(gòu)基本合理,系統(tǒng)功能基本能夠達到Windows小游戲的要求。本系統(tǒng)的輸入邊界是

39、用戶進行鼠標(biāo)事件操作,圖片全部消除,游戲結(jié)束,并且游戲勝利[4]。</p><p>  通過對連連看游戲規(guī)則以及相關(guān)算法的分析,本系統(tǒng)總的數(shù)據(jù)量較小,規(guī)模不大,適合于在普通微機或小型機上運行。</p><p><b>  五、設(shè)計方案</b></p><p><b>  5.1 總體設(shè)計</b></p>&l

40、t;p>  本設(shè)計采用單機模式,當(dāng)在規(guī)定的時間內(nèi)消完全部的圖片則當(dāng)前關(guān)卡通過,如果在規(guī)定的時間內(nèi)沒能消完所有的圖片則游戲結(jié)束,重新開始新游戲。游戲規(guī)則是模仿普通的連連看游戲,主要是鼠標(biāo)兩次點擊的圖片能否消去的問題。當(dāng)前,前提是點擊兩張相同的圖片,若點擊的是同一張圖片或者兩張不同的圖片,則不予處理。在兩張想同圖片用三根以內(nèi)的直線能連在一起,就可以消去;否則,不予處理。連連看游戲其結(jié)構(gòu)圖如下:</p><p>

41、<b>  5.2 詳細設(shè)計</b></p><p>  5.2.1 游戲界面設(shè)計 </p><p>  游戲界面的設(shè)計對于編程人員來說,可能算是最簡單的問題,但是,對于大多數(shù)玩家來說,他可能不會關(guān)心你是怎么實現(xiàn)的,玩家一開始選擇玩這個游戲,他可能更加關(guān)心的界面是否美觀,是不是能讓他有耳目一新的感覺。在本次課程設(shè)計中,主要用 Java中swing界面編程來實現(xiàn)[5]。

42、</p><p>  5.2.2鼠標(biāo)點擊控制</p><p>  鼠標(biāo)點擊控制主要表現(xiàn)在游戲的功能控制上,外部的鼠標(biāo)、鍵盤對游戲操作的相應(yīng),連連看游戲主要是鼠標(biāo)點擊對游戲操作的作用,例如:鼠標(biāo)單擊開始、結(jié)束選項對游戲的控制[6]。</p><p>  鼠標(biāo)點擊退出選項退出游戲,程序中由系統(tǒng)觸發(fā)了public void actionPerformed(ActionEv

43、ent e)鼠標(biāo)響應(yīng),添加系統(tǒng)內(nèi)置代碼 System.exit(0);,點擊觸發(fā),退出游戲。</p><p>  鼠標(biāo)點擊選擇游戲區(qū)的圖片響應(yīng)則交予Java系統(tǒng)自動響應(yīng)</p><p>  for(int row_i=0;row_i<ROW;row_i++){</p><p>  for(int column_j=0;column_j<COLUMN;c

44、olumn_j++){</p><p>  if(e.getSource()==game_all[row_i][column_j]){//game_all[row_i][column_j].setBackground(Color.red);button_check(row_i+1,column_j+1,game_all[row_i][column_j]);</p><p>

45、;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  5.2.3 路徑判斷的設(shè)計</p><p>  連連看游戲的所要求的是:兩個目標(biāo)之間連接線的折點不超過兩個。(連接線由x軸和y軸的平行線組成) 那

46、么分析一下連接的情況可以看到,一般分直線連接、一個折點、兩個折點三種情況(其理論在第二章已詳述)。</p><p>  其滿足游戲規(guī)則:那么目標(biāo)圖片將順利的消除。否則,繼續(xù)游戲。</p><p>  5.2.4 游戲詳細過程流程圖 </p><p>  如圖5.2.4所示:</p><p>  圖5.2.4 游戲過程流程圖</p>

47、;<p><b>  六、 實現(xiàn)</b></p><p><b>  6.1 游戲界面</b></p><p>  1、游戲初始界面 如下圖6.1所示</p><p>  游戲界面設(shè)計比較簡潔,用swing的JFrame,以及一個button控件。其已經(jīng)消除的圖片將button隱藏。具體界面如圖6.1所示:&

48、lt;/p><p>  圖6.1 基本界面圖</p><p>  其部分實現(xiàn)代碼如下:</p><p>  this.setSize(1200, 800); //將窗體的大小設(shè)定</p><p>  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

49、 //退出游戲時關(guān)掉進程</p><p>  this.setResizable(false); //窗體不能改變大小</p><p>  this.setTitle("連連看"); //設(shè)置標(biāo)題</p><p><b>  /**</b><

50、/p><p>  * 頭部容器init</p><p><b>  */</b></p><p>  JPanel toolBar = new JPanel();</p><p>  Border border = BorderFactory.createBevelBorder(BevelBorder.LOWERED

51、, Color.blue,</p><p>  Color.yellow,Color.blue,Color.yellow);</p><p>  toolBar.add(button);</p><p>  button.addActionListener(this);</p><p>  toolBar.setBorder(border);

52、</p><p>  toolBar.setPreferredSize(new Dimension(1200, 50));</p><p><b>  /**</b></p><p>  * 用戶選擇區(qū)init</p><p><b>  */</b></p><p>  J

53、Panel actionPanel = new JPanel(); //新建JPanel型的控件</p><p>  actionPanel.setBorder(border);</p><p>  actionPanel.setPreferredSize(new Dimension(300, 740)); //設(shè)置大小</p><p>

54、;<b>  /**</b></p><p><b>  * 游戲區(qū)init</b></p><p><b>  */</b></p><p>  JPanel contentPanel = new JPanel();</p><p>  GridLayout gridlayo

55、ut = new GridLayout(ROW,COLUMN);</p><p>  contentPanel.setBorder(border);</p><p>  contentPanel.setPreferredSize(new Dimension(900, 740));</p><p>  contentPanel.setLayout(gridla

56、yout); //將游戲區(qū)contentPanel布局改為gridlayout布局</p><p>  this.getContentPane().add(toolBar, BorderLayout.NORTH);</p><p>  this.getContentPane().add(actionPanel, BorderLayout.EAST);</p

57、><p>  this.getContentPane().add(contentPanel, BorderLayout.CENTER);</p><p>  游戲完成界面 如圖6.2所示</p><p><b>  圖6.2 完成界面</b></p><p>  6.2 游戲各功能及代碼</p><p&g

58、t;<b>  1、游戲界面初始化</b></p><p>  public class LLKanTest implements ActionListener {</p><p>  JFrame mainFrame; // 主面板</p><p>  JButton firs

59、tButton, secondButton; // 第一二次選擇button</p><p>  Container thisContainer;</p><p>  JPanel centerPanel, eastPanel, northPanel; //子面板</p><p>  public static int

60、ROW=8,COLUMN=8;</p><p>  JButton game_all[][] = new JButton[ROW][COLUMN]; // 游戲?qū)嶋H按鈕數(shù)組</p><p>  JButton exitButton, resetButton, newlyButton; // 退出,重列,重新開始按鈕</p><p>  int game_g

61、rid[][] = new int[10][10];</p><p>  static boolean flag = false; // 判斷是否有按鈕被選中</p><p>  int row1 = 0, column1 = 0, row2 = 0, column2 = 0;</p><p>  int fristMsg =

62、0, secondMsg = 0, validateLV; // 游戲按鈕的位置坐標(biāo)</p><p>  int i, j, k, n; </p><p>  String str="src/images/",str1=".jpg";</p><p>  Im

63、ageIcon icon;</p><p>  public void init() {</p><p>  Border border = BorderFactory.createBevelBorder(BevelBorder.LOWERED, Color.blue,</p><p>  Color.yellow,Color.blue,Color.yellow);

64、</p><p>  mainFrame = new JFrame("無聊連連看");</p><p>  thisContainer = mainFrame.getContentPane(); //得到內(nèi)存中窗體內(nèi)容</p><p>  thisContainer.setLayout(new BorderLayout()); //實現(xiàn)窗體

65、</p><p>  centerPanel = new JPanel();</p><p>  eastPanel = new JPanel();</p><p>  northPanel = new JPanel();</p><p>  thisContainer.add(centerPanel,"Center");

66、</p><p>  eastPanel.setBorder(border);</p><p>  thisContainer.add(eastPanel,"East");</p><p>  thisContainer.add(northPanel,"North");</p><p>  center

67、Panel.setLayout(new GridLayout(ROW,ROW));</p><p><b>  /**</b></p><p><b>  * 畫button</b></p><p><b>  */</b></p><p>  for ( row1 = 0;

68、row1 <ROW; row1++) {</p><p>  for ( column1 = 0; column1 < ROW; column1++) { </p><p>  if(game_grid[row1+1][column1+1]>15){</p><p>  game_grid[row1+1][column1+1]=0;</p

69、><p>  game_all[row1][column1]= new JButton();</p><p>  game_all[row1][column1].setBorder(border);</p><p>  centerPanel.add(game_all[row1][column1]);</p><p>  game_all[row

70、1][column1].setVisible(false);</p><p><b>  }else{</b></p><p>  icon = new ImageIcon(str+game_grid[row1+1][column1+1]+str1);</p><p>  game_all[row1][column1] = new JButto

71、n(null,icon);</p><p>  game_all[row1][column1].setBorder(border);</p><p>  game_all[row1][column1].addActionListener(this); //添加響應(yīng)事件</p><p>  centerPanel.add(game_all[row1][column

72、1]);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  newlyButton = new JButton("重玩");</p><p> 

73、 newlyButton.addActionListener(this); </p><p>  resetButton = new JButton("重列");</p><p>  resetButton.addActionListener(this);</p><p>  exitButton = new JButton("退出&

74、quot;);</p><p>  exitButton.addActionListener(this);</p><p>  eastPanel.add(exitButton);</p><p>  eastPanel.add(resetButton);</p><p>  eastPanel.add(newlyButton);</p

75、><p>  mainFrame.setBounds(300, 100, 850, 500);</p><p>  mainFrame.setVisible(true); </p><p>  mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //退出后關(guān)閉程序</p><p

76、><b>  }</b></p><p><b>  2、游戲隨機布局</b></p><p><b>  /**</b></p><p><b>  * 隨機布局</b></p><p><b>  */</b></p&

77、gt;<p>  public void randomBuild() {</p><p>  int randoms, col01, row01;</p><p>  for (int ii = 1; ii <= ROW*COLUMN/2; ii++){//一共ROW*COLUMN/2對button</p><p>  randoms = (in

78、t) (Math.random() * 25 +1);//button上的數(shù)字 </p><p>  for (int jj = 1; jj <= 2; jj++){</p><p>  col01 = (int) (Math.random() * ROW + 1);</p><p>  row01 = (int) (Math.random() * R

79、OW + 1);</p><p>  while (game_grid[col01][row01] != 0) {//等于0說明這個空格有了button</p><p>  col01 = (int) (Math.random() * ROW + 1);</p><p>  row01 = (int) (Math.random() * ROW + 1);</p

80、><p><b>  }</b></p><p>  this.game_grid[col01][row01] = randoms;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }&l

81、t;/b></p><p><b>  選擇圖片</b></p><p>  獲取用戶點擊兩張圖片的位置,并傳入xiaochu()函數(shù)進行判斷</p><p>  public void estimateEven(int placerow2, int placecolumn2, JButton bz) {</p><p

82、>  if (flag == false) {</p><p>  row2 = placerow2;</p><p>  column2 = placecolumn2;</p><p>  secondMsg = game_grid[row2][column2];</p><p>  secondButton = bz;</p&

83、gt;<p>  flag = true;</p><p><b>  } else {</b></p><p>  row1 = row2;</p><p>  column1 = column2;</p><p>  fristMsg = secondMsg;</p><p> 

84、 firstButton = secondButton;</p><p>  row2 = placerow2;</p><p>  column2 = placecolumn2;</p><p>  secondMsg = game_grid[row2][column2];</p><p>  secondButton = bz;</

85、p><p>  if (fristMsg == secondMsg &&secondButton != firstButton) {//button不同數(shù)字相同則消掉</p><p>  xiaochu();</p><p><b>  }</b></p><p><b>  }</b>

86、;</p><p><b>  }</b></p><p><b>  4、判斷消除圖片</b></p><p>  1. 消除圖片時要判斷是否可達,即優(yōu)化判斷是否可以消除的算法是本程序的靈魂,連連看游戲分為三種消去方式,分別為“0折型”,“一折型”,“兩折型”,由圖4-5可以看出,如果兩點間只需要一條直線能夠連接起來,則

87、A、B兩點的橫坐標(biāo)或縱坐標(biāo)必定相同,有了這個條件,我們判斷 A、B兩點是否只需要一條直接連接就簡單了許多。</p><p><b>  其分析如下:</b></p><p><b>  1.“0折型”:</b></p><p>  水平消去或者垂直消去,如果兩個點擊的兩個圖片相同,并且它們在同一水平或垂直方向上,即返回H_

88、LINE的畫線類型,代碼如下:</p><p>  if ((row1 == row2 && (column1 == column2 + 1 || column1 ==column2 - 1))</p><p>  || ((row1 == row2 + 1 || row1 == row2 - 1) &&(column1 == column2))) { //

89、 判斷是否相鄰</p><p>  remove();}</p><p>  2.“一折型”,當(dāng)點擊的兩個點相同,它們不在同一水平或垂直方向上,并且它們要用</p><p>  兩條直線相連,就返回ONE_C_LINE,代碼如:</p><p>  for (j = 0; j < 10; j++) {</p><p&

90、gt;  if (game_grid[row1][j] == 0) {// 判斷和第一個按鈕同行的哪個按鈕為空</p><p>  if (column2 > j) {//第二個按鈕在空按鈕右邊</p><p>  for (i = column2 - 1; i >= j; i--) { //檢測從第二個按鈕橫向左邊到空格所在列為止是否全是空格</p><p

91、>  if (game_grid[row2][i] != 0) {</p><p><b>  k = 0;</b></p><p><b>  break;</b></p><p><b>  } else {</b></p><p><b>  k = 1;

92、</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  if (k == 1) {</p><p>  line_check();//進入第二次驗證,也就是從第一個按鈕到它同行的空格之間的空格判斷</p><p&

93、gt;<b>  }</b></p><p><b>  }</b></p><p>  if (column2 < j) {// 第二個按鈕在空按鈕左邊</p><p>  for (i = column2 + 1; i <= j; i++) {//檢測從第二個按鈕橫向右邊到空格所在列為止是否全是空格<

94、/p><p>  if (game_grid[row2][i] != 0) {</p><p><b>  k = 0;</b></p><p><b>  break;</b></p><p><b>  } else {</b></p><p><

95、b>  k = 1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (k == 1) {</p><p>  line_check();</p><p><b>  }</b

96、></p><p><b>  }</b></p><p>  if (column2 == j) {//第二個按鈕和空按鈕同列</p><p>  line_check();</p><p><b>  }</b></p><p><b>  }</b

97、></p><p>  3.“兩折型”,當(dāng)點擊的兩個點相同,它們不在同一水平或垂直方向上,并且它們要用三條直線相連,就返回TWO_C_LINE,代碼如下:</p><p>  if (k == 2) {</p><p>  if (row1 == row2) {//第一,二按鈕在同行</p><p><b>  remove(

98、);</b></p><p><b>  }</b></p><p>  if (row1 < row2) {//第二按鈕在第一按鈕下邊</p><p>  for (n = row1; n <= row2 - 1; n++) {//從空按鈕豎向到第二個按鈕所在行是否有按鈕</p><p>  i

99、f (game_grid[n][j] != 0) {</p><p><b>  k= 0;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  //沒有按鈕,說明這條路經(jīng)就通了</p><p

100、>  if (game_grid[n][j] == 0 && n == row2 -1) {//在某一列第一二按鈕是空按鈕連接</p><p><b>  remove();</b></p><p><b>  }</b></p><p><b>  }</b></p>

101、;<p><b>  }</b></p><p>  if (row1 > row2) {//第一按鈕在第二按鈕上邊</p><p>  for (n = row1; n >= row2 + 1; n--) {</p><p>  if (game_grid[n][j] != 0) {</p><p

102、><b>  k = 0;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  if (game_grid[n][j] == 0 && n == row2 +1) {</p><p><

103、;b>  remove();</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

104、<b>  消除圖片代碼</b></p><p>  public void remove() {</p><p>  firstButton.setVisible(false);</p><p>  secondButton.setVisible(false);</p><p>  flag = false;</

105、p><p><b>  k = 0;</b></p><p>  game_grid[row1][column1] = 0;</p><p>  game_grid[row2][column2] = 0;</p><p><b>  }</b></p><p><b>

106、  七 、總結(jié)</b></p><p>  課程設(shè)計是培養(yǎng)學(xué)生綜合運用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程.</p><p>  回顧此次連連看游戲設(shè)計,從理論到實踐,學(xué)到了很多很多的東西的同時也意識到不足,由于以前對Java的swing編程不是很熟悉,所以在寫代碼時遇到了一些問題。如:游戲界面的布局在重列的

107、時候其button有可能顯示不完全,</p><p>  連連看其判斷路徑的算法開始編寫時有漏洞等。</p><p>  這次連連看設(shè)計實現(xiàn)了:游戲界面的窗體實現(xiàn),連連看消除路徑的判斷算法,button界面布局,button的背景圖片set寫入,相關(guān)游戲區(qū)總體布局以及玩家的人機互動性操作。</p><p>  這個連連看游戲還諸多不足之處,如:沒有實現(xiàn)玩家排行榜設(shè)計

108、,游戲內(nèi)容設(shè)計,趣味性不足等。關(guān)于后續(xù)改進方案如下:實現(xiàn)已有不足之處,以及根據(jù)自己的技術(shù)去實現(xiàn)連連看局域網(wǎng)對戰(zhàn),玩家互動性操作等。</p><p>  總體上這次連連看游戲設(shè)計讓我懂得:實踐才是真理。而你所想到的并不一定能夠完全實現(xiàn)。</p><p><b>  八、參考資料</b></p><p>  [1] 朱福喜. J

109、ava語言與面向?qū)ο蟪绦蛟O(shè)計[M], 武漢: 武漢大學(xué)出版社,2006:123-130 </p><p>  [2] 印旻. Java語言與面向?qū)ο蟪绦蛟O(shè)計[M],北京: 清華大學(xué)出版社,2005.4: 58-72 </p><p>  [3] 朱站立、沈偉. Java程序設(shè)計實用教程[M]

110、, 北京: 電子工業(yè)出版社, 2007.5: 82-95 </p><p>  [4] 葉核亞. Java 2程序設(shè)計實用教程[M], 北京: 電子工業(yè)出版  ,2008:35-48</p><p>  [5] 艾力江. Java 2 范例入

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論