推箱子游戲設(shè)計(jì)實(shí)現(xiàn)分析_第1頁
推箱子游戲設(shè)計(jì)實(shí)現(xiàn)分析_第2頁
推箱子游戲設(shè)計(jì)實(shí)現(xiàn)分析_第3頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、.四川師范大學(xué)成都學(xué)院本科畢業(yè)設(shè)計(jì)推箱子游戲設(shè)計(jì)與實(shí)現(xiàn)學(xué)生姓名張起明學(xué) 號(hào)2012101087所 在 系通信工程系專業(yè)名稱通信工程班 級(jí)2012級(jí)寬帶一班指導(dǎo)教師陸園四川師范大學(xué)成都學(xué)院二一六年五月推箱子游戲的設(shè)計(jì)與實(shí)現(xiàn)前言于如今競(jìng)爭(zhēng)激烈的快節(jié)奏時(shí)代中,人們的生活水平越來越繁忙,因?yàn)榇耍鷣碛嗟娜烁械絻?nèi)心的空虛與壓力帶來的煩躁,這些也帶給人們?cè)S許多多心理上和身體上的困惑。所以如何緩解當(dāng)代人們的生活壓力,已成為人們的共同夙愿。這一次的這個(gè)基于JAVA的推箱子小游戲正是使用JAVA語言并且結(jié)合于Eclipses編譯器,開發(fā)出了這樣一款適合用于休閑的小游戲,在放松的同時(shí)也給忙碌的人們打開另一個(gè)思考

2、的空間。這一款基于JAVA開發(fā)的推箱子主要分為初始化、畫圖、移動(dòng)小人、移動(dòng)箱子以及功能控制共五個(gè)模塊。玩家可以通過控制游戲中的小人的移動(dòng)來實(shí)現(xiàn)推動(dòng)箱子,同時(shí)需要避開障礙物和死角方能將箱子推放到正確位置從而過關(guān)。每關(guān)的難易程度各不相同,不僅可以供人們用以娛樂,還有助于開發(fā)智力,提高人們思考問題與想象的能力,改善人們的思維方式,拓展思維。關(guān)鍵詞:JAVA 解壓 推箱子 游戲. v.AbstractIn todays competitive era of fast-paced, people s living level is becoming more and more busy, because

3、 of this, an increasing number of people have felt irritability of emptiness and pressure, these also bring people many psychological and physical puzzles. So how to alleviate the pressure of contemporary life, has become the common aspiration of the people. This time the based on Java Sokoban game

4、is using the Java language and the combination of the eclipses of the compiler developed such a suitable for leisure game, in a relaxed but also to the busy people to open another thinking space. This is based on the JAVA development of the push box is divided into initialization, drawing, moving pe

5、ople, moving boxes and a total of five functional control module. Players can control the game through the villains mobile to achieve the promotion of the box, while the need to avoid obstacles and dead side to push the box to the correct position so that. Each level of difficulty is different, not

6、only can be used for people to entertain, but also helps to develop intelligence, improve peoples ability to think about problems and imagination, improve peoples way of thinking, expand thinking.Key Words:JAVARelieve pressure Push box Game. v.目 錄前言IAbstractII1 可行性研究21.1設(shè)計(jì)目的21.2可行性研究前提21.3可行性分析21.4結(jié)

7、論意見32需求分析32.1引言32.2游戲需求32.3軟硬件需求4硬件環(huán)境需求:4軟件環(huán)境:42.4接口控制42.5方案論證42.5.1.C+語言的優(yōu)點(diǎn)42.5.2.Java語言的優(yōu)點(diǎn)52.5.3.方案選擇63概要設(shè)計(jì)73.1游戲設(shè)計(jì)分析73.3.1.地圖文件的引用73.3.2.程序運(yùn)邏輯73.3.3.繪圖73.3.4.顯示平臺(tái)73.2 注意事項(xiàng)83.3 游戲流程圖84.詳細(xì)設(shè)計(jì)94.1游戲總體結(jié)構(gòu)與代碼9結(jié)論21參考文獻(xiàn)22致231 可行性研究1.1設(shè)計(jì)目的靈活運(yùn)用自己在學(xué)校學(xué)習(xí)期間所學(xué)到的理論知識(shí)和實(shí)際動(dòng)手技能,并結(jié)合自己于課外查找到的資料,該推箱子游戲設(shè)計(jì)并開發(fā)基于JAVA,使自己能夠熟

