版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 課程名稱(chēng):程序設(shè)計(jì)實(shí)訓(xùn)</p><p> 報(bào)告題目:連連看游戲的開(kāi)發(fā)</p><p><b> 學(xué)生姓名:</b></p><p><b> 所在學(xué)院:</b></p><p>
2、;<b> 專(zhuān)業(yè)班級(jí):</b></p><p><b> 學(xué)生學(xué)號(hào):</b></p><p><b> 指導(dǎo)教師:</b></p><p> 2013年6月20日</p><p><b> 課程設(shè)計(jì)任務(wù)書(shū)</b></p><p
3、><b> 摘 要</b></p><p> 近年來(lái),Java作為一種新的編程語(yǔ)言,以其可移植性和平臺(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> 本設(shè)計(jì)報(bào)告闡述了連連看游戲的分析與設(shè)計(jì)的全過(guò)程,并在論文中相應(yīng)的位置插入了圖片、流程圖以及一些具有技巧性的程
4、序代碼,更加清晰的描述了該游戲是如何實(shí)現(xiàn)的。連連看游戲有編寫(xiě)簡(jiǎn)單容易上手等特點(diǎn),非常適合人們?cè)谕瓿晒ぷ鞯臅r(shí)候適當(dāng)?shù)膴蕵?lè)要求。這些小游戲大都是以益智和娛樂(lè)為目的,不僅給緊張工作的人們以放松,還可以讓人們的大腦得到開(kāi)發(fā)。</p><p> 連連看游戲采用JAVA語(yǔ)言開(kāi)發(fā),以MyEclipse為開(kāi)發(fā)平臺(tái)。游戲主界面是基于SWING(圖形用戶界面)的開(kāi)發(fā),使得游戲界面簡(jiǎn)單清晰。并調(diào)用了其中的一些函數(shù),完成了事件的觸發(fā)功
5、能。希望通過(guò)這次開(kāi)發(fā)設(shè)計(jì)出的連連看小游戲,給大家的生活帶來(lái)一點(diǎn)樂(lè)趣。 游戲通過(guò)定義動(dòng)態(tài)的二維數(shù)組,根據(jù)一定的算法實(shí)現(xiàn)規(guī)定的路徑判斷。</p><p> 關(guān)鍵詞:連連看游戲;算法設(shè)計(jì);路徑判斷;Java</p><p><b> 目 錄</b></p><p> 課程設(shè)計(jì)任務(wù)書(shū)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)濟(jì)可行性2</p><p> 2.3 操
7、作可行性3</p><p> 三、課程設(shè)計(jì)題目任務(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è)計(jì)要求及目的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è)計(jì)方案11</b></p><p> 5.1 總體設(shè)計(jì)11</p><p> 5.2 詳細(xì)設(shè)計(jì)12</p><p><b> 六、實(shí)現(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> 計(jì)算機(jī)產(chǎn)業(yè)的進(jìn)步與發(fā)展也促進(jìn)了游戲產(chǎn)業(yè)的進(jìn)步。當(dāng)前我們生活中的各
11、類(lèi)游戲?qū)映霾桓F,但是經(jīng)典總會(huì)存在,有一些游戲不是時(shí)間的推移或是技術(shù)的革新可以洗刷掉它的存在和光環(huán)的。其中連連看游戲就是計(jì)算機(jī)游戲世界里典型的經(jīng)典游之一。</p><p> 電子游戲產(chǎn)業(yè)作為現(xiàn)代計(jì)算機(jī)技術(shù)的產(chǎn)物,正在以其獨(dú)特的魅力在全世界的娛樂(lè)領(lǐng)域占據(jù)主流位置。我們必須明確的一點(diǎn)就是游戲本身所具有的強(qiáng)大的吸引力。游戲其吸引力主要在于,它在讓玩家打發(fā)時(shí)間的同時(shí),也可以讓人發(fā)泄對(duì)現(xiàn)實(shí)生活中的不滿,得到在現(xiàn)實(shí)中不能得到
12、的東西。而且游戲產(chǎn)業(yè)促動(dòng)高科技技術(shù)不斷升級(jí),作為經(jīng)濟(jì)增長(zhǎng)的一大支撐點(diǎn),已經(jīng)成為經(jīng)濟(jì)騰飛的“第四產(chǎn)業(yè)”。</p><p> 游戲產(chǎn)業(yè)的多樣性發(fā)展趨勢(shì)促使一門(mén)使程序設(shè)計(jì)更加方便、功能更加強(qiáng)大的開(kāi)發(fā)語(yǔ)言發(fā)展起來(lái)。</p><p> 連連看游戲的設(shè)計(jì)主要采用的Java編程技術(shù),就語(yǔ)言技術(shù)、風(fēng)格、嚴(yán)謹(jǐn)?shù)忍攸c(diǎn)上來(lái)說(shuō),Java是編程語(yǔ)言中最為優(yōu)秀的一種語(yǔ)言之一,甚至由它而引發(fā)出計(jì)算機(jī)語(yǔ)言界中的多種新
13、的規(guī)范和特征。特別的,在連連看游戲的設(shè)計(jì)中需要將一些小圖片貼入到游戲界面上,如果利用C或C++來(lái)設(shè)計(jì)這部分是比較復(fù)雜的,但是使用Java語(yǔ)言只需將圖片set到button控件的背景圖片即可,并將圖片直接導(dǎo)入到控件中便可省去很部分的代碼。所以,Java的產(chǎn)生和發(fā)展使得程序設(shè)計(jì)的功能更加的強(qiáng)大、設(shè)計(jì)的方法更加的便捷。</p><p><b> 二、 可行性分析</b></p>
14、<p> 2.1 技術(shù)可行性</p><p> 此次編寫(xiě)的連連看游戲是建立在MyEclipse8.5開(kāi)發(fā)環(huán)境下,Java中swing為連連看游戲的設(shè)計(jì)提供了便利,此次設(shè)計(jì)主要是運(yùn)用的Java語(yǔ)言編程與實(shí)現(xiàn)的。在此開(kāi)發(fā)環(huán)境中是完全可行的。</p><p> 連連看游戲是涉及到圖形界面處理的,其中圖片的導(dǎo)入可以通過(guò)開(kāi)發(fā)軟件的圖片導(dǎo)入控件直接導(dǎo)入,但是相應(yīng)的操作需要對(duì)界面進(jìn)行重
15、繪,圖1.1是界面控制處理的流程圖:</p><p> 圖2.1 圖形界面控制</p><p><b> 2.2 經(jīng)濟(jì)可行性</b></p><p> 一個(gè)游戲的實(shí)現(xiàn),需要考慮玩家花費(fèi)的人力物力,不計(jì)算能夠回收多少資金就不是一個(gè)好的項(xiàng)目負(fù)責(zé)人。一個(gè)新想法如果不經(jīng)過(guò)項(xiàng)目負(fù)責(zé)人的決策是不可能立項(xiàng)的。所以,在進(jìn)行游戲設(shè)計(jì)的過(guò)程中,一定要把項(xiàng)目的
16、規(guī)模和市場(chǎng)效果考慮進(jìn)去,否則游戲再好,如果不適合市場(chǎng)的需要也是徒勞 。</p><p> 通過(guò)花費(fèi)、時(shí)間和人力的綜合考慮,連連看游戲的設(shè)計(jì)只需要一臺(tái)裝有開(kāi)發(fā)軟件Java的計(jì)算機(jī)和一個(gè)具有相關(guān)知識(shí)的開(kāi)發(fā)者,是有經(jīng)濟(jì)可行性的。 </p><p><b> 2.3 操作可行性</b></p><p> 從技術(shù)上來(lái)考慮,這是可以實(shí)現(xiàn)的。需要你熟悉
17、C#與asp.net 以及SQL SERVER 2008并能夠簡(jiǎn)單的應(yīng)用,那樣留言簿就能夠?qū)崿F(xiàn)了。但對(duì)于用戶來(lái)說(shuō)他要的僅僅是能夠與大家交流,分享心情的平臺(tái)。他并不會(huì)在乎你用什么技術(shù)去實(shí)現(xiàn)以及你花費(fèi)多少精力去完成的。因此在操作上必須簡(jiǎn)單,這是完全能夠去實(shí)現(xiàn)的。因此在操作上是完全可行的。 </p><p> 此次課程設(shè)計(jì)的連連看游戲是基于MyEclipse8.5之上的,只要你的電腦安裝了此軟件就可以玩連連看游戲了.
18、</p><p> 三、課程設(shè)計(jì)題目任務(wù)描述和要求</p><p><b> 3.1 任務(wù)描述</b></p><p><b> 3.1.1 界面</b></p><p> 用Java swing的JFrame設(shè)計(jì)界面,使用JFrame繼承。([1])其主體實(shí)現(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ò)程,如果玩家在規(guī)定的時(shí)間內(nèi)消完則提示玩家勝利,如果在一定時(shí)間內(nèi)圖片沒(méi)有消完則提示玩家時(shí)間到,游戲失敗。</p><p> 經(jīng)過(guò)對(duì)游戲的初步分析,連連看游戲包含了如下規(guī)則:</p><p> 1、條件:程序的關(guān)鍵在于判斷用戶連續(xù)點(diǎn)擊的兩個(gè)圖案能
22、否消除。兩個(gè)圖片可以消除的條件有兩個(gè): </p><p><b> 圖片相同 </b></p><p> 圖片間連線的轉(zhuǎn)角數(shù)不得超過(guò)2 。 </p><p><b> 2、操作:</b></p><p> 第一次使用鼠標(biāo)點(diǎn)擊游戲界面中的牌,該牌此時(shí)為"被選中",以特殊方式
23、顯示;再次以鼠標(biāo)點(diǎn)擊其他牌,若該牌與被選中的牌圖案相同,且把第一個(gè)牌到第二個(gè)牌連起來(lái),中間的直線不超過(guò) 3 根,則消掉這一對(duì)牌,否則第一個(gè)牌恢復(fù)成未被選中狀態(tài),而第二個(gè)牌變成被選中狀態(tài)。在規(guī)定的時(shí)間內(nèi)將游戲界面上的牌全部消除掉。則游戲勝利 ,在規(guī)定時(shí)間,界面上的牌仍未全部消掉。則游戲失敗</p><p> 3.2 設(shè)計(jì)要求及目的</p><p> 通過(guò)本次課程設(shè)計(jì),并在實(shí)際運(yùn)用中學(xué)習(xí)和
24、熟悉Java程序開(kāi)發(fā)的基礎(chǔ)過(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> 主要是能通過(guò)開(kāi)發(fā)“連連看”這個(gè)小游戲,提高自己Java程序設(shè)計(jì)編程的實(shí)際能力。</p><p> 進(jìn)一步熟悉掌握J(rèn)ava程序設(shè)計(jì)的基礎(chǔ)內(nèi)容, J
25、ava多線程編程等。</p><p> 大體了解怎樣用Java來(lái)編寫(xiě)小游戲,增強(qiáng)我們實(shí)踐能力和創(chuàng)新精神的綜合培養(yǎng)。 </p><p> 設(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)。</p><p><b> 四、需求分析&
26、lt;/b></p><p><b> 4.1 方案選擇</b></p><p> 在概要設(shè)計(jì)階段,主要有兩中方案可供選擇: </p><p> 一、所有的圖片都是按約定好的種類(lèi)數(shù)和在同一區(qū)域的重復(fù)次數(shù)隨機(jī)出現(xiàn),并且每張圖片的的出現(xiàn)次數(shù)為偶數(shù) ,時(shí)間會(huì)有限制,每一關(guān)的圖片數(shù)量或種方案的設(shè)計(jì)思想,時(shí)間是不同的,這樣就增加了游戲的難度。
27、</p><p> 二、在同一區(qū)域中,圖片出現(xiàn)的種類(lèi)數(shù)和重復(fù)次數(shù)是可以由玩家選擇的,時(shí)間由游戲約定。不過(guò)玩家選擇的種類(lèi)數(shù)和重復(fù)次數(shù)必須是偶數(shù)才可以順利完成游戲,否則游戲雖然可以正常運(yùn)行,但無(wú)法完成游戲。</p><p> 在第一種方案中,由于出現(xiàn)的圖像按種類(lèi)數(shù)和重復(fù)次數(shù)都由軟件約定,這樣就缺乏玩家自主選擇的空間,只是在玩系統(tǒng)已經(jīng)是設(shè)定好的游戲,不能改變什么,這樣就在無(wú)意中降低了玩家在游
28、戲的過(guò)程中樂(lè)趣,最后致使玩家放棄繼續(xù)玩下去。我們參考了網(wǎng)絡(luò)上的連連看游戲,考慮到游戲的娛樂(lè)性。所以我們放棄第一種方案的設(shè)計(jì)思想,參考網(wǎng)絡(luò)上流行的連連看的游戲,設(shè)計(jì)出第二種方案。</p><p><b> 4.2功能描述</b></p><p> 本設(shè)計(jì)采用單機(jī)模式,當(dāng)在規(guī)定的時(shí)間內(nèi)消完全部的圖片則當(dāng)前關(guān)卡通過(guò),如果在規(guī)定的時(shí)間內(nèi)沒(méi)能消完所有的圖片則游戲結(jié)束,重新開(kāi)
29、始新游戲。游戲規(guī)則是模仿普通的連連看游戲,主要是鼠標(biāo)兩次點(diǎn)擊的圖片能否消去的問(wèn)題。當(dāng)前,前提是點(diǎn)擊兩張相同的圖片,若點(diǎn)擊的是同一張圖片或者兩張不同的圖片,則不予處理。在兩張想同圖片用三根以?xún)?nèi)的直線能連在一起,就可以消去;否則,不予處理。</p><p> 游戲過(guò)程,如果玩家在一定的時(shí)間內(nèi)消完則提示玩家勝利;如果在一定時(shí)間內(nèi)圖片沒(méi)有消完則提示玩家時(shí)間到。</p><p><b>
30、 4.3 功能需求</b></p><p><b> 設(shè)計(jì)游戲界面</b></p><p><b> 游戲基本功能</b></p><p> 在游戲無(wú)解決方案時(shí)重排</p><p> 4.4 功能模塊及思路</p><p> 4.4.1 解決游戲區(qū)域問(wèn)
31、題 </p><p> 這個(gè)問(wèn)題最簡(jiǎn)單,但是卻是最花時(shí)間的。正所謂:萬(wàn)事開(kāi)頭難。剛開(kāi)始想了好多控件來(lái)實(shí)現(xiàn)。比如Label,Panel,button等等,[2]后來(lái)在參考文獻(xiàn)中發(fā)現(xiàn)一個(gè)掃雷游戲可以通過(guò)image控件來(lái)畫(huà)圖。因此在幾天之后才解決這個(gè)最早的最簡(jiǎn)單的也是最頭疼的問(wèn)題。 </p><p> 4.4.2 獲取圖片位置的思路 </p><p> 首先,最基本
32、的就是用button代替圖片進(jìn)行布局了,然后將圖片set到button用來(lái)做背景圖片。這里采用最簡(jiǎn)單的方法——數(shù)組。考慮到圖片是多行多列的格式。所以采用二維數(shù)組(數(shù)組名為game_grid[][]方式來(lái)控制比較直觀,并且為了程序容易解讀,統(tǒng)一在不同過(guò)程中用名為i和j的變量來(lái)分別表示行列。程序開(kāi)始時(shí)給數(shù)組中的各個(gè)元素賦初值為0,即表示沒(méi)有圖片。 </p><p> 然后數(shù)組控制整個(gè)游戲區(qū)域,游戲區(qū)域最外圍為空白區(qū)
33、域,即相關(guān)元素的值為0。這樣就可以保證游戲剛開(kāi)始后,第二層顯示的圖片之間的相連路徑處理時(shí)就沒(méi)有阻礙了。 </p><p> 這個(gè)游戲考慮到玩家對(duì)圖片的愛(ài)好不同,故可以自由修改。將數(shù)組game_grid的數(shù)據(jù)與圖片名匹配(如:game_grid的數(shù)據(jù)為1~25則圖片名為1,2...25與之一一對(duì)應(yīng)),玩家則只需要將自己喜歡的圖片改變圖片名字去替換就可以了。其button背景圖片的方法是用ImageIcon來(lái)存
34、儲(chǔ)圖片信息然后set到button中。這個(gè)思路的具體算法可以后面的3.2.2的第二個(gè)步驟中得以體現(xiàn)。 </p><p> 4.4.3 分類(lèi)判斷法</p><p> 這里實(shí)質(zhì)上是一種遞歸的思想,要判斷圖片A與圖片B能否通過(guò)一條有N個(gè)轉(zhuǎn)角的路徑相連,可以轉(zhuǎn)化為判斷能否找到圖片C,C與A能直線相連,且C與B能用一條有N-1個(gè)轉(zhuǎn)角的路徑相連。若這樣的圖片C存在,那么A與B就可以通過(guò)一條有N個(gè)轉(zhuǎn)
35、角的路徑相連。 </p><p> 根據(jù)轉(zhuǎn)角數(shù)不得超過(guò)2個(gè)的規(guī)則,我們可以分為轉(zhuǎn)角數(shù)分別為0個(gè)、1個(gè)、2個(gè)這三種情況分別討論。[3] </p><p> ?。?)0轉(zhuǎn)角連通(直線連通):兩個(gè)圖片的縱坐標(biāo)或橫坐標(biāo)相等,且兩者連線間沒(méi)有其他圖案阻隔。 </p><p> ?。?)一個(gè)轉(zhuǎn)角連通:其實(shí)相當(dāng)于兩個(gè)圖片的橫向與縱向的直線相交只有一個(gè)焦點(diǎn)。</p>
36、<p> 圖4.4.2一個(gè)轉(zhuǎn)角連通 </p><p> ?。?)兩個(gè)轉(zhuǎn)角連通: 判斷圖片A與圖片B能否經(jīng)過(guò)有兩個(gè)轉(zhuǎn)角的路徑連通實(shí)質(zhì)上可以轉(zhuǎn)化為判斷能否找到一個(gè)點(diǎn)C,這個(gè)C點(diǎn)與A可以直線連通,且C與B可以通過(guò)有兩個(gè)轉(zhuǎn)角的路徑連通。若能找到這樣一個(gè)C點(diǎn),那么A與B就可以經(jīng)過(guò)有兩個(gè)轉(zhuǎn)角的路徑連通 。 </p><p> 判斷是否經(jīng)兩個(gè)轉(zhuǎn)角連通的算法需要做兩個(gè)方向上的掃描:水平掃描
37、和垂直掃描。 </p><p> 水平判斷。如下圖所示,為了判斷A,B能否通過(guò)2個(gè)轉(zhuǎn)角連通,則從A開(kāi)始在水平方向上向左右掃描,并判斷經(jīng)過(guò)的點(diǎn)能否與B點(diǎn)經(jīng)過(guò)1個(gè)轉(zhuǎn)角連通。顯然C點(diǎn)能與B點(diǎn)經(jīng)1個(gè)轉(zhuǎn)角連通,故A,B能經(jīng)2個(gè)轉(zhuǎn)角連通。</p><p> 圖4.4.3兩個(gè)轉(zhuǎn)角連通的判斷 </p><p> 垂直判斷。如下圖所示,為了判斷A,B能否通過(guò)2個(gè)轉(zhuǎn)角連通,則從A
38、開(kāi)始在垂直方向上下掃描,并判斷經(jīng)過(guò)的點(diǎn)能否與B點(diǎn)經(jīng)過(guò)1個(gè)轉(zhuǎn)角連通。顯然C點(diǎn)能與B點(diǎn)經(jīng)1個(gè)轉(zhuǎn)角連通,故A,B能經(jīng)2個(gè)轉(zhuǎn)角連通。</p><p> 圖4.4.4兩個(gè)轉(zhuǎn)角連通的判斷 </p><p> 4.5 系統(tǒng)需求分析總結(jié)</p><p> 通過(guò)對(duì)現(xiàn)行連連看系統(tǒng)的調(diào)查與分析,本系統(tǒng)的結(jié)構(gòu)基本合理,系統(tǒng)功能基本能夠達(dá)到Windows小游戲的要求。本系統(tǒng)的輸入邊界是
39、用戶進(jìn)行鼠標(biāo)事件操作,圖片全部消除,游戲結(jié)束,并且游戲勝利[4]。</p><p> 通過(guò)對(duì)連連看游戲規(guī)則以及相關(guān)算法的分析,本系統(tǒng)總的數(shù)據(jù)量較小,規(guī)模不大,適合于在普通微機(jī)或小型機(jī)上運(yùn)行。</p><p><b> 五、設(shè)計(jì)方案</b></p><p><b> 5.1 總體設(shè)計(jì)</b></p>&l
40、t;p> 本設(shè)計(jì)采用單機(jī)模式,當(dāng)在規(guī)定的時(shí)間內(nèi)消完全部的圖片則當(dāng)前關(guān)卡通過(guò),如果在規(guī)定的時(shí)間內(nèi)沒(méi)能消完所有的圖片則游戲結(jié)束,重新開(kāi)始新游戲。游戲規(guī)則是模仿普通的連連看游戲,主要是鼠標(biāo)兩次點(diǎn)擊的圖片能否消去的問(wèn)題。當(dāng)前,前提是點(diǎn)擊兩張相同的圖片,若點(diǎn)擊的是同一張圖片或者兩張不同的圖片,則不予處理。在兩張想同圖片用三根以?xún)?nèi)的直線能連在一起,就可以消去;否則,不予處理。連連看游戲其結(jié)構(gòu)圖如下:</p><p>
41、<b> 5.2 詳細(xì)設(shè)計(jì)</b></p><p> 5.2.1 游戲界面設(shè)計(jì) </p><p> 游戲界面的設(shè)計(jì)對(duì)于編程人員來(lái)說(shuō),可能算是最簡(jiǎn)單的問(wèn)題,但是,對(duì)于大多數(shù)玩家來(lái)說(shuō),他可能不會(huì)關(guān)心你是怎么實(shí)現(xiàn)的,玩家一開(kāi)始選擇玩這個(gè)游戲,他可能更加關(guān)心的界面是否美觀,是不是能讓他有耳目一新的感覺(jué)。在本次課程設(shè)計(jì)中,主要用 Java中swing界面編程來(lái)實(shí)現(xiàn)[5]。
42、</p><p> 5.2.2鼠標(biāo)點(diǎn)擊控制</p><p> 鼠標(biāo)點(diǎn)擊控制主要表現(xiàn)在游戲的功能控制上,外部的鼠標(biāo)、鍵盤(pán)對(duì)游戲操作的相應(yīng),連連看游戲主要是鼠標(biāo)點(diǎn)擊對(duì)游戲操作的作用,例如:鼠標(biāo)單擊開(kāi)始、結(jié)束選項(xiàng)對(duì)游戲的控制[6]。</p><p> 鼠標(biāo)點(diǎn)擊退出選項(xiàng)退出游戲,程序中由系統(tǒng)觸發(fā)了public void actionPerformed(ActionEv
43、ent e)鼠標(biāo)響應(yīng),添加系統(tǒng)內(nèi)置代碼 System.exit(0);,點(diǎn)擊觸發(fā),退出游戲。</p><p> 鼠標(biāo)點(diǎn)擊選擇游戲區(qū)的圖片響應(yīng)則交予Java系統(tǒng)自動(dò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è)計(jì)</p><p> 連連看游戲的所要求的是:兩個(gè)目標(biāo)之間連接線的折點(diǎn)不超過(guò)兩個(gè)。(連接線由x軸和y軸的平行線組成) 那
46、么分析一下連接的情況可以看到,一般分直線連接、一個(gè)折點(diǎn)、兩個(gè)折點(diǎn)三種情況(其理論在第二章已詳述)。</p><p> 其滿足游戲規(guī)則:那么目標(biāo)圖片將順利的消除。否則,繼續(xù)游戲。</p><p> 5.2.4 游戲詳細(xì)過(guò)程流程圖 </p><p> 如圖5.2.4所示:</p><p> 圖5.2.4 游戲過(guò)程流程圖</p>
47、;<p><b> 六、 實(shí)現(xiàn)</b></p><p><b> 6.1 游戲界面</b></p><p> 1、游戲初始界面 如下圖6.1所示</p><p> 游戲界面設(shè)計(jì)比較簡(jiǎn)潔,用swing的JFrame,以及一個(gè)button控件。其已經(jīng)消除的圖片將button隱藏。具體界面如圖6.1所示:&
48、lt;/p><p> 圖6.1 基本界面圖</p><p> 其部分實(shí)現(xiàn)代碼如下:</p><p> this.setSize(1200, 800); //將窗體的大小設(shè)定</p><p> this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
49、 //退出游戲時(shí)關(guān)掉進(jì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; // 退出,重列,重新開(kāi)始按鈕</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("無(wú)聊連連看");</p><p> thisContainer = mainFrame.getContentPane(); //得到內(nèi)存中窗體內(nèi)容</p><p> thisContainer.setLayout(new BorderLayout()); //實(shí)現(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> * 畫(huà)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、游戲隨機(jī)布局</b></p><p><b> /**</b></p><p><b> * 隨機(jī)布局</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對(duì)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說(shuō)明這個(gè)空格有了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> 獲取用戶點(diǎn)擊兩張圖片的位置,并傳入xiaochu()函數(shù)進(jìn)行判斷</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. 消除圖片時(shí)要判斷是否可達(dá),即優(yōu)化判斷是否可以消除的算法是本程序的靈魂,連連看游戲分為三種消去方式,分別為“0折型”,“一折型”,“兩折型”,由圖4-5可以看出,如果兩點(diǎn)間只需要一條直線能夠連接起來(lái),則
87、A、B兩點(diǎn)的橫坐標(biāo)或縱坐標(biāo)必定相同,有了這個(gè)條件,我們判斷 A、B兩點(diǎn)是否只需要一條直接連接就簡(jiǎn)單了許多。</p><p><b> 其分析如下:</b></p><p><b> 1.“0折型”:</b></p><p> 水平消去或者垂直消去,如果兩個(gè)點(diǎn)擊的兩個(gè)圖片相同,并且它們?cè)谕凰交虼怪狈较蛏?,即返回H_
88、LINE的畫(huà)線類(lèi)型,代碼如下:</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)點(diǎn)擊的兩個(gè)點(diǎn)相同,它們不在同一水平或垂直方向上,并且它們要用</p><p> 兩條直線相連,就返回ONE_C_LINE,代碼如:</p><p> for (j = 0; j < 10; j++) {</p><p&
90、gt; if (game_grid[row1][j] == 0) {// 判斷和第一個(gè)按鈕同行的哪個(gè)按鈕為空</p><p> if (column2 > j) {//第二個(gè)按鈕在空按鈕右邊</p><p> for (i = column2 - 1; i >= j; i--) { //檢測(cè)從第二個(gè)按鈕橫向左邊到空格所在列為止是否全是空格</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();//進(jìn)入第二次驗(yàn)證,也就是從第一個(gè)按鈕到它同行的空格之間的空格判斷</p><p&
93、gt;<b> }</b></p><p><b> }</b></p><p> if (column2 < j) {// 第二個(gè)按鈕在空按鈕左邊</p><p> for (i = column2 + 1; i <= j; i++) {//檢測(cè)從第二個(gè)按鈕橫向右邊到空格所在列為止是否全是空格<
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) {//第二個(gè)按鈕和空按鈕同列</p><p> line_check();</p><p><b> }</b></p><p><b> }</b
97、></p><p> 3.“兩折型”,當(dāng)點(diǎn)擊的兩個(gè)點(diǎn)相同,它們不在同一水平或垂直方向上,并且它們要用三條直線相連,就返回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++) {//從空按鈕豎向到第二個(gè)按鈕所在行是否有按鈕</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> //沒(méi)有按鈕,說(shuō)明這條路經(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è)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程.</p><p> 回顧此次連連看游戲設(shè)計(jì),從理論到實(shí)踐,學(xué)到了很多很多的東西的同時(shí)也意識(shí)到不足,由于以前對(duì)Java的swing編程不是很熟悉,所以在寫(xiě)代碼時(shí)遇到了一些問(wèn)題。如:游戲界面的布局在重列的
107、時(shí)候其button有可能顯示不完全,</p><p> 連連看其判斷路徑的算法開(kāi)始編寫(xiě)時(shí)有漏洞等。</p><p> 這次連連看設(shè)計(jì)實(shí)現(xiàn)了:游戲界面的窗體實(shí)現(xiàn),連連看消除路徑的判斷算法,button界面布局,button的背景圖片set寫(xiě)入,相關(guān)游戲區(qū)總體布局以及玩家的人機(jī)互動(dòng)性操作。</p><p> 這個(gè)連連看游戲還諸多不足之處,如:沒(méi)有實(shí)現(xiàn)玩家排行榜設(shè)計(jì)
108、,游戲內(nèi)容設(shè)計(jì),趣味性不足等。關(guān)于后續(xù)改進(jìn)方案如下:實(shí)現(xiàn)已有不足之處,以及根據(jù)自己的技術(shù)去實(shí)現(xiàn)連連看局域網(wǎng)對(duì)戰(zhàn),玩家互動(dòng)性操作等。</p><p> 總體上這次連連看游戲設(shè)計(jì)讓我懂得:實(shí)踐才是真理。而你所想到的并不一定能夠完全實(shí)現(xiàn)。</p><p><b> 八、參考資料</b></p><p> [1] 朱福喜. J
109、ava語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì)[M], 武漢: 武漢大學(xué)出版社,2006:123-130 </p><p> [2] 印旻. Java語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì)[M],北京: 清華大學(xué)出版社,2005.4: 58-72 </p><p> [3] 朱站立、沈偉. Java程序設(shè)計(jì)實(shí)用教程[M]
110、, 北京: 電子工業(yè)出版社, 2007.5: 82-95 </p><p> [4] 葉核亞. Java 2程序設(shè)計(jì)實(shí)用教程[M], 北京: 電子工業(yè)出版 ,2008:35-48</p><p> [5] 艾力江. Java 2 范例入
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計(jì)--連連看游戲設(shè)計(jì)
- java連連看課程設(shè)計(jì)
- java連連看課程設(shè)計(jì)
- java課程設(shè)計(jì)—連連看
- 課程設(shè)計(jì)報(bào)告----java實(shí)現(xiàn)游戲連連看
- java連連看課程設(shè)計(jì)報(bào)告
- java連連看課程設(shè)計(jì)報(bào)告
- 基于java連連看游戲
- 基于java的連連看游戲設(shè)計(jì)
- android課程設(shè)計(jì)連連看小游戲
- 連連看課程設(shè)計(jì)
- 連連看課程設(shè)計(jì)
- java課程設(shè)計(jì)說(shuō)明書(shū)---連連看
- 連連看java小游戲畢業(yè)設(shè)計(jì)論文
- 基于java的連連看游戲設(shè)計(jì)與實(shí)現(xiàn)
- 基于java的連連看游戲設(shè)計(jì)與實(shí)現(xiàn)
- 連連看課程設(shè)計(jì)報(bào)告
- 基于java的連連看游戲設(shè)計(jì)畢業(yè)論文
- 基于java的連連看游戲設(shè)計(jì)畢業(yè)論文
- 基于java的連連看游戲軟件設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論