版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 本科生畢業(yè)論文</b></p><p> 題 目: 掃雷游戲軟件設(shè)計(jì)與實(shí)現(xiàn) </p><p><b> 年 級(jí): </b></p><p> 專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)</p><p><b> 學(xué)
2、 號(hào): </b></p><p><b> 姓 名: </b></p><p><b> 指導(dǎo)教師: </b></p><p> 年 月 日</p><p><b> 目 錄</b></p><p> 1引言
3、…………………………………………………………………… </p><p> 1.1 課題背景及意義……………………………………………………</p><p> 1.2開(kāi)發(fā)工具的選用及介紹……………………………………………</p><p> 2游戲軟件的總體分析與設(shè)計(jì)…………………………………………</p><p> 2.1軟件功能需求分析
4、…………………………………………………</p><p> 2.2 軟件界面設(shè)計(jì)………………………………………………………</p><p> 2.3算法流程設(shè)計(jì)………………………………………………………</p><p> 3游戲軟件的詳細(xì)設(shè)計(jì)…………………………………………………</p><p> 3.1游戲初始化……………………………
5、……………………………</p><p> 3.2雷區(qū)的布置…………………………………………………………</p><p> 3.3游戲中主要功能模塊實(shí)現(xiàn)…………………………………………</p><p> 3.3.1底層邏輯模塊……………………………………………………</p><p> 3.3.1.1 游戲邏輯模塊……………………………
6、…………………</p><p> 3.3.1.2 通信模塊……………………………………………………</p><p> 3.3.2程序設(shè)計(jì)的界面實(shí)現(xiàn)功能模塊…………………………………</p><p> 4游戲軟件測(cè)試…………………………………………………………</p><p><b> 結(jié) 論</b><
7、;/p><p><b> 參考文獻(xiàn)</b></p><p><b> 1引言</b></p><p> 1.1 課題背景及意義</p><p> 隨著不斷發(fā)展的社會(huì),科學(xué)也一步步的提升,而計(jì)算機(jī)也成為了當(dāng)今社會(huì)不可或缺的一部分,今天,人們用計(jì)算機(jī)工作、通訊、聊天、視頻、游戲、娛樂(lè)。我們每天都在使
8、用著計(jì)算機(jī)。在如此快速的社會(huì)里,每一個(gè)人都有著重大的壓力。而此刻游戲也就成了我們沒(méi)一個(gè)人用于釋放壓力的首選。 </p><p> 近年來(lái),隨著網(wǎng)絡(luò)的發(fā)展,游戲便成為了許多人關(guān)注的焦點(diǎn)。與傳統(tǒng)的影音產(chǎn)業(yè)一樣,游戲產(chǎn)業(yè)也是娛樂(lè)行業(yè)的一個(gè)重要組成部分,基于數(shù)字化的網(wǎng)絡(luò)游戲更讓人們找到了前所未有的感受,并已經(jīng)成為全球互聯(lián)產(chǎn)業(yè)的熱點(diǎn)。</p><p> 就在我們所熟悉的windows7系統(tǒng)中就攜
9、帶了不少這樣的游戲。掃雷游戲就是Windows操作系統(tǒng)自帶的一款小游戲,在過(guò)去的幾年里,Windows操作系統(tǒng)歷經(jīng)數(shù)次換代更新,變得越來(lái)越龐大、復(fù)雜,功能也越來(lái)越強(qiáng)大,但是這款小游戲依然保持原來(lái)的容貌,可見(jiàn)這款小游戲受到越來(lái)越多人的喜愛(ài)。不過(guò)還是有很多人對(duì)這款游戲不太了解。</p><p> 本次的畢業(yè)設(shè)計(jì)我將利用eclipse 3.4.2作為開(kāi)發(fā)工具,開(kāi)發(fā)一款類似的“掃雷游戲”。從而對(duì)這款游戲能夠有進(jìn)一步的了
10、解,熟悉此游戲的后臺(tái)運(yùn)行情況。并且此次畢業(yè)設(shè)計(jì)能將書本上所學(xué)的理論知識(shí)與實(shí)際相結(jié)合,同時(shí)也是對(duì)所學(xué)知識(shí)的一種檢查,希望通過(guò)本次的畢業(yè)設(shè)計(jì)能使自己在程序的開(kāi)發(fā)和設(shè)計(jì)上有新的認(rèn)識(shí)和提高。本次畢業(yè)設(shè)計(jì)既鍛煉了我們的實(shí)際動(dòng)手能力,又在老師的指導(dǎo)下進(jìn)行了一次模擬實(shí)際產(chǎn)品的開(kāi)發(fā),對(duì)于我們以后工作能力的培養(yǎng)具有重要意義。</p><p> 通過(guò)研究Windows操作系統(tǒng)自帶的掃雷游戲,我們可以發(fā)現(xiàn)在這個(gè)游戲中主要有以下幾個(gè)關(guān)
11、鍵的地方:</p><p> 1.初始化問(wèn)題,關(guān)于產(chǎn)生雷數(shù)的問(wèn)題,即隨機(jī)產(chǎn)生本局游戲中雷的總數(shù),游戲的每一個(gè)級(jí)別產(chǎn)生的雷數(shù)不同,如何做到在不同的級(jí)別中產(chǎn)生不同的雷數(shù)。關(guān)于類的分布問(wèn)題,在游戲中雷的分布對(duì)于每一個(gè)小區(qū)域是不同的,如何獲取周圍地區(qū)分布的雷數(shù),在雷隨機(jī)分布之后,如何獲取每個(gè)區(qū)域周圍累的個(gè)數(shù)。</p><p> 2.對(duì)鼠標(biāo)事件的處理問(wèn)題,既在游戲過(guò)程中對(duì)鼠標(biāo)事件應(yīng)如何做出反應(yīng)。
12、當(dāng)單擊鼠標(biāo)左鍵時(shí),軟件對(duì)該事件的處理,是雷的處理和不是雷的處理。當(dāng)單擊鼠標(biāo)右鍵時(shí),系統(tǒng)做出的處理。</p><p> 3.游戲中的另一個(gè)難點(diǎn)是,在游戲過(guò)程中,左右鍵同時(shí)點(diǎn)擊數(shù)字,會(huì)有一個(gè)提示,這里的做法是如果是數(shù)字的格子,監(jiān)聽(tīng)到左右鍵同時(shí)點(diǎn)擊數(shù)字事件,查找這個(gè)格子周圍的8個(gè)格子的紅旗數(shù),如果周圍的紅旗數(shù)正好是格子上的數(shù)字,那么就將除紅旗之外的所有內(nèi)容都顯示出來(lái)。</p><p> 4.
13、游戲規(guī)則、勝負(fù)判斷方法,關(guān)于時(shí)間的計(jì)算。</p><p> 經(jīng)過(guò)四年的大學(xué)學(xué)習(xí),我對(duì)程序開(kāi)發(fā)和設(shè)計(jì)、JAVA語(yǔ)言等幾種語(yǔ)言及eclipse等多個(gè)開(kāi)發(fā)平臺(tái)已經(jīng)有了一定的了解與認(rèn)知,本次的畢業(yè)設(shè)計(jì)便是將書本上所學(xué)的理論知識(shí)與實(shí)際相結(jié)合,同時(shí)也是對(duì)所學(xué)知識(shí)的一種檢查,希望通過(guò)本次的畢業(yè)設(shè)計(jì)使自己在程序的開(kāi)發(fā)和設(shè)計(jì)上有新的認(rèn)識(shí)并能有所提高。</p><p> 1.2開(kāi)發(fā)工具的選用及介紹<
14、/p><p> 通過(guò)在大學(xué)的學(xué)習(xí),對(duì)多種語(yǔ)言及多個(gè)程序開(kāi)發(fā)平臺(tái)、軟件有了初步的了解,例如:C語(yǔ)言、C++、VB、JAVA、HTML等。VC++、Visual Basic 、Microsoft.NET、Eclipse SDK等軟件。</p><p> 而eclipse 是一個(gè)被人們熟知的優(yōu)秀Java集成開(kāi)發(fā)環(huán)境(IDE),eclipse是眾多Java程序員的首選。和NetBeans一樣,ec
15、lipse也是一個(gè)完全免費(fèi)的軟件,而且還是開(kāi)源的。同時(shí),eclipse不需要安裝,解壓出來(lái)即可使用,相當(dāng)方便。故此選擇Eclipse作為此次畢設(shè)所用的開(kāi)發(fā)工具。</p><p> 但Eclipse是使用Java語(yǔ)言編寫的。所以要運(yùn)行eclipse必須在機(jī)器中安裝JDK,遺憾的是,eclipse官方?jīng)]有提供簡(jiǎn)體中文版的下載,只有英文版的,不過(guò),經(jīng)常使用eclipse習(xí)慣了之后就不會(huì)過(guò)于依賴于軟件界面的語(yǔ)言了。Ec
16、lipse不僅能開(kāi)發(fā)Java程序,還能開(kāi)發(fā)JSP,C++等程序。Eclipse官方將軟件分成了普通Java版,JEE版,C++版。每個(gè)版本都針對(duì)相應(yīng)的語(yǔ)言各司其職,其中JEE版包括Java的全部功能。</p><p> Java Development Kit (JDK) 是Sun公司針對(duì)Java開(kāi)發(fā)員的軟件開(kāi)發(fā)工具包。自從Java推出以來(lái),JDK已經(jīng)成為使用最廣泛的Java SDK(Software deve
17、lopment kit)。</p><p> Eclipse 是一個(gè)開(kāi)放源代碼的、基于 Java 的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 Java 開(kāi)發(fā)工具(Java Development Tools,JDT)。 Eclipse最初是由IBM公司開(kāi)發(fā)的替代商業(yè)軟件Visual Age for Java的下一
18、代IDE開(kāi)發(fā)環(huán)境,2001年11月貢獻(xiàn)給開(kāi)源社區(qū),現(xiàn)在它由非營(yíng)利軟件供應(yīng)商聯(lián)盟Eclipse基金會(huì)(Eclipse Foundation)管理。 2003年,Eclipse 3.0選擇OSGi服務(wù)平臺(tái)規(guī)范為運(yùn)行時(shí)架構(gòu)。 2007年6月,穩(wěn)定版3.3發(fā)布。2008年6月發(fā)布代號(hào)為Ganymede的3.4版。2009年7月發(fā)布代號(hào)為GALILEO的3.5版。Eclipse是著名的跨平臺(tái)的自由集成開(kāi)發(fā)環(huán)境(IDE)。最初主要用來(lái)Java語(yǔ)言開(kāi)
19、發(fā),但是目前亦有人通過(guò)插件使其作為其他計(jì)算機(jī)語(yǔ)言比如C++和Python的開(kāi)發(fā)工具。Eclipse的本身只是一個(gè)框架平臺(tái),但是眾多插件的支持使得Eclipse擁有其他功能相對(duì)固定的IDE軟件很</p><p> 基于 Eclipse 的應(yīng)用程序的突出例子是 IBM 的 WebSphere Studio Workbench,它構(gòu)成了 IBM Java 開(kāi)發(fā)工具系列的基礎(chǔ)。例如,WebSphere Studio A
20、pplication Developer 添加了對(duì) JSP、servlet、EJB、XML、Web 服務(wù)和數(shù)據(jù)庫(kù)訪問(wèn)的支持。 Eclipse的主要組成Eclipse是一個(gè)開(kāi)放源代碼的軟件開(kāi)發(fā)項(xiàng)目,專注于為高度集成的工具開(kāi)發(fā)提供一個(gè)全功能的、具有商業(yè)品質(zhì)的工業(yè)平臺(tái)。它主要由Eclipse項(xiàng)目、Eclipse工具項(xiàng)目和Eclipse技術(shù)項(xiàng)目三個(gè)項(xiàng)目組成,具體包括四個(gè)部分組成——Eclipse Platform、JDT、CDT和PDE.JDT
21、支持Java開(kāi)發(fā)、CDT支持C開(kāi)發(fā)、PDE用來(lái)支持插件開(kāi)發(fā),Eclipse Platform則是一個(gè)開(kāi)放的可擴(kuò)展IDE,提供了一個(gè)通用的開(kāi)發(fā)平臺(tái)。它提供建造塊和構(gòu)造并運(yùn)行集成軟件開(kāi)發(fā)工具的基礎(chǔ)。Eclipse Platform允許工具建造者獨(dú)立開(kāi)發(fā)與他人工具無(wú)縫集成的工具從而無(wú)須分辨一個(gè)工具功能在哪里結(jié)束,而另一個(gè)工具功能在哪里開(kāi)始。Eclipse SDK</p><p> 2.游戲軟件的總體分析與設(shè)計(jì)<
22、/p><p> 相信大多數(shù)使用Windows操作系統(tǒng)的使用者,對(duì)這款游戲都不陌生。這款游戲不止操作簡(jiǎn)單,規(guī)則也不難,再加上游戲速度的控制機(jī)制得宜,讓整個(gè)游戲在操作過(guò)程中充滿了快樂(lè)與緊張的氣氛。除了游戲當(dāng)中能帶給使用者快樂(lè)之外,游戲的設(shè)計(jì)內(nèi)容無(wú)形中也不斷訓(xùn)練使用者的邏輯思考能力,對(duì)于依靠高度腦力工作的現(xiàn)代人,都可以通過(guò)這個(gè)游戲,不時(shí)的檢驗(yàn)一下自己,所以我們不難發(fā)現(xiàn),在各種可攜帶的電子產(chǎn)品上都有這款游戲的蹤影。<
23、/p><p> 2.1軟件功能需求分析</p><p> 單機(jī)游戲的開(kāi)發(fā)有很大的發(fā)展前途,而掃雷游戲則是建立在此基礎(chǔ)上的。在設(shè)計(jì)之前,我們先來(lái)了解這款游戲的規(guī)則。</p><p> 掃雷就是要把所有非地雷的格子揭開(kāi)即勝利;踩到地雷格子就算失敗。</p><p> 游戲主區(qū)域由很多個(gè)方格組成。使用鼠標(biāo)左鍵隨機(jī)點(diǎn)擊一個(gè)方格,方格即被打開(kāi)并顯示
24、出方格中的數(shù)字;方格中數(shù)字則表示其周圍的8個(gè)方格隱藏了幾顆雷;如果點(diǎn)開(kāi)的格子為空白格,即其周圍有0顆雷,則其周圍格子自動(dòng)打開(kāi);如果其周圍還有空白格,則會(huì)引發(fā)連鎖反應(yīng);在你認(rèn)為有雷的格子上,點(diǎn)擊右鍵即可標(biāo)記雷;如果一個(gè)已打開(kāi)格子周圍所有的雷已經(jīng)正確標(biāo)出,則可以在此格上同時(shí)點(diǎn)擊鼠標(biāo)左右鍵以打開(kāi)其周圍剩余的無(wú)雷格。 </p><p> 1代表1的上下左右及斜角合計(jì)有一顆雷,依次輪推,2則有2顆,3則有3顆..<
25、/p><p> 在確實(shí)是炸彈的方格上點(diǎn)了標(biāo)記,就安全了,不是炸彈的被點(diǎn)了標(biāo)記,后面會(huì)被炸死的。問(wèn)號(hào)就先不確定這里有沒(méi)有炸彈,不會(huì)存在點(diǎn)錯(cuò)了被炸死的狀況。有個(gè)小竅門,在數(shù)字旁同時(shí)點(diǎn)左鍵和右鍵可以排雷。左鍵點(diǎn)開(kāi),右鍵標(biāo)記雷,同時(shí)左右鍵點(diǎn)數(shù)字可以判斷周圍的雷是否已經(jīng)全部標(biāo)出。</p><p> 通過(guò)單擊即可挖開(kāi)方塊。如果挖開(kāi)的是地雷,則您輸?shù)粲螒?,如果方塊上出現(xiàn)數(shù)字,則表示在其周圍的八個(gè)方塊中共
26、有多少顆地雷。要標(biāo)記您認(rèn)為可能有地雷的方塊,請(qǐng)右鍵單擊它。 </p><p> 游戲區(qū)包括雷區(qū)、地雷計(jì)數(shù)器和計(jì)時(shí)器。數(shù)字就是這個(gè)方塊周圍的8個(gè)方塊里有的雷的數(shù)量,問(wèn)號(hào)是自己弄上去的,可以的地方可以弄個(gè)問(wèn)號(hào),標(biāo)記就是確定那里有雷了。</p><p> 在不掀開(kāi)任何藏有地雷的方塊情況下,以最快的速度找出所有的地雷。如果在掀開(kāi)方塊的過(guò)程中,不小心翻開(kāi)(踩到)藏有地雷的方塊,則宣告失敗(游戲結(jié)
27、束),惟有將所有不含地雷的方塊掀開(kāi),游戲才算成功。</p><p> 游戲的操作方法主要以鼠標(biāo)為主,當(dāng)鼠標(biāo)指針對(duì)準(zhǔn)未翻開(kāi)的方塊按下左鍵時(shí)即表示翻開(kāi)方塊,當(dāng)鼠標(biāo)指針對(duì)準(zhǔn)未翻開(kāi)的方塊按下右鍵時(shí)即表示標(biāo)示或疑示地雷,反復(fù)按下右鍵則方塊會(huì)以未標(biāo)示→疑似→取消疑似三者關(guān)系不斷循環(huán)。游戲者可以通過(guò)地雷區(qū)內(nèi)的數(shù)字提示了解以數(shù)字為中心的其周邊八個(gè)方格內(nèi)所含的地雷數(shù),假若翻開(kāi)的方塊顯示數(shù)字“3”,則表示以其為中心的周邊方塊內(nèi)藏有
28、3個(gè)地雷。</p><p> 當(dāng)按下的方塊不是地雷,且周邊八個(gè)方塊也都沒(méi)有地雷時(shí),方塊會(huì)以被翻開(kāi)方塊的八個(gè)方向?qū)⒖瞻追綁K翻開(kāi)。</p><p> 2.2 軟件界面設(shè)計(jì)</p><p> 本次設(shè)計(jì)我將主要運(yùn)用java語(yǔ)言來(lái)完成。Java語(yǔ)言是一種跨平臺(tái),適合于分布式計(jì)算環(huán)境的面向?qū)ο缶幊陶Z(yǔ)言,用Java寫的應(yīng)用程序不用修改就可在不同的軟硬件平臺(tái)上運(yùn)行。</
29、p><p><b> JAVA的圖形界面</b></p><p> 圖形界面簡(jiǎn)稱GUI,是用圖形的方式,借助菜單、按紐等標(biāo)準(zhǔn)界面元素和鼠標(biāo)操作,幫助用戶方便地想計(jì)算機(jī)系統(tǒng)發(fā)出指令、啟動(dòng)操作,并將系統(tǒng)的運(yùn)行結(jié)果同樣以圖形方式顯示給用戶的技術(shù)。JAVA的圖形界面技術(shù)既為使用java.awt包來(lái)創(chuàng)建圖形界面的方法,包括AWT組件、窗口和菜單設(shè)計(jì)、布局管理器以及繪圖操作等。&
30、lt;/p><p> public void initGUI(){</p><p> p3=new JPanel();</p><p><b> b=bon;</b></p><p> JMenuBar menuBar=new JMenuBar();</p><p> JMenu menu1
31、=new JMenu("游戲");</p><p> JMenu menu2=new JMenu("幫助");</p><p> JMenuItem mi1=new JMenuItem("初級(jí)");</p><p> JMenuItem mi2 = new JMenuItem("中級(jí)&quo
32、t;);</p><p> JMenuItem mi3 =new JMenuItem("高級(jí)");</p><p> mi1.addActionListener(this);</p><p> menu1.add(mi1);</p><p> mi2.addActionListener(this);</p&g
33、t;<p> menu1.add(mi2);</p><p> mi3.addActionListener(this);</p><p> menu1.add(mi3);</p><p> menuBar.add(menu1);</p><p> menuBar.add(menu2);</p><p
34、> p3.add(menuBar);</p><p> b1=new JLabel(bon+"");</p><p> a1=new int[bon];</p><p> btn =new JButton("開(kāi)始");</p><p> btn.addActionListener(thi
35、s);</p><p> b2=new JLabel("0");</p><p> b3=new JLabel("");</p><p> btns=new JButton[row*col];</p><p> p=new JPanel();</p><p> p.se
36、tLayout(new BorderLayout());</p><p> contentPane.add(p);</p><p> p.add(p3,BorderLayout.NORTH);</p><p> //combo=new JComboBox(new Object[]{"初級(jí)","中級(jí)","高級(jí)&q
37、uot;} );</p><p><b> //加監(jiān)聽(tīng)</b></p><p> /*combo.addItemListener(new ItemListener(){</p><p><b> }});*/</b></p><p> p1=new JPanel();</p&g
38、t;<p><b> //在那個(gè)位置</b></p><p> //(( FlowLayout)p1.getLayout()).setAlignment( FlowLayout.RIGHT);</p><p> p1.add(b1);</p><p> p1.add(btn);</p><p>
39、p1.add(b2);</p><p> p1.add(b3);</p><p> p.add(p3,BorderLayout.NORTH);</p><p> p.add(p1,BorderLayout.CENTER);</p><p> p2=new JPanel();</p><p> p2.setLa
40、yout(new GridLayout(row,col,0,0));</p><p> for(int i=0;i<row*col;i++){</p><p> btns[i]=new JButton("");</p><p> btns[i].setMargin(new Insets(0,0,0,0));</p>&l
41、t;p> btns[i].setFont(new Font(null,Font.BOLD,25));</p><p> btns[i].addActionListener(this);</p><p> btns[i].addMouseListener(new NormoreMouseEvent());</p><p> p2.add(btns[i])
42、;</p><p><b> }</b></p><p> contentPane.add(p,BorderLayout.NORTH);</p><p> contentPane.add(p2,BorderLayout.CENTER);</p><p><b> }</b></p&
43、gt;<p><b> AWT概述</b></p><p> AWT既抽象窗口工具集,用于圖形用戶界面的開(kāi)發(fā)。AWT的功能包括以下方面:</p><p> (1)豐富的圖形界面組件。</p><p> ?。?)強(qiáng)大的事件處理模型圖形和圖形工具,包括形狀、顏色和字體。</p><p> (3)布局管理
44、器,可以進(jìn)行靈活的的窗口布局,設(shè)計(jì)特定窗口的尺寸和和屏幕分辨率。</p><p> ?。?)無(wú)關(guān)數(shù)據(jù)傳送類,可以通過(guò)本地平臺(tái)的剪貼板來(lái)進(jìn)行剪切和粘貼操作。</p><p> (5)打印和無(wú)鼠標(biāo)操作。</p><p> Java.awt是java基本包中最大的一個(gè),其中定義了所有的GUI組件類,以及其他用于構(gòu)造圖形界面的類。</p><p>
45、;<b> AWT基本組件</b></p><p> (1)標(biāo)簽組件(Label)</p><p> 標(biāo)簽組件顯示的是靜態(tài)文本,在通常情況下是不能編輯的,能起到提示的作用</p><p> Label組件有三種構(gòu)造函數(shù):</p><p> Label(): 創(chuàng)建空的標(biāo)簽</p><p>
46、 Label(String):創(chuàng)建一個(gè)帶初始字符串的標(biāo)簽。</p><p> Label(String,int):創(chuàng)建一個(gè)帶初始字符串及指定對(duì)齊方式的標(biāo)簽。</p><p><b> (2)文本域</b></p><p> 文本域一般用來(lái)讓用戶輸入姓名、信用卡號(hào)等這樣的信息,它是一個(gè)能夠接收用戶的鍵盤輸入的小塊區(qū)域。TextField(
47、):創(chuàng)建空的文本域</p><p> ?。?)按鈕(Button)</p><p> 幾乎所有的交互式程序中都會(huì)有按紐,它是一種交互能力強(qiáng)且交互方便的控件,這個(gè)控件提供了“按下并動(dòng)作”的基本用戶界面。</p><p><b> 按紐的構(gòu)造方法有:</b></p><p> Button():建立一個(gè)沒(méi)有標(biāo)示字符串的
48、新按紐類對(duì)象。</p><p> Button(String Label):建立一個(gè)標(biāo)示字符串為L(zhǎng)abel的新按紐類的對(duì)象</p><p> ?。?)畫板組件(Panel)</p><p> 我們?cè)诮缑嫔习才鸥鞣N組件時(shí),有時(shí)會(huì)需要將組件成組放置,這時(shí)就可以使用面板組件。Panel是最簡(jiǎn)單的容器組件,本身是一個(gè)矩形區(qū)域,可以在其中放入各種組件。但它僅僅是安排各種
49、組件的一種結(jié)構(gòu),需要最后加入到別的容器中才能實(shí)現(xiàn)GUI的功能。</p><p><b> 面板組件的創(chuàng)建</b></p><p> Panel():用默認(rèn)的布局管理器創(chuàng)建面板組件。</p><p> Panel(LayoutManager layout):用指定的布局管理器創(chuàng)建面板組件。</p><p> ?。?)
50、框架窗口組件(Frame)</p><p> Frame是獨(dú)立于瀏覽器的可獨(dú)立運(yùn)行的主窗口,通常用于進(jìn)行開(kāi)發(fā)桌面應(yīng)用程序。Frame擁有邊界和標(biāo)題欄設(shè)置,其大小可以進(jìn)行設(shè)置調(diào)整。Frame里面需要加入組件,也可以加入菜單,或在上面繪圖。</p><p><b> Frame的創(chuàng)建</b></p><p> Frame():創(chuàng)建一個(gè)沒(méi)有窗口
51、標(biāo)題的窗口框架。</p><p> Frame(String):創(chuàng)建一個(gè)指定窗口標(biāo)題的窗口框架。</p><p><b> ?。?)布局管理器</b></p><p> FlowLayout布局管理器</p><p> FlowLayout布局管理是一種最簡(jiǎn)單的布局管理方法,是Panel的默認(rèn)布局。它以流式的方式,
52、自左向右,自上而下地放置容器中的組件,即組件按每行先后自左向后放置,一行放不下再換行。</p><p> FlowLayout布局管理器的創(chuàng)建</p><p> FlowLayout():創(chuàng)建默認(rèn)的FlowLayout布局管理器</p><p> FlowLayout(int):以指定的對(duì)齊方式創(chuàng)建FlowLayout布局管理器。其中的參數(shù)有FlowLayou
53、t.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER</p><p> FlowLayout(int,int,int):以指定的對(duì)齊方式及間距創(chuàng)建FlowLayout布局管理器。其中第一個(gè)參數(shù)為對(duì)齊方式,第二個(gè)參數(shù)為組件間間距,第三個(gè)參數(shù)為列間距。</p><p><b> ?。?)事件處理</b></p><p&g
54、t; 事件處理是一個(gè)接受事件、解釋事件并處理用戶交互的方法。</p><p> 事件處理有三個(gè)要素:</p><p> ?、偈录?事件源是一個(gè)時(shí)間的產(chǎn)生者,如按牛、窗口及文本域等。</p><p> ?、谑录愋?JAVA中所有的事件都封裝成一個(gè)類,這些事件類被集中在java.awt.exent包和java.swing.event包中,所有的事件類均繼承了AW
55、TEvent類和一個(gè)方法getSouce()方法,該方法返回發(fā)生事件的對(duì)象。</p><p> ③事件監(jiān)聽(tīng)器 不同的類型事件發(fā)生后,由事件監(jiān)聽(tīng)器接受事件并調(diào)用響應(yīng)的事件處理方法,所有的事件監(jiān)聽(tīng)器實(shí)際上都是一個(gè)java.awt.exent包中的借口,繼承了java.util.EventListener接口。不同的事件有不同的處理方法,</p><p><b> ?。?)鍵盤事件處
56、理</b></p><p> 該程序使用的是鍵盤監(jiān)聽(tīng)事件,鍵盤事件對(duì)應(yīng)的事件類是KeyEvent類,使用的該類的方法是getKeyCode()獲得按下或釋放的鍵代碼getKeyText()獲得按下或釋放的鍵的字符串。</p><p> 鍵盤事件對(duì)應(yīng)的事件監(jiān)聽(tīng)器為:KeyListener或KeyAdapter</p><p> 實(shí)現(xiàn)鍵盤事件的操作步驟
57、是:</p><p> 第一步,注冊(cè)KeyListener監(jiān)聽(tīng)器addKeyListener().當(dāng)事件源所在的類已經(jīng)實(shí)現(xiàn)KeyListener的接口時(shí),參數(shù)可用this,否則需創(chuàng)建或繼承一個(gè)KeyListener</p><p> 第二步,實(shí)現(xiàn)KeyListener接口的所有方法,即KeyPressed(KeyEvent e)、KeyReleased(KeyEvent e)、KeyT
58、yped(MouseEvent e)。</p><p><b> 2.3算法流程設(shè)計(jì)</b></p><p> 流程規(guī)劃大致上可以分為三個(gè)部分,分別為:畫面初始、游戲者按下第一個(gè)方塊和為非地雷方塊時(shí)展開(kāi)。</p><p> 畫面初始時(shí),以游戲者最后一次設(shè)定的地雷區(qū)大小為范圍畫出地雷區(qū),但此時(shí)并未產(chǎn)生地雷。當(dāng)游戲者按下第一個(gè)方塊時(shí)產(chǎn)生地雷資
59、料并啟動(dòng)定時(shí)器,為何在游戲者按下第一個(gè)方塊才產(chǎn)生地雷資料呢?其主要的用意在于不要讓游戲者第一次就踩到地雷,這樣在某種程度上可以提高游戲者游玩的氣氛。接著就是如何判斷按下的方塊是非地雷時(shí)的處理,這也是整個(gè)游戲的技術(shù)核心,我們可以通過(guò)遞歸的觀念來(lái)檢查周邊的方塊是否含有地雷及是否繼續(xù)往外翻開(kāi)。</p><p><b> 否</b></p><p><b> 否
60、</b></p><p> 是 是</p><p><b> 否</b></p><p><b> 是</b></p><p><b> 否</b></p><p><b>
61、; 是</b></p><p><b> 是</b></p><p><b> 否</b></p><p> 3游戲軟件的詳細(xì)設(shè)計(jì)</p><p><b> 3.1游戲初始化</b></p><p> 當(dāng)玩家開(kāi)始游戲時(shí),游戲畫面如
62、圖:</p><p> 我們可以清楚的看到,游戲界面主要分為兩個(gè)主要部分:1. 計(jì)數(shù)及狀態(tài)區(qū);2.地雷區(qū)。</p><p> 1 設(shè)計(jì)整個(gè)游戲的結(jié)構(gòu),一般采用MVC作為整個(gè)游戲的結(jié)構(gòu),結(jié)構(gòu)清晰又容易理解。</p><p> 2 一般來(lái)說(shuō),做這些游戲的時(shí)候,我們先從底層的model開(kāi)始做起。在這里,model部分就是由兩張二維數(shù)組表組成,其中一張是mine,他上
63、面放的就是一些最底層的數(shù)據(jù),也就是說(shuō)雷得分布情況。另外一張表是界面表chess,就是記錄一些顯示給用戶的數(shù)據(jù)。</p><p> 3 然后要做的是對(duì)兩張表的初始化,這一步非常重要,對(duì)于第一張表mine的的初始化的方法為先隨機(jī)n個(gè)不重復(fù)的雷,分布到mine表中,然后,對(duì)雷周圍的格子進(jìn)行賦值。這里我用到方法為:遍歷所有的雷,將雷周圍的格子加一,這樣就能達(dá)到賦數(shù)值這個(gè)工作了。其中,這里有一個(gè)難點(diǎn),就是如何判定雷周圍的
64、八個(gè)格子,其實(shí)方法很多,但是大多代碼繁瑣,或者處理邊界困難。這里我用到的方法是,計(jì)算兩個(gè)格子之間的距離,如果與雷的距離為1或者根號(hào)2的話,就能確定該格子在雷的周圍。然后是對(duì)chess進(jìn)行初始化,chess就是界面表,也就是說(shuō),這里的數(shù)據(jù)是直接顯示給用戶看的。當(dāng)然,初始化部分就是直接將賦值為板,就是等待去掃雷的狀態(tài)。</p><p> 4 然后就是掃雷部分,就是點(diǎn)擊一個(gè)格子,利用jlabel的觸發(fā)器將格子坐標(biāo)傳送
65、到controller中去,controller中根據(jù)mine表判斷點(diǎn)擊的是什么,分三種情況,如果是雷,那就將底層的所有數(shù)據(jù)都賦到chess中,然后gameover。如果是數(shù)字,那就直接把數(shù)字賦值到chess中去。如果是0,那就非常麻煩了,這也是這個(gè)游戲中的一個(gè)難點(diǎn),玩過(guò)掃雷的同學(xué)應(yīng)該都知道,點(diǎn)擊0時(shí),會(huì)散開(kāi)周圍所有的0.我這邊的解決方法是,將點(diǎn)到的0的坐標(biāo)加到list里面去,在遍歷這個(gè)list,取出里面的坐標(biāo),查找他周圍的8個(gè)格子,如
66、果是0,且坐標(biāo)不與list中的坐標(biāo)重復(fù),就將第二次查找到的坐標(biāo)放到list里面,然后取list的下一個(gè)值,點(diǎn)擊這個(gè)點(diǎn),然后就是循環(huán)上面的語(yǔ)句。</p><p> 5 游戲中的另一個(gè)難點(diǎn)是,在游戲過(guò)程中,左右鍵同時(shí)點(diǎn)擊數(shù)字,會(huì)有一個(gè)提示,這里的做法是如果是數(shù)字的格子,監(jiān)聽(tīng)到左右鍵同時(shí)點(diǎn)擊數(shù)字事件,查找這個(gè)格子周圍的8個(gè)格子的紅旗數(shù),如果周圍的紅旗數(shù)正好是格子上的數(shù)字,那么就將除紅旗之外的所有內(nèi)容都顯示出來(lái)。<
67、;/p><p> 這樣,游戲界面的初始化工作就基本完成了,下面就是地雷的隨機(jī)產(chǎn)生。</p><p><b> 3.2雷區(qū)的布置</b></p><p> 當(dāng)游戲界面初始化完成后,這時(shí)在地雷區(qū)中并未產(chǎn)生地雷,只有當(dāng)玩家在地雷區(qū)中第一次點(diǎn)下左鍵后,才會(huì)在地雷區(qū)中隨機(jī)的布置當(dāng)前游戲難度下應(yīng)該產(chǎn)生的地雷總數(shù),其主要用意在于不讓玩家第一次就踩到地雷,這
68、樣在某種程度上可以提高玩家游戲的氣憤。具體實(shí)現(xiàn)如下所示:</p><p> for(int i=0;i<bon;i++)</p><p> { int p=1;</p><p> int m=(int)(Math.random()*row*col);</p><p> while(p==1){</p><
69、p><b> int l=1;</b></p><p><b> int j;</b></p><p> for( j=0;j<i&&l==1;j++){</p><p> if(a1[j]==m){</p><p> m=(int)(Math.random()
70、*row*col); </p><p><b> l=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> if(j==i){</b></p><p><b
71、> a1[i]=m;</b></p><p><b> p=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p
72、> b1.setText(bon+"");</p><p> b2.setText("0");</p><p> 3.3游戲中主要功能模塊實(shí)現(xiàn)</p><p> 本掃雷游戲的實(shí)現(xiàn),共分為五個(gè)模塊,分別表述為:</p><p> 模塊1 定義雷的類,鼠標(biāo)左鍵點(diǎn)擊不是雷,右鍵點(diǎn)擊是雷,數(shù)字
73、表示周圍有多少個(gè)雷,具體實(shí)現(xiàn)函數(shù)如下示:模塊2:雷的分布和雷的畫法具體實(shí)現(xiàn)函數(shù)的核心代碼如下示:</p><p> 模塊3 圖形界面的設(shè)計(jì),具體實(shí)現(xiàn)函數(shù)如下示:</p><p> 模塊4 游戲勝利和失敗的條件創(chuàng)建,當(dāng)所有雷都被找出時(shí)勝利,當(dāng)左鍵點(diǎn)擊到雷時(shí)失敗,具體實(shí)現(xiàn)函數(shù)如下示:</p><p> 模塊5 鍵盤事件的監(jiān)聽(tīng),使用Q鍵退出圖形界面,具體實(shí)現(xiàn)函數(shù)如下
74、示:</p><p> 3.3.1底層邏輯模塊</p><p> 3.3.1.1 游戲邏輯模塊</p><p> 3.3.1.2 通信模塊</p><p> 3.3.2程序設(shè)計(jì)的界面實(shí)現(xiàn)功能模塊</p><p><b> 4游戲軟件測(cè)試</b></p><p>
75、; 在程序代碼基本完成后,經(jīng)過(guò)不斷的調(diào)試與修改,最后測(cè)試本次所設(shè)計(jì)的掃雷游戲能夠正常運(yùn)行,在基本功能與畫面上與Windows自帶的掃雷游戲沒(méi)有太大差別,沒(méi)有出現(xiàn)明顯的錯(cuò)誤和漏洞,但是在一些細(xì)節(jié)方面仍然需要完善,比如在游戲中可以加入一些聲音的提示,在游戲完成和失敗的時(shí)候可以彈出一些小的Flash動(dòng)畫,還有就是可以加入一個(gè)掃雷英雄榜等等??偟膩?lái)說(shuō)本次設(shè)計(jì)在功能上已經(jīng)基本達(dá)到要求,其他細(xì)節(jié)方面有待以后完善。</p><p
76、><b> 結(jié) 論</b></p><p> 畢業(yè)設(shè)計(jì)是本科學(xué)習(xí)階段一次非常難得的理論與實(shí)際相結(jié)合的機(jī)會(huì),通過(guò)這次比較完整的一個(gè)程序的設(shè)計(jì),我擺脫了單純的理論知識(shí)學(xué)習(xí)狀態(tài),和實(shí)際設(shè)計(jì)的結(jié)合鍛煉了我的綜合運(yùn)用所學(xué)的專業(yè)基礎(chǔ)知識(shí),解決實(shí)際問(wèn)題的能力,同時(shí)也提高我查閱文獻(xiàn)資料、對(duì)程序整體的把握等其他能力水平,而且通過(guò)對(duì)整體的掌控,對(duì)局部的取舍,以及對(duì)細(xì)節(jié)的斟酌處理,都使我的能力得到
77、了鍛煉,經(jīng)驗(yàn)得到了豐富。這是我們都希望看到的也正是我們進(jìn)行畢業(yè)設(shè)計(jì)的目的所在。</p><p> 雖然畢業(yè)設(shè)計(jì)內(nèi)容繁多,過(guò)程繁瑣但我的收獲卻更加豐富。各種組件的運(yùn)用,各種算法的應(yīng)用,各種控件的利用我都是隨著設(shè)計(jì)的不斷深入而不斷熟悉并逐步掌握的。和老師以及同學(xué)的溝通交流更使我對(duì)程序整體的規(guī)劃與設(shè)計(jì)有了新的認(rèn)識(shí)也對(duì)自己提出了新的要求。</p><p> 提高是有限的但提高也是全面的,正是這
78、一次設(shè)計(jì)讓我積累了許多實(shí)際經(jīng)驗(yàn),也必然會(huì)讓我在未來(lái)的工作學(xué)習(xí)中表現(xiàn)出更高的應(yīng)變能力和理解力。</p><p> 順利如期的完成本次畢業(yè)設(shè)計(jì)給了我很大的信心,但是也讓我看到了自己許多不足的地方,學(xué)習(xí)其實(shí)就是一個(gè)不斷完善的過(guò)程,正視自己的不足之處,在以后的工作和學(xué)習(xí)中不斷的彌補(bǔ)這些不足之處,在以后的生活中也要保持同樣的態(tài)度,不斷的完善自己。</p><p> 我課程設(shè)計(jì)選這個(gè)題目原因是我一
79、直比較喜歡這個(gè)游戲,對(duì)這款游戲的操作以及玩法度比較了解,所以做起來(lái)比較容易點(diǎn),同時(shí)我也想玩玩自己親手做出這個(gè)小游戲,所以選了這個(gè)題目,掃雷游戲是一款智力游戲,這款游戲?qū)⒁欢ǖ牡乩追植荚谛「褡永铮罱K勝利是玩家將所有的地雷都找出。Java是我們這個(gè)學(xué)期新學(xué)的語(yǔ)言,通過(guò)這個(gè)課程設(shè)計(jì),我對(duì)以前學(xué)的知識(shí)有了更深一步的了解,這次設(shè)計(jì)的時(shí)間有限,所以我做了一個(gè)自己比較喜歡的小游戲,剛開(kāi)始做時(shí),雖然知道主要思想但把它要表示出來(lái)真的很不容易,通過(guò)查資料
80、,請(qǐng)教同學(xué),上網(wǎng),知道了知識(shí)可能是自己一個(gè)人要花很長(zhǎng)時(shí)間知道的,經(jīng)過(guò)這段時(shí)間的努力,終于做出了這款游戲,雖然還有很多不足,但做出來(lái)后還是很開(kāi)心的,測(cè)試這個(gè)游戲的功能時(shí),感覺(jué)很不錯(cuò),通過(guò)這個(gè)課程設(shè)計(jì)我對(duì)以前java有了一個(gè)更深一步的認(rèn)識(shí)。所以這次的設(shè)計(jì)相對(duì)來(lái)說(shuō)還是很成功的。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]耿祥義.JAVA大學(xué)實(shí)用
81、教程.電子工業(yè)出版社.2005.03</p><p> [2]朱戰(zhàn)立,沈偉編著.Java程序設(shè)計(jì)實(shí)用指南.電子工業(yè)出版社,2005.1</p><p> [3][美]Cay S.Horstmann.程峰等譯. JAVA2核心技術(shù).機(jī)械工業(yè)出版社.2003.06</p><p> [4]《Java程序設(shè)計(jì)教程》第二版 主編:雍俊海 清華大學(xué)出版社</p&
82、gt;<p> [5]《軟件工程導(dǎo)論》第五版 主編:張海藩 清華大學(xué)出版社</p><p> [6]《Java程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)與案例習(xí)題解答》主編:劉寶林 清華大學(xué)出版社</p><p> [7]《Java程序設(shè)計(jì)案例教程》主編:劉志都、趙建超 武漢大學(xué)出版社</p><p> [8]《Java編程基礎(chǔ)、實(shí)力與進(jìn)階》主編:王勇、代桂平、
溫馨提示
- 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ì)--基于java的掃雷游戲軟件設(shè)計(jì)
- 畢業(yè)論文——猜數(shù)游戲軟件的設(shè)計(jì)開(kāi)發(fā)
- 基于虛擬現(xiàn)實(shí)的射擊游戲軟件的設(shè)計(jì)與實(shí)現(xiàn)【畢業(yè)論文】
- 【zs精品】掃雷游戲的設(shè)計(jì)與實(shí)現(xiàn)[畢業(yè)論文+代碼全套]
- 計(jì)算機(jī)畢業(yè)論文---五子棋游戲軟件的設(shè)計(jì)與實(shí)現(xiàn)
- 基于java的動(dòng)物換位游戲軟件設(shè)計(jì)
- 掃雷畢業(yè)設(shè)計(jì)---基于java掃雷游戲的設(shè)計(jì)與實(shí)現(xiàn)
- 基于java的連連看游戲軟件設(shè)計(jì)
- 掃雷游戲畢業(yè)設(shè)計(jì)論文
- 學(xué)前兒童教育游戲軟件設(shè)計(jì)研究.pdf
- 掃雷游戲畢業(yè)設(shè)計(jì)論文
- 畢業(yè)論文-3d游戲軟件開(kāi)發(fā)的在線測(cè)試
- 軟件設(shè)計(jì)專業(yè)畢業(yè)論文
- 基于java的動(dòng)物換位游戲軟件設(shè)計(jì)說(shuō)明
- 基于java的動(dòng)物換位游戲軟件設(shè)計(jì)說(shuō)明
- JAVA版掃雷游戲設(shè)計(jì)與實(shí)現(xiàn)論文.doc
- android平臺(tái)天氣預(yù)報(bào)軟件設(shè)計(jì)與實(shí)現(xiàn) 畢業(yè)論文
- 手機(jī)游戲軟件界面交互的設(shè)計(jì)與實(shí)現(xiàn).pdf
- c++編程小游戲掃雷畢業(yè)論文
- java課程設(shè)計(jì)--基于java的動(dòng)物換位游戲軟件設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論