8、悉和熟練應(yīng)用開發(fā)過程及相關(guān)技能,培養(yǎng)獨(dú)立思考能力,測(cè)試學(xué)習(xí)結(jié)果,實(shí)踐和提高編程能力,并為今后的工作打下堅(jiān)實(shí)基礎(chǔ)的實(shí)際能力。1.2可行性研究前提基本需求:系統(tǒng)開發(fā)的總體任務(wù)是綜合體現(xiàn)游戲本身的可操作性、美觀性和及時(shí)性。在游戲的開發(fā)過程中謹(jǐn)遵軟件工程規(guī)范,可采用結(jié)構(gòu)化或面向?qū)ο蠓治龅脑O(shè)計(jì)方法。主要是實(shí)現(xiàn)Windows的GUI程序開發(fā),對(duì)游戲中的圖形圖像通過鍵盤進(jìn)行控制。玩家可通過控制鍵盤上的上下左右方向按鍵來對(duì)游戲中的人物進(jìn)行移動(dòng)操作。主要開發(fā)目標(biāo):采用結(jié)構(gòu)化的設(shè)計(jì)方法,開發(fā)出一個(gè)操作簡(jiǎn)單、界面簡(jiǎn)潔且美觀、適合人們用以休閑娛樂的小游戲,實(shí)現(xiàn)Windows的GUI程序開發(fā),并期望能夠通過此次游戲開發(fā)

9、過程全面提高個(gè)人自身的綜合素質(zhì)。條件假定和限制:由于對(duì)編程語言的學(xué)習(xí)以及理解還不是很到位,因此本游戲可能會(huì)在諸多方面存在一些問題以及不足之處。可行性研究所采用的方法和步驟:通過研究分析推箱子小游戲所需要的具體功能以及這些功能實(shí)現(xiàn)的方法、確定主體結(jié)構(gòu)。利用所學(xué)到的知識(shí),以最簡(jiǎn)潔、最容易的辦法,邊開發(fā)邊測(cè)試邊修改,實(shí)現(xiàn)一個(gè)初級(jí)游戲軟件。評(píng)價(jià)尺度:由于本軟件是一個(gè)初級(jí)產(chǎn)品,因此對(duì)其要求并不是太苛刻,所以只需要能夠達(dá)到推箱子小游戲的一般功能即可。1.3可行性分析管理可行性: 這款推箱子游戲軟件的設(shè)計(jì)目的是為了提高自身素質(zhì)以及檢查自己在校期間所學(xué)習(xí)JAVA的相關(guān)知識(shí)的成果,運(yùn)用JAVA語言編寫后,在Ed

10、itPlus編譯器中運(yùn)行簡(jiǎn)單明了,所有功能全部根據(jù)基本需求所做,從而得以便于管理,所以在這方面是可以實(shí)現(xiàn)的。經(jīng)濟(jì)可行性:由于本游戲的主要背景是畢業(yè)設(shè)計(jì),不注重其直接可能產(chǎn)生的經(jīng)濟(jì)效益和其后的發(fā)展方向,其關(guān)鍵在于注重個(gè)人自身獨(dú)立編寫JAVA程序的水平以及其能力的提高,對(duì)自身的經(jīng)濟(jì)要求也不高,只要有一臺(tái)能運(yùn)行JAVA軟件和EditPlus編譯器的電腦即可,所以可以不用考慮經(jīng)濟(jì)方面的相關(guān)問題。技術(shù)可行性:對(duì)于本游戲,可以使用如VB,Java,Delphi等諸多相關(guān)的編程語言進(jìn)行編寫,但是考慮到編寫程序的難易程度、個(gè)人自身對(duì)編譯語言的了解程度以及完成的便利性等方面因素,故本游戲選擇了以JAVA程序語言

11、作為編程語言。需要對(duì)變量定義、變量初始化、界面初始化、游戲初始化等,然后就可以進(jìn)入游戲,處理游戲過程中的各種操作。社會(huì)可行性:本游戲的開發(fā)僅作為畢業(yè)課程設(shè)計(jì)使用,僅用來鞏固先前所學(xué)的知識(shí),是以個(gè)人為單位的,可供個(gè)人或他人平常娛樂解壓所用,無需考慮該游戲有可能造成的社會(huì)影響,因此可以不用考慮到法律、版權(quán)等多方面的社會(huì)因素,所以在這方面也是完全可行的。1.4結(jié)論意見綜上所述,本游戲軟件程序的技術(shù)基本成熟。經(jīng)過出于管理可行性、經(jīng)濟(jì)可行性、技術(shù)可行性和社會(huì)可行性這四大方面的分析,在這些方面上均無重大問題,因此能夠達(dá)到此次設(shè)計(jì)所預(yù)期的目的,所以可開始著手編寫本次游戲程序。2需求分析2.1引言對(duì)軟件需求的

