




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、徐州工程學(xué)院課程設(shè)計(jì)報(bào)告 Java程序設(shè)計(jì)課程設(shè)計(jì)設(shè)計(jì)題目 JAVA設(shè)置貪吃蛇游戲 設(shè)計(jì)時(shí)間 2014.6.23 至 2013.6.29 小組成員 * 學(xué)生學(xué)號(hào) * 所在班級(jí) 11網(wǎng)絡(luò)轉(zhuǎn)本 指導(dǎo)教師 王 逢 州 指導(dǎo)教師 王 逢 州 目 錄一 設(shè)計(jì)背景11.1分析與設(shè)計(jì)11.1.1需求分析11.1.2游戲開(kāi)發(fā)的方便性21.1.3游戲開(kāi)發(fā)的可行性21.2功能需求2二 設(shè)計(jì)方案論證32.1程序概述32.2程序流程圖32.3總設(shè)計(jì)模塊的劃分42.4類及方法的說(shuō)明6三 系統(tǒng)編譯結(jié)果分析7四 總結(jié)與心得體會(huì)11五 參考文獻(xiàn)12六 附錄 實(shí)驗(yàn)代碼13 22摘 要Java程序設(shè)計(jì)是我們第一次接觸面向?qū)ο蟪绦?/p>
2、設(shè)計(jì),它和我們以前學(xué)的C語(yǔ)言程序設(shè)計(jì)大同小異,整體上差不多卻又各有各的特點(diǎn)。而在學(xué)習(xí)了理論課程之后,而此次課程設(shè)計(jì)也是我們的第一次全面的綜合訓(xùn)練。Java程序設(shè)計(jì)的設(shè)計(jì)目的是加深理論教學(xué)內(nèi)容的理解和掌握,使學(xué)生較系統(tǒng)的掌握程序設(shè)計(jì)及其在網(wǎng)絡(luò)開(kāi)發(fā)中的應(yīng)用。隨著Java技術(shù)越來(lái)越廣泛的應(yīng)用,作為一種新的編程語(yǔ)言,以其簡(jiǎn)單性、可移植性和平臺(tái)無(wú)關(guān)性等優(yōu)點(diǎn),得到了廣泛地應(yīng)用。無(wú)論采用Java SE、Java EE還是Java ME都需要用到GUI(圖形用戶界面)。“貪吃蛇”游戲是一個(gè)經(jīng)典的游戲,它因操作簡(jiǎn)單、娛樂(lè)性強(qiáng)而廣受歡迎。本文基于Java開(kāi)發(fā)環(huán)境,開(kāi)發(fā)了一個(gè)操作簡(jiǎn)單、界面美觀、功能較齊全的“貪吃蛇
3、”游戲。整個(gè)游戲程序分為二個(gè)功能模塊,六個(gè)類模塊,實(shí)現(xiàn)了游戲的開(kāi)始、暫停、結(jié)束。通過(guò)本游戲的開(kāi)發(fā),達(dá)到學(xué)習(xí)Java技術(shù)和熟悉軟件開(kāi)發(fā)流程的目的。關(guān)鍵詞 Java程序設(shè)計(jì)“貪吃蛇 游戲規(guī)則 圖形界面 Windows XP一 設(shè)計(jì)背景Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語(yǔ)言和java平臺(tái)的總稱。Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于個(gè)人PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開(kāi)發(fā)者專業(yè)社群。在全球云計(jì)算和
4、移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢(shì)和廣闊前景。 運(yùn)行環(huán)境:意指一種把半編譯的執(zhí)行碼在目標(biāo)機(jī)器上運(yùn)行的環(huán)境。 貪吃蛇游戲一款非常經(jīng)典的手機(jī)游戲,因?yàn)樗容^簡(jiǎn)單有趣,無(wú)論老少都比較適合。貪吃蛇的設(shè)計(jì)對(duì)每一個(gè)Java語(yǔ)言設(shè)計(jì)者進(jìn)行語(yǔ)言提高和進(jìn)階都是一個(gè)很好的鍛煉機(jī)會(huì)。貪吃蛇游戲的設(shè)計(jì)比較復(fù)雜,它涉及面廣、牽涉方面多,如果不好好考慮和設(shè)計(jì),將難以成功開(kāi)發(fā)出這個(gè)游戲。在這個(gè)游戲的設(shè)計(jì)中,牽涉到圖形界面的顯示與更新、數(shù)據(jù)的收集與更新,并且在這個(gè)游戲的開(kāi)發(fā)中,還要應(yīng)用類的繼承機(jī)制以及一些設(shè)計(jì)模式。因此,如何設(shè)計(jì)和開(kāi)發(fā)好這個(gè)貪吃蛇游戲,對(duì)于提高Java開(kāi)發(fā)水平和系統(tǒng)的設(shè)計(jì)能力
5、有極大的幫助。在設(shè)計(jì)開(kāi)發(fā)過(guò)程中,需要處理好各個(gè)類之間的繼承關(guān)系,還要處理各個(gè)類相應(yīng)的封裝,并且還要協(xié)調(diào)好各個(gè)模塊之間的邏輯依賴關(guān)系和數(shù)據(jù)通信關(guān)系。1.1分析與設(shè)計(jì)1.1.1需求分析本系統(tǒng)主要是完成貪吃蛇游戲的基本操作。用戶可以自己練習(xí)和娛樂(lè)。本系統(tǒng)需要滿足以下幾點(diǎn)要求: (1) 利用方向鍵來(lái)改變蛇的運(yùn)行方向。 (2) 空格鍵暫停或繼續(xù)游戲,并在隨機(jī)的地方產(chǎn)生食物。 (3) 吃到食物就變成新的蛇體,碰到壁或自身則游戲結(jié)束,否則正常運(yùn)行。 1.1.2游戲開(kāi)發(fā)的方便性游戲開(kāi)發(fā)成功后,最終用戶為各個(gè)年齡段的人群,用戶范
6、圍相當(dāng)廣泛。本游戲友好的用戶界面,簡(jiǎn)單易學(xué)的按鈕操作以及簡(jiǎn)單通俗的游戲規(guī)則,使廣大的用戶不需要專門進(jìn)行培訓(xùn),就可以立即學(xué)會(huì)如何使用。1.1.3游戲開(kāi)發(fā)的可行性貪吃蛇游戲是一種簡(jiǎn)單的大眾的游戲,自從計(jì)算機(jī)實(shí)現(xiàn)以來(lái),深受廣大電腦玩家的喜愛(ài),做一個(gè)簡(jiǎn)單的貪吃蛇小游戲。 貪吃蛇的核心算法時(shí)如何實(shí)現(xiàn)移動(dòng)和吃掉食物,沒(méi)有碰到食物的時(shí)候,把當(dāng)前運(yùn)動(dòng)方向上的下個(gè)節(jié)點(diǎn)入隊(duì),并以蛇節(jié)點(diǎn)的顏色繪制這個(gè)節(jié)點(diǎn),然后把頭指針?biāo)傅墓?jié)點(diǎn)出隊(duì),并以游戲框架內(nèi)部背景色重繪出隊(duì)的節(jié)點(diǎn),這樣就可以達(dá)到移動(dòng)的效果。而在吃到食物的時(shí)候,則只需把食物入隊(duì)即可。實(shí)現(xiàn)貪吃蛇的基本的蛇身移動(dòng)、吃到食物身體增長(zhǎng)、和碰到墻壁
7、或自身死亡,能夠暫停和開(kāi)始。 本次設(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)行。 由于Java主要用于網(wǎng)絡(luò)應(yīng)用程序開(kāi)發(fā),因此對(duì)安全性有較高的要求。如果沒(méi)有安全保證,用戶從網(wǎng)絡(luò)下載程序執(zhí)行就非常危險(xiǎn)。Java通過(guò)自己的安全機(jī)制防止了病毒程序的產(chǎn)生和下載程序?qū)Ρ镜叵到y(tǒng)的威脅破壞。1.2功能需求本設(shè)計(jì)所開(kāi)發(fā)的是基于Java的一個(gè)貪吃蛇游戲軟件,主要實(shí)現(xiàn)游戲的開(kāi)始、暫停、退出、等功能,分為: 游戲主界面模塊、游戲控
8、制模塊以二個(gè)模塊。 游戲性能: 本軟件在設(shè)計(jì)方面本著方便、實(shí)用及娛樂(lè)性高的宗旨,在對(duì)界面進(jìn)行設(shè)計(jì)的過(guò)程中,始終堅(jiān)持清晰明了,在性能方面能夠?qū)崿F(xiàn)效率高,不易出錯(cuò)等優(yōu)點(diǎn)。 游戲主界面模塊: 主要包括游戲圖形區(qū)域界面、游戲開(kāi)始按鈕、暫停游戲按鈕。游戲的主界面應(yīng)該力求美觀,爽心悅目。 游戲控制模塊: 主要完成控制游戲的開(kāi)始、暫停、退出等功能,這部分應(yīng)該做到易懂、易操作而且準(zhǔn)確率高,不易出錯(cuò)。二 設(shè)計(jì)方案論證2.1程序概述本程序是一個(gè)利用Java應(yīng)用軟件制作的貪食蛇小游戲。在游戲過(guò)程中,用戶通過(guò)點(diǎn)擊小鍵盤
9、區(qū)的方向鍵來(lái)控制蛇的運(yùn)行方向;通過(guò)F和S鍵來(lái)控制蛇的移動(dòng)速度,每單擊一次,蛇的移動(dòng)速度改變一次,改變頻率為0.5。游戲運(yùn)行過(guò)程中,如果想暫停,只需要按P鍵即可。重新開(kāi)始游戲的按鍵為R。當(dāng)蛇吃到食物且沒(méi)有碰到墻壁或自己的身體時(shí),按照積分規(guī)則得到相應(yīng)的分?jǐn)?shù);當(dāng)蛇沒(méi)有吃到食物且碰到墻壁或自己的身體時(shí)游戲結(jié)束。本程序的另一個(gè)功能是在程序運(yùn)行窗口的左上角顯示,用戶在游戲過(guò)程中所得的分?jǐn)?shù),不過(guò)缺點(diǎn)是無(wú)法保存分?jǐn)?shù)。2.2程序流程圖本次游戲設(shè)計(jì)的處理流程如圖2-1所示:?jiǎn)螕簟伴_(kāi)始游戲”按鈕, 游戲開(kāi)始。鍵盤操作: 向上左移右移向下沒(méi)有吃到食物且蛇碰到邊界單擊“退出游戲”退出游戲游戲中途欲中斷,稍后繼續(xù)游戲單擊
10、“暫停游戲”游戲暫停進(jìn)入游戲畫面再次單擊開(kāi)始游戲,游戲恢復(fù)圖2-1 游戲處理流程圖2.3總設(shè)計(jì)模塊的劃分根據(jù)游戲需求中游戲所要實(shí)現(xiàn)的功能,整個(gè)游戲分為二個(gè)模塊進(jìn)行具體的設(shè)計(jì),如圖2-2所示:圖2-2 游戲總設(shè)計(jì)模塊 游戲控制模塊的主要框架如圖2-3所示:圖2-3游戲控制模塊框架游戲重新開(kāi)始控制:點(diǎn)擊“R”鍵后,系統(tǒng)圖重新載入,即游戲重新開(kāi)始。游戲暫??刂疲狐c(diǎn)擊“P暫停游戲”按鈕,游戲暫停;再單擊,游戲繼續(xù)。游戲移動(dòng)速度功能控制:點(diǎn)擊“F/ S”按鈕,蛇的移動(dòng)速度就會(huì)改變,每點(diǎn)擊一次,速度的改變頻率為0.5。游戲的得分:本游戲不是按照貪吃蛇吃到一個(gè)食物就加一分進(jìn)行得分,而是賦予具體的得分規(guī)則,當(dāng)
11、蛇吃到食物且沒(méi)有碰到邊界或沒(méi)有碰撞到自己的身體時(shí),按照具體的規(guī)則進(jìn)行得分。2.4類及方法的說(shuō)明 貪吃蛇游戲各模塊及程序流程有若干類實(shí)現(xiàn),下面闡述各個(gè)類的設(shè)計(jì)與實(shí)現(xiàn)。GreedSnake類 該類包含六個(gè)主要的功能方法,分別是: (1)構(gòu)造函數(shù)public GreedSnake(),主要用來(lái)設(shè)置初始化用戶界面。 (2)public void keyPressed()方法,主要用來(lái)對(duì)游戲的按鍵操作進(jìn)行處理。(3)void repaint()主要用來(lái)繪制游戲界面(包括蛇和食物)。 (4)
12、private void drawNode()主要用來(lái)繪制某一結(jié)點(diǎn)(蛇身或食物)。 (5)public void updateScore()方法主要用來(lái)改變計(jì)分器。 (6)void begin()方法用來(lái)控制游戲的開(kāi)始界面。SnakeModel類該類包括以下幾個(gè)成員方法:(1) public SnakeModel(GreedSnake gs,int maxX,int maxY):用來(lái)初始化界面。(2) public void changeDirection(int
13、newDirection):用來(lái)改變貪吃蛇運(yùn)動(dòng)方向。(3) public boolean moveOn():主要用來(lái)定義貪吃蛇運(yùn)動(dòng)函數(shù)。(4) public void run():主要用來(lái)描述貪吃蛇運(yùn)動(dòng)線程。(5) private Node createFood():主要用來(lái)生成食物及放置地點(diǎn)。(6) public void speedUp():主要用來(lái)定義加快蛇運(yùn)動(dòng)速度。(7) public void speedDown():主要用來(lái)放慢蛇運(yùn)動(dòng)速度。(8) public void changePauseState():主要用來(lái)改變游戲狀態(tài)(暫停或繼續(xù))。三 系統(tǒng)編譯結(jié)果分析本程序在運(yùn)行后,能
14、夠正常的相應(yīng)按鍵事件。由于程序的主要部分已經(jīng)集成為一個(gè)對(duì)象SnakeModel,所以利用鍵盤就可以實(shí)現(xiàn)操作。貪吃蛇前行的過(guò)程中,可以任意向其左或右方向改變方向,但按其前進(jìn)方向和前進(jìn)的反方向都沒(méi)有反應(yīng)。點(diǎn)擊F, S鍵后,蛇的移動(dòng)速度會(huì)根據(jù)點(diǎn)擊的次數(shù)而改變。每點(diǎn)擊一次,速度的改變頻率為0.5。點(diǎn)擊P鍵后游戲就暫停了。點(diǎn)擊R鍵后系統(tǒng)則重新載入,即游戲重新開(kāi)始。(1) 在Java編譯環(huán)境下編譯程序如下:圖1 編譯命令輸入(2) 運(yùn)行結(jié)果如下圖所示:圖2 游戲開(kāi)始界面圖3 游戲運(yùn)行圖(3) 當(dāng)蛇沒(méi)有吃到食物且碰到邊界或碰撞到自己的身體時(shí),游戲結(jié)束,此時(shí)得分為0。如果想重新開(kāi)始即按R鍵,運(yùn)行結(jié)果如下圖4所
15、示:圖4 程序結(jié)束圖(4) 當(dāng)蛇吃到食物且沒(méi)有碰到邊界或沒(méi)有碰撞到自己的身體時(shí),此時(shí)按照積分規(guī)則得到相應(yīng)的分?jǐn)?shù)。運(yùn)行結(jié)果如下圖5所示:圖5 游戲運(yùn)行圖(5) 程序異常處理:在蛇的運(yùn)行線程過(guò)程中,當(dāng)蛇撞到墻或自己的身體時(shí),將拋出一Exception類的異常對(duì)象,然后使用try-catch去捕捉這個(gè)異常。異常的處理如下:try Thread.sleep(timeInterval); catch(Exception e) break; 四 總結(jié)與心得體會(huì)本次課程設(shè)計(jì)算是完美結(jié)束,我們也按時(shí)完成了老師交給我們的課程任務(wù)。通過(guò)這次課程設(shè)計(jì),我和同組的組員從中學(xué)到了很多,因?yàn)檫@是我們?nèi)齻€(gè)共同完成的。經(jīng)過(guò)這
16、次課程設(shè)計(jì),我對(duì)這學(xué)期所學(xué)的JAVA語(yǔ)言程序設(shè)計(jì)有一個(gè)更深刻的了解,將所學(xué)的知識(shí)應(yīng)用于實(shí)踐,由于所學(xué)知識(shí)有限,為了使游戲能夠?qū)崿F(xiàn)自己預(yù)先的構(gòu)想,我通過(guò)上網(wǎng)和去圖書館找程序,比較好的流程圖及功能模塊,不斷閱讀修改代碼使程序達(dá)到預(yù)期所要實(shí)現(xiàn)的目標(biāo),完成課程設(shè)計(jì)后,可以感覺(jué)到自己對(duì)Java程序的又有了新的認(rèn)識(shí)。因?yàn)槲覀冊(cè)陂_(kāi)始做過(guò)數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì),只記得在第一次做課程設(shè)計(jì)的時(shí)候無(wú)從下手。而對(duì)于數(shù)據(jù)庫(kù)及各種應(yīng)用軟件和游戲中,我仍覺(jué)得對(duì)游戲的設(shè)計(jì)有極大的熱情。因?yàn)槠涓鱾€(gè)模塊間的聯(lián)系十分緊密,代碼重復(fù)執(zhí)行率高,當(dāng)經(jīng)過(guò)無(wú)數(shù)次的調(diào)試、修改后,能最終看到成品,有無(wú)比自豪的心情。在同一學(xué)期我們做過(guò)圖書館管理系統(tǒng)及
17、學(xué)生管理系統(tǒng)等簡(jiǎn)單的數(shù)據(jù)庫(kù)管理系統(tǒng)的課程設(shè)計(jì),思想大致相似,變化范圍有限,沒(méi)有太多自己可發(fā)揮的余地。綜合運(yùn)用以前所學(xué)習(xí)的知識(shí),設(shè)計(jì)一個(gè)JAVA游戲,并能實(shí)現(xiàn)以下的功能:游戲暫停、游戲重新開(kāi)始、游戲的結(jié)束??傊ㄟ^(guò)本次的課程設(shè)計(jì),使我平時(shí)學(xué)到的理論知識(shí)得到了很好地升華,理論與實(shí)際得到一次很好的結(jié)合,為我今后參加工作打下了堅(jiān)實(shí)的基礎(chǔ),使我受益匪淺。除此之外,我通過(guò)這次課程設(shè)計(jì)的完成也體會(huì)到了團(tuán)隊(duì)合作的重要性,同學(xué)間的互相幫助很好的幫助我們?cè)谶^(guò)程中解決困難。不僅如此,團(tuán)隊(duì)合作對(duì)我們?cè)谌蘸蠊ぷ骷吧畹穆猛局幸矔?huì)成為學(xué)習(xí)的一項(xiàng)重要能力。五 參考文獻(xiàn)1 郭學(xué)會(huì),何留杰.Java程序設(shè)計(jì)項(xiàng)目化教程北京:國(guó)
18、防工業(yè)出版社. 2013.82 耿祥義,張躍平.Java 2實(shí)用教程(第三版)北京:清華大學(xué)出版社,2006.3 朱福喜面向?qū)ο笈cJava程序設(shè)計(jì)北京: 清華大學(xué)出版社2009.34 李尊朝.蘇軍.Java語(yǔ)言程序設(shè)計(jì)(第二版).北京:中國(guó)鐵道出版社,2009.5 黃曉東.Java課程設(shè)計(jì)案例精編(第二版).北京:中國(guó)水利水電出版社,2008.6 陸光義,宋現(xiàn)鋒.Java游戲編程導(dǎo)學(xué). 北京:清華大學(xué)出版社,2004.7 劉萬(wàn)軍.Java 6程序設(shè)計(jì)實(shí)踐教程.北京:清華大學(xué)出版社,2009.5六 附錄 實(shí)驗(yàn)代碼程序代碼:import java.awt.*; import java.awt.ev
19、ent.*; import javax.swing.*; import java.util.*; /主類 public class GreedSnake extends KeyAdapter/繼承適配器用于接收鍵盤事件 JFrame mainFrame; Canvas paintCanvas; /定義一個(gè)空白繪圖區(qū)域 JLabel labelScore;/計(jì)分牌 SnakeModel snakeModel=null;/ 蛇 public static final int DEFAULT_WIDTH=500; public static final int DEFAULT_HEIGHT=300;
20、 public static final int nodeWidth=10; public static final int nodeHeight=10; /GreedSnake():初始化游戲界面 public GreedSnake() /設(shè)置界面元素 mainFrame=new JFrame("貪吃蛇游戲"); Container cp=mainFrame.getContentPane(); labelScore=new JLabel("您的所得分?jǐn)?shù)為:",JLabel.CENTER); cp.add(labelScore,BorderLayout.
21、NORTH); paintCanvas=new Canvas(); paintCanvas.setSize(DEFAULT_WIDTH+1,DEFAULT_HEIGHT+1); paintCanvas.addKeyListener(this); /游戲區(qū)注冊(cè)鍵盤響應(yīng)事件 cp.add(paintCanvas,BorderLayout.CENTER); JPanel panelButtom=new JPanel(); panelButtom.setLayout(new GridLayout(4,1); JLabel labelHelp;/ 幫助信息 標(biāo)簽 labelHelp=new JLabel
22、("按 P 鍵暫停游戲",JLabel.CENTER); panelButtom.add(labelHelp); labelHelp=new JLabel("按 C 鍵繼續(xù)游戲",JLabel.CENTER); panelButtom.add(labelHelp); labelHelp=new JLabel("按 F 或 S鍵改變速度",JLabel.CENTER); panelButtom.add(labelHelp); labelHelp=new JLabel("按R鍵重新開(kāi)始游戲",JLabel.CENTER
23、); panelButtom.add(labelHelp); cp.add(panelButtom,BorderLayout.SOUTH); mainFrame.addKeyListener(this); mainFrame.pack(); mainFrame.setResizable(false); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setVisible(true); begin(); /keyPressed():按鍵檢測(cè) public void keyPressed(KeyEvent e)
24、 int keyCode=e.getKeyCode(); if(snakeModel.running) switch(keyCode) case KeyEvent.VK_UP: snakeModel.changeDirection(SnakeModel.UP); break; case KeyEvent.VK_DOWN: snakeModel.changeDirection(SnakeModel.DOWN); break; case KeyEvent.VK_LEFT: snakeModel.changeDirection(SnakeModel.LEFT); break; case KeyEve
25、nt.VK_RIGHT: snakeModel.changeDirection(SnakeModel.RIGHT); break; /按鍵F/S響應(yīng)加速事件: case KeyEvent.VK_F: snakeModel.speedUp();/ 加速 break; case KeyEvent.VK_S: snakeModel.speedDown();/ 減速 break; /按P/C響應(yīng)暫停繼續(xù)事件 case KeyEvent.VK_P: case KeyEvent.VK_C: snakeModel.changePauseState();/ 暫停或繼續(xù) break; default: /重新開(kāi)
26、始 if(keyCode=KeyEvent.VK_R | keyCode=KeyEvent.VK_ENTER) snakeModel.running=false; begin(); /repaint():繪制游戲界面(包括蛇和食物) void repaint() Graphics g=paintCanvas.getGraphics(); /畫背景顏色 g.setColor(Color.LIGHT_GRAY); g.fillRect(0,0,DEFAULT_WIDTH,DEFAULT_HEIGHT); /畫貪吃蛇 g.setColor(Color.BLUE); LinkedList<Nod
27、e> na=snakeModel.nodeArray; Iterator it=na.iterator(); /遍歷整個(gè)集合中的元素 while(it.hasNext() /檢查集合序列中是否還有元素 Node n=(Node)it.next(); /用next()方法獲得序列中的下一個(gè)元素 drawNode(g,n); / 畫食物顏色 g.setColor(Color.RED); /畫食物顏色 Node n=snakeModel.food; drawNode(g,n); updateScore(); /drawNode():繪畫某一結(jié)點(diǎn)(蛇身或食物) private void draw
28、Node(Graphics g,Node n) g.fillRect(n.x*nodeWidth,n.y*nodeHeight,nodeWidth-1,nodeHeight-1); /updateScore():改變計(jì)分牌 public void updateScore() String s="您的所得分?jǐn)?shù)為: "+snakeModel.score; labelScore.setText(s); /begin():游戲開(kāi)始,放置貪吃蛇 void begin() if(snakeModel=null|!snakeModel.running) snakeModel=new Sn
29、akeModel(this,DEFAULT_WIDTH/nodeWidth, DEFAULT_HEIGHT/nodeHeight); (new Thread(snakeModel).start(); /開(kāi)始啟動(dòng)貪吃蛇線程 /main():主函數(shù) public static void main(String args) GreedSnake gs=new GreedSnake(); /Node:結(jié)點(diǎn)類 class Node int x; int y; Node(int x,int y) this.x=x; this.y=y; /SnakeModel:貪吃蛇模型 class SnakeModel
30、implements Runnable /貪吃蛇模型繼承runnable()接口 GreedSnake gs; boolean matrix;/ 界面數(shù)據(jù)保存在數(shù)組里 LinkedList<Node> nodeArray=new LinkedList<Node>(); Node food; int maxX;/最大長(zhǎng)度 int maxY;/最大寬度 int direction=2;/定義蛇的運(yùn)動(dòng)方向 boolean running=false; int timeInterval=200;/ 間隔時(shí)間(速度) double speedChangeRate=0.5;/ 速度
31、的改變程度 boolean paused=false;/ 游戲狀態(tài) int score=0; int countMove=0; / UP和DOWN是偶數(shù),RIGHT和LEFT是奇數(shù) public static final int UP=2; public static final int DOWN=4; public static final int LEFT=1; public static final int RIGHT=3; /GreedModel():初始化界面 public SnakeModel(GreedSnake gs,int maxX,int maxY) this.gs=gs;
32、 this.maxX=maxX; this.maxY=maxY; matrix=new booleanmaxX; for(int i=0;i<maxX;+i) matrixi=new booleanmaxY; Arrays.fill(matrixi,false);/ 沒(méi)有蛇和食物的地區(qū)置false /初始化貪吃蛇 int initArrayLength=maxX>20?10:maxX/2; for(int i=0;i<initArrayLength;+i) int x=maxX/2+i; int y=maxY/2; nodeArray.addLast(new Node(x,y
33、); matrixxy=true;/ 蛇身處依次置true food=createFood(); matrixfood.xfood.y=true;/ 食物處置true /changeDirection():改變運(yùn)動(dòng)方向 public void changeDirection(int newDirection) if(direction%2!=newDirection%2) / 避免左右/上下沖突 direction=newDirection; /moveOn():貪吃蛇運(yùn)動(dòng)函數(shù) public boolean moveOn() Node n=(Node)nodeArray.getFirst();
34、 int x=n.x; /貪吃蛇的運(yùn)動(dòng)位置(x,y) int y=n.y; switch(direction) case UP: y-; break; case DOWN: y+; break; case LEFT: x-; break; case RIGHT: x+; break; if(0<=x&&x<maxX)&&(0<=y&&y<maxY) if(matrixxy) / 吃到食物或者撞到身體 if(x=food.x&&y=food.y)/ 吃到食物 nodeArray.addFirst(food);/ 在頭
溫馨提示
- 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ù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度離婚協(xié)議書:房產(chǎn)各半分割及婚姻解除后共同財(cái)產(chǎn)處理合同
- 二零二五年度酒店客房經(jīng)營(yíng)權(quán)及服務(wù)質(zhì)量標(biāo)準(zhǔn)合同
- 二零二五年度特色小鎮(zhèn)房屋買賣意向協(xié)議
- 二零二五年度國(guó)際項(xiàng)目資金代管合作協(xié)議
- 二零二五年度股東法人免責(zé)責(zé)任界定協(xié)議
- 河北省二零二五年度企業(yè)職工工傷認(rèn)定服務(wù)合同
- 2025年度責(zé)任保險(xiǎn)合同糾紛和解協(xié)議書
- 二零二五年度宿舍管理免責(zé)合同
- 二零二五年度手房買賣定金合同履行及違約責(zé)任協(xié)議
- 二零二五年度房地產(chǎn)銷售居間與綠色建筑節(jié)能改造服務(wù)合同
- 生物-天一大聯(lián)考2025屆高三四省聯(lián)考(陜晉青寧)試題和解析
- 2024廣西公務(wù)員考試及答案(筆試、申論A、B類、行測(cè))4套 真題
- 川教版六年級(jí)《生命.生態(tài).安全》下冊(cè)第1課《我們的閑暇時(shí)光》課件
- 汽車坡道玻璃雨棚施工方案
- 中國(guó)旅游地理(高職)全套教學(xué)課件
- 跨文化商務(wù)交際導(dǎo)論 課件 Unit 1 Culture
- 高效空調(diào)制冷機(jī)房智能控制系統(tǒng)技術(shù)規(guī)程
- 新高考英語(yǔ)讀后續(xù)寫——人物描寫高級(jí)表達(dá)素材
- 基于消費(fèi)者心理的中國(guó)奢侈品營(yíng)銷策略分析——以CHANEL為例市場(chǎng)營(yíng)銷專業(yè)
- 單元三 電子合同法律實(shí)務(wù)
- 《心理拓展訓(xùn)練》教學(xué)大綱
評(píng)論
0/150
提交評(píng)論