版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計--連連看游戲設(shè)計
- java連連看課程設(shè)計
- java連連看課程設(shè)計
- java課程設(shè)計—連連看
- 課程設(shè)計報告----java實現(xiàn)游戲連連看
- java連連看課程設(shè)計報告
- java連連看課程設(shè)計報告
- 基于java連連看游戲
- 基于java的連連看游戲設(shè)計
- android課程設(shè)計連連看小游戲
- 連連看課程設(shè)計
- 連連看課程設(shè)計
- java課程設(shè)計說明書---連連看
- 連連看java小游戲畢業(yè)設(shè)計論文
- 基于java的連連看游戲設(shè)計與實現(xiàn)
- 基于java的連連看游戲設(shè)計與實現(xiàn)
- 連連看課程設(shè)計報告
- 基于java的連連看游戲設(shè)計畢業(yè)論文
- 基于java的連連看游戲設(shè)計畢業(yè)論文
- 基于java的連連看游戲軟件設(shè)計
評論
0/150
提交評論