12、透徹理解,對(duì)于軟件開發(fā)工作能否成功是起著至關(guān)重要的作用,需求說明的任務(wù)是發(fā)現(xiàn)、規(guī)范的過程,這有益于提高軟件開發(fā)過程中的能見度,便于對(duì)軟件開發(fā)過程中的控制與管理,有助于采用工程方法開發(fā)軟件,提高軟件的質(zhì)量,還有利于開發(fā)人員、維護(hù)人員、管理人員之間的交流以及協(xié)作,并且可以作為工作成果的原始依據(jù);再者,亦可在向潛在用戶傳遞軟件功能、性能需求,使其能夠判斷該軟件是否與自己的需求相符合。2.2游戲需求玩家是通過對(duì)小人的移動(dòng)操作來控制推動(dòng)箱子的,并且玩家需要避過障礙物以及死角,才能將其推放到指定位置從而達(dá)到過關(guān)的目的。如果玩家將箱子推入死角導(dǎo)致箱子無法移動(dòng)或不能移動(dòng)到指定位置則闖關(guān)失敗,可以通過悔步或重新

13、開始等操作來重新挑戰(zhàn)本關(guān)。游戲功能需求如下所示:游戲界面需求:簡(jiǎn)潔美觀的用戶界面,可以帶給用戶自然清晰的畫面。游戲內(nèi)容需求:良好的小人與箱子設(shè)計(jì),可以給玩家?guī)砀鎸?shí)的感覺。小人需要前、后、左、右四張圖片,移動(dòng)中的箱子與終點(diǎn)上的箱子要所有區(qū)別,因此需要兩不同的圖片以示區(qū)別。鍵盤處理事件:控制小人與箱子的移動(dòng),可通過鍵盤方向鍵(上、下、左、右鍵)對(duì)小人進(jìn)行上、下、左、右的移動(dòng),并且能夠推動(dòng)箱子。顯示需求:當(dāng)所有箱子都到達(dá)指定位置后即可過關(guān),若進(jìn)入死角則無法過關(guān),需要進(jìn)行悔步或重新開始的操作。可以由玩家喜歡選擇關(guān)卡進(jìn)行游戲。2.3軟硬件需求硬件環(huán)境需求:CPU:PentiumIII 600以上;內(nèi)

14、存要求:2GB以上;內(nèi)存剩余資源:128MB以上;軟件環(huán)境:JDK 1.5及其以上的版本。2.4接口控制本小游戲需要通過鍵盤進(jìn)行操作,在Windows的操作系統(tǒng)下,利用鍵盤的上、下、左、右方向按鍵控制小人的行動(dòng)來推動(dòng)箱子,要使用鍵盤的接口實(shí)現(xiàn)。2.5方案論證學(xué)校開設(shè)的關(guān)于學(xué)習(xí)編程語言的課程有C+語言、Java程序語言等,皆可用于編寫推箱子小游戲的程序。2.5.1C+語言的優(yōu)點(diǎn)C+語言是對(duì)C語言的擴(kuò)充,擴(kuò)充的絕大部分來自著名語言中的最佳特性:從SIMULA 67中吸取了類,從ALGOL 68中吸取了運(yùn)算符一名多用、引用和在分程序中任何地方說明變量,綜合了Ada的類屬和Clu的模塊特點(diǎn),從BCPL

15、中吸取異常處理,從BCPL中吸取了用/表示注釋。C+語言保持了C語言的緊湊、靈活、高效和易移植強(qiáng)的優(yōu)點(diǎn),它對(duì)數(shù)據(jù)抽象的支持主要在于類概念和機(jī)制,對(duì)面向?qū)ο箫L(fēng)范的支持主要通過虛擬函數(shù)。C+語言既有數(shù)據(jù)抽象和面向?qū)ο竽芰ΓZ言運(yùn)行性能高多,加上C語言的普及,而從C語言至C+語言的過渡較為平滑,以及C+語言與C語言的兼容程度可使數(shù)據(jù)巨大的C語言程序能方便地在C+語言環(huán)境中重用。盡管C+語言當(dāng)初的設(shè)計(jì)本意是幫助管理大型程序,但其用途并不僅限于此。C+語言的面向?qū)ο蟮奶匦钥捎行У赜糜趯?shí)際的程序設(shè)計(jì)工作。C+語言常常用于設(shè)計(jì)編輯器、數(shù)據(jù)庫、個(gè)人文件系統(tǒng)以及通訊程序等。而且,由于C+語言共享C語言的效率,所

16、以用C+語言可以構(gòu)成很多高性能的系統(tǒng)軟件。2.5.2.Java語言的優(yōu)點(diǎn)Java是定義位于網(wǎng)絡(luò)計(jì)算的計(jì)算機(jī)語言,其技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于個(gè)人PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。在全球云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢(shì)和廣闊前景。這些特點(diǎn)使得Java語言特別適用于用來開發(fā)網(wǎng)絡(luò)上的應(yīng)用程序;另外,作為一種面世較晚的語言,Java語言也集中體現(xiàn)和充分利用了若干當(dāng)代軟件技術(shù)新成果,例如C+語言、面向?qū)ο?、多線程等等,它們所擁有的優(yōu)點(diǎn)都讓Java語言收入其中。開臺(tái)無關(guān)性。如前所述,Ja

17、va語言獨(dú)特的運(yùn)行機(jī)制使得它具有良好的二進(jìn)制級(jí)的可移植性,利用Java語言,開發(fā)人員可以編寫出與具體平臺(tái)無關(guān)、普遍適用的應(yīng)用程序,大大降低了開發(fā)、維護(hù)和管理的開銷。Java是面向?qū)ο蟮木幊陶Z言。面向?qū)ο蠹夹g(shù)較好地適應(yīng)了當(dāng)今軟件開發(fā)過程中新出現(xiàn)的種種傳統(tǒng)面向過程語言所不能處理的問題,包括軟件開發(fā)的規(guī)模擴(kuò)大、升級(jí)加快、維護(hù)量增大經(jīng)及開發(fā)分工日趨細(xì)化、專業(yè)化和標(biāo)準(zhǔn)化等,是一種迅速成熟、推廣的軟件開發(fā)方法。面向?qū)ο蠹夹g(shù)的核心是以更接近人類思維的方式建立計(jì)算機(jī)邏輯模型,它利用類和對(duì)象的機(jī)制將數(shù)據(jù)與其上的操作封裝在一起,并通過統(tǒng)一的接口與外界交互,使反映現(xiàn)實(shí)世界實(shí)體的各個(gè)類在程序中能夠獨(dú)立、自治、繼承;這

18、種方法非常有利于提高程序的可維護(hù)性和可重用性,大大提高了開發(fā)效率和程序的可管理性,使得面向過程語言難于操縱的大規(guī)模軟件可以很方便的創(chuàng)建、使用和維護(hù)。安全穩(wěn)定可靠。對(duì)網(wǎng)絡(luò)上應(yīng)用程序的另一個(gè)需求是較高的安全可靠性。用戶通過網(wǎng)絡(luò)獲取并在本地運(yùn)行的應(yīng)用程序必須是可依賴的,不會(huì)充當(dāng)病毒或其他惡意操作的傳播者而攻擊用戶的本地資源;同時(shí)它還應(yīng)該是穩(wěn)定的,輕易不會(huì)產(chǎn)生死機(jī)等錯(cuò)誤,使得用戶樂于使用??梢灾С侄嗑€程。多線程是當(dāng)今軟件技術(shù)的又一重要成果,已成功應(yīng)用在操作系統(tǒng)、應(yīng)用開發(fā)等多個(gè)領(lǐng)域。多程序技術(shù)允許同一個(gè)程序有兩個(gè)執(zhí)行線索,即同時(shí)做兩件事情,滿足了一些復(fù)雜軟件的需求。Java不但內(nèi)置多線程功能,而且提供語

19、言級(jí)的多線程支持,即定義了一些用于建立、管理多線程的類和方法,使得開發(fā)具有多線程功能的程序變得簡(jiǎn)單、容易和有效。綜合先前所述,衍生自C+的Java語言,出于安全穩(wěn)定性的考慮,去除了C+中不容不得易理解和掌握的部分,如最典型的指針操作等,降低了學(xué)習(xí)的難度;同時(shí),Java還有一個(gè)十分特殊的特點(diǎn),這就是它的基本語法部分與C語言幾乎一模一樣。這樣,無論是學(xué)習(xí)過Java語言再學(xué)習(xí)C語言,還是已經(jīng)掌握了C語言再學(xué)習(xí)Java語言,都會(huì)感到輕松不已。2.5.3.方案選擇面向?qū)ο笫且环N認(rèn)識(shí)世界的方法,是一種程序設(shè)計(jì)方法。面向?qū)ο蟮挠^點(diǎn)認(rèn)為,客觀世界是由各種各樣的實(shí)體,即對(duì)象組成的。每種對(duì)象都有自己的內(nèi)部狀態(tài)和運(yùn)

20、動(dòng)規(guī)律,不同對(duì)象間的相互聯(lián)系和相互作用就構(gòu)成了各種不同的系統(tǒng),并進(jìn)而構(gòu)成整個(gè)客觀世界。按照這樣的思想設(shè)計(jì)程序,就是面向?qū)ο蟮某绦蛟O(shè)計(jì)。面向?qū)ο蟮某绦蛟O(shè)計(jì)吸取了結(jié)構(gòu)化程序設(shè)計(jì)的先進(jìn)思想,并把它們同幾個(gè)支持用戶用新方法進(jìn)行程序設(shè)計(jì)的有力概念結(jié)合在一起。所有面向?qū)ο蟮某绦蛟O(shè)計(jì)語言一般都包含三個(gè)概念:封裝、多態(tài)性和繼承性。這種方法要求語言必須具備抽象、封裝、繼承和多態(tài)性這幾個(gè)關(guān)鍵要素。面向?qū)ο蟮某绦蛟O(shè)計(jì),是通過數(shù)據(jù)和代碼建立分塊的內(nèi)存區(qū)域,以便提供對(duì)程序進(jìn)行模塊化的一種程序設(shè)計(jì)方法,這些模塊可以被用作樣板,在需要時(shí)再建立其副本。C+語言和Java語言在面向?qū)ο筮@方面都比較強(qiáng),C+語言為了與C語言兼容,

21、其是包含了些面向過程的成分;Java語言除了C+語言中非面向過程的部分,其程序編寫過程就是設(shè)計(jì)、實(shí)現(xiàn)類,定義其屬性、行為的過程。還有Java語言特有的“沙箱”機(jī)制是其安全性的保障,同時(shí)它去除了C+語言中易造成的錯(cuò)誤指針,增加了自動(dòng)內(nèi)存管理等措施,保證了Java程序運(yùn)行的可靠性。因此,經(jīng)過再三比較兩種語言之后,采用了Java語言來編寫推箱子小游戲的程序代碼。3概要設(shè)計(jì)3.1游戲設(shè)計(jì)分析從面向?qū)ο蟮挠^念出發(fā),本程序可分為以下幾個(gè)對(duì)象:l 地圖文件的引用l 小人與箱子的移動(dòng)l 程序運(yùn)算邏輯l 繪圖l 顯示平臺(tái)分析對(duì)象的技巧在于它的重復(fù)利用及維護(hù)效率。如果要把設(shè)計(jì)出來的程序在不同的顯示平臺(tái)上執(zhí)行,就要

22、作大幅度的更動(dòng)甚至重寫,這樣就失去了面向?qū)ο髮傩?,所以在本程序分析時(shí)將不變與易變的因素分別做成對(duì)象,如地圖文件、小人與箱子的移動(dòng)以及程序的運(yùn)算邏輯就是不變的項(xiàng)目,而繪圖及顯示平臺(tái)會(huì)因?yàn)榄h(huán)境而有所不同屬于易變的項(xiàng)目。3.3.1.地圖文件的引用在設(shè)計(jì)游戲程序時(shí),通常都是把游戲的畫面布局?jǐn)?shù)據(jù)存放在一個(gè)地圖文件中。程序通過讀取地圖文件中的數(shù)據(jù)來獲取畫面的布局安排。地圖文件是20*20的變量數(shù)組文件,在地圖不同的數(shù)字代表不同的意義。把這組數(shù)據(jù)保存到一個(gè)文件中,這個(gè)文件就是地圖文件了。3.3.2.程序運(yùn)邏輯程序中邏輯運(yùn)算包含小人與箱子的移動(dòng)、鍵盤事件的響應(yīng)、保存數(shù)據(jù)以實(shí)現(xiàn)悔步以及重新開始的操作等等。3.3

23、.3.繪圖繪圖主要是用于在小人與箱子的移動(dòng)后,原位置由草地填補(bǔ),以此來表示小人與箱子的移動(dòng)以及其畫面的連貫性。3.3.4.顯示平臺(tái)“可移植性高”是Java的屬性之一,Java的應(yīng)用涉及許多領(lǐng)域,如手機(jī)、單機(jī)程序及瀏覽器等,不同的平臺(tái)對(duì)于它的設(shè)定不盡相同,若將顯示平臺(tái)獨(dú)立為一個(gè)類,將有助于主程序的完整性及移植程序的快速性。3.2 注意事項(xiàng)小游戲在設(shè)計(jì)時(shí)要注意繪圖部分的設(shè)計(jì)代碼,還要注意通過輸入流讀取地圖文件與圖像文件部分的設(shè)計(jì)代碼等等。3.3 游戲流程圖系統(tǒng)功能模塊初始化模塊繪圖模塊移動(dòng)小人模塊移動(dòng)箱子模塊功能控制模塊圖1 系統(tǒng)功能模塊4.詳細(xì)設(shè)計(jì)4.1游戲總體結(jié)構(gòu)與代碼推箱子的小游戲界面如圖4

24、.1所示:圖4.1 小游戲界面由圖4.1可以看出,本小游戲的界面簡(jiǎn)潔、直觀,從界面中可以直接得到本小游戲的相關(guān)功能操作信息。(1)界面框架與按鈕設(shè)計(jì)界面設(shè)計(jì)中包括了所有玩家可以直觀見到的圖形界面,窗體的大小,界面中的功能按鈕,讓玩家可以方便使用操作。界面中的按鈕包括:“悔一步”,“重來”,“上一關(guān)”,“下一關(guān)”,“第1關(guān)”,“最終關(guān)”,“選關(guān)”。并且各個(gè)按鈕的名稱與相關(guān)功能為:“悔一步”:返回上一移動(dòng)狀態(tài)(可以連續(xù)返回多步);“重來”:重新開始當(dāng)前關(guān);“上一關(guān)”:返回到當(dāng)前關(guān)的上一關(guān);“下一關(guān)”:跳轉(zhuǎn)到當(dāng)前關(guān)的下一關(guān);“第1關(guān)”:游戲系統(tǒng)默認(rèn)開始關(guān)為第一關(guān),此按鈕讓玩家可以方便從其它關(guān)卡直接跳

25、轉(zhuǎn)到第一關(guān);“最終關(guān)”:可以跳轉(zhuǎn)到最后一關(guān),即游戲系統(tǒng)默認(rèn)的最后一個(gè)關(guān)。“選關(guān)”:選擇想要挑戰(zhàn)的關(guān)卡。其中,這個(gè)部分的部分代碼為:public class Tuixiangzipublic static void main(String args)new mainFrame();class mainFrame extends JFrame implements ActionListener,ItemListenerJLabel lb;JLabel lb2;JButton btnrenew,btnlast,btnnext,btnchoose,btnfirst,btnover,btnmuc,btn

26、back;mainpanel panel;Sound sound;JComboBox jc=new JComboBox();MenuItem renew=new MenuItem( 重新開始);MenuItem back=new MenuItem( 悔一步);MenuItem last=new MenuItem( 上一關(guān));MenuItem next=new MenuItem( 下一關(guān));MenuItem choose=new MenuItem( 選關(guān));MenuItem exit=new MenuItem( 退出);MenuItem qin=new MenuItem( 琴蕭合奏);MenuI

27、tem po=new MenuItem( 泡泡堂);MenuItem guang=new MenuItem( 灌籃高手);MenuItem nor=new MenuItem( 默認(rèn));MenuItem eye=new MenuItem( eyes on me);MenuItem about=new MenuItem( 關(guān)于推箱子.);mainFrame()super(推箱子v1.0);setSize(720,720);setVisible(true);setResizable(false);setLocation(300,20);setDefaultCloseOperation(JFrame.

28、EXIT_ON_CLOSE);Container cont=getContentPane();cont.setLayout(null);cont.setBackground(Color.black);Menu choice=new Menu( 選項(xiàng));choice.add(renew);choice.add(last);choice.add(next);choice.add(choose);choice.add(back);choice.addSeparator();choice.add(exit);renew.addActionListener(this);last.addActionLis

29、tener(this);next.addActionListener(this);choose.addActionListener(this);exit.addActionListener(this);back.addActionListener(this);Menu setmuc=new Menu( 設(shè)置音樂);setmuc.add(nor);setmuc.add(qin);setmuc.add(po);setmuc.add(guang);setmuc.add(eye);nor.addActionListener(this);qin.addActionListener(this);po.ad

30、dActionListener(this);guang.addActionListener(this);eye.addActionListener(this);Menu help=new Menu( 幫助);help.add(about);about.addActionListener(this);MenuBar bar=new MenuBar();bar.add(choice);bar.add(setmuc);bar.add(help);setMenuBar(bar); nor.setEnabled(false);lb=new JLabel(畢業(yè)設(shè)計(jì)JAVA推箱子游戲v1.0版。,Swing

31、Constants.CENTER);lb2=new JLabel(更換音樂,SwingConstants.CENTER);add(lb);add(lb2);lb.setBounds(100,20,400,20);lb.setForeground(Color.white);lb2.setBounds(625,500,55,20);lb2.setForeground(Color.white);btnrenew=new JButton(重來);btnback=new JButton(悔一步);btnlast=new JButton(上一關(guān));btnnext=new JButton(下一關(guān));btnc

32、hoose=new JButton(選關(guān));btnfirst=new JButton(第關(guān));btnover=new JButton(最終關(guān));btnmuc=new JButton(音樂關(guān));add(btnrenew);add(btnlast);add(btnnext);add(btnchoose);add(btnfirst);add(btnover);add(btnmuc);add(btnback);btnrenew.setBounds(625,100,80,30);btnrenew.addActionListener(this);btnback.setBounds(625,150,80,3

33、0);btnback.addActionListener(this);btnfirst.setBounds(625,200,80,30);btnfirst.addActionListener(this);btnlast.setBounds(625,250,80,30);btnlast.addActionListener(this);btnnext.setBounds(625,300,80,30);btnnext.addActionListener(this);btnover.setBounds(625,350,80,30);btnover.addActionListener(this);btn

34、choose.setBounds(625,400,80,30);btnchoose.addActionListener(this);btnmuc.setBounds(625,450,80,30);btnmuc.addActionListener(this);jc.setBounds(625,530,80,20);jc.addItem(默認(rèn));jc.addItem(琴蕭合奏);jc.addItem(泡泡堂);jc.addItem(灌籃高手);jc.addItem(eyes on me);jc.addItemListener(this);cont.add(jc);sound=new Sound()

35、;sound.loadSound();panel=new mainpanel();add(panel);panel.Tuixiangzi(panel.level);panel.requestFocus();validate();(2)地圖的繪制形成地圖以二維數(shù)組的形式進(jìn)行存儲(chǔ),不同的數(shù)家代表了不同的含義。在本小游戲的地圖文件中,09這十個(gè)數(shù)字的定義如下所示:編號(hào)0:代表未定義的區(qū)域;編號(hào)1:代表障礙物(或者邊界);編號(hào)2:代表草地;編號(hào)3:代表箱子(未到指定位置);編號(hào)4:代表目的地;編號(hào)5:代表小人向下移動(dòng)方向;編號(hào)6:代表小人向左移動(dòng)方向;編號(hào)7:代表小人向右移動(dòng)方向;編號(hào)8:代表小人向上

36、移動(dòng)方向;編號(hào)9:代表到達(dá)指定位置時(shí)的箱子。例如下圖4.2所示(左邊是二維數(shù)組的地圖文件,右邊是相對(duì)應(yīng)的小游戲界面): 圖4.2 地圖文件與相應(yīng)界面(3)推箱子小游戲的游戲性其主要功能是給用戶一個(gè)良好的游戲界面,游戲中包括50關(guān)的地圖文件。地圖文件是預(yù)先寫好的,所有界面信息以數(shù)字的形式存放在一個(gè)20*20的二維數(shù)組當(dāng)中并且把這些地圖文件統(tǒng)一放在一個(gè)地圖文件中,使得程序方便調(diào)用地圖文件。然后,每一關(guān)就會(huì)按照這些數(shù)組數(shù)據(jù)重新繪制地圖,從而達(dá)到小游戲的可用性及其相應(yīng)的目的。(4)小人與箱子移動(dòng)的算法小人與箱子的移動(dòng)中包括了正移動(dòng)以及“悔一步”的負(fù)移動(dòng)。正移動(dòng):小人向上、下、左、右的移動(dòng)是一個(gè)判斷算法

37、,其判斷都是通過判斷小人前面是否是草地或者是箱子亦或者是障礙物(或者邊界)。如果是障礙物或者是邊界,就不能夠進(jìn)行移動(dòng);如果是沒有箱子或者是障礙物,就可以自由移動(dòng);又如果是有箱子,就要判斷是否可以移動(dòng)箱子,最后再討論箱子被推過的位置,小人移動(dòng)的位置,以及它們的原位置和被遮擋住的新位置的圖形變化等等,需要運(yùn)用算法使其重新繪制地圖,填補(bǔ)空白。算法判斷完畢后,傳出數(shù)據(jù)并且將其記錄在一個(gè)堆棧中,以備“悔一步”時(shí)使用。負(fù)移動(dòng):通過記錄在堆棧中的數(shù)據(jù)來判斷,前一步小人的移動(dòng)方向以及移動(dòng)中使用過的算法,逆向?qū)⒋a重新運(yùn)行,同時(shí)繪制并刷新地圖以達(dá)到前一步的狀態(tài)。其中,這個(gè)部分的部分代碼為:void moveup

38、()if(mapmanY-1manX=2|mapmanY-1manX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY-1manX=8;repaint();manY-;mystack.push(10);else if(mapmanY-1manX=3)if(mapmanY-2manX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=9

39、;repaint();manY-;mystack.push(11);else if(mapmanY-2manX=2)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=3;repaint();manY-;mystack.push(11);else mapmanYmanX=8;repaint();else if(mapmanY-1manX=9)if(mapmanY-2manX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=

40、9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=9;repaint();manY-;mystack.push(11);else if(mapmanY-2manX=2)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=3;repaint();manY-;mystack.push(11);else mapmanYmanX=8;repaint();if(mapmanY-1

41、manX=1)mapmanYmanX=8;repaint();void backup(int t)int n=t;if(n=10)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;else if(n=11)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=9;else mapmanYmanX=3;if(maptmpmanY-1manX=4|maptmpmanY-1manX=9)mapmanY-1manX=4;else mapmanY-1manX=2;mapm

42、anY+1manX=8;repaint();manY+;void movedown()if(mapmanY+1manX=2|mapmanY+1manX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY+1manX=5;repaint();manY+;mystack.push(20);else if(mapmanY+1manX=3)if(mapmanY+2manX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapm

43、anYmanX=2;mapmanY+1manX=5;mapmanY+2manX=9;repaint();manY+;mystack.push(21);else if(mapmanY+2manX=2)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY+1manX=5;mapmanY+2manX=3;repaint();manY+;mystack.push(21);else mapmanYmanX=5;repaint();else if(mapmanY+1manX=9)if(mapmanY+2m

44、anX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY+1manX=5;mapmanY+2manX=9;repaint();manY+;mystack.push(21);else if(mapmanY+2manX=2)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY+1manX=5;mapmanY+2manX=3;repaint();manY+;mystack.push(21);

45、else mapmanYmanX=5;repaint();else if(mapmanY+1manX=1)mapmanYmanX=5;repaint();void backdown(int t)int n=t;if(n=20)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;else if(n=21)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=9;else mapmanYmanX=3;if(maptmpmanY+1manX=4|maptmpmanY+1

46、manX=9)mapmanY+1manX=4;else mapmanY+1manX=2;mapmanY-1manX=5;repaint();manY-;(5)移動(dòng)的代碼在本小游戲系統(tǒng)中,小人與箱子的移動(dòng)應(yīng)該是能帶給玩家較為逼真的視覺感受,這樣才能體現(xiàn)系統(tǒng)的有效性與娛樂性。玩家通過控制小人,推動(dòng)箱子在草地上避過障礙物與邊界死角來到達(dá)指定的終點(diǎn)位置。其中,這個(gè)部分的部分代碼為:void moveright()if(mapmanYmanX+1=2|mapmanYmanX+1=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapma

47、nYmanX=2;mapmanYmanX+1=7;repaint();manX+;mystack.push(40);else if(mapmanYmanX+1=3)if(mapmanYmanX+2=4)if(maptmpmanYmanX=4)mapmanYmanX=4;else mapmanYmanX=2;mapmanYmanX+1=7;mapmanYmanX+2=9;repaint();manX+;mystack.push(41);else if(mapmanYmanX+2=2)if(maptmpmanYmanX=4)mapmanYmanX=4;else mapmanYmanX=2;mapm

48、anYmanX+1=7;mapmanYmanX+2=3;repaint();manX+;mystack.push(41);else mapmanYmanX=7;repaint();else if(mapmanYmanX+1=9)if(mapmanYmanX+2=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanYmanX+1=7;mapmanYmanX+2=9;repaint();manX+;mystack.push(41);else if(mapmanYmanX+2=2)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanYmanX+1=7;mapmanYmanX+2=3;repaint();manX+;mystack.push(41);else mapmanYmanX=7;repaint();else if(mapmanYmanX+1=1)mapmanYmanX=7;repaint();(6)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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)論