java貪吃蛇課程設(shè)計(jì)_第1頁(yè)
java貪吃蛇課程設(shè)計(jì)_第2頁(yè)
java貪吃蛇課程設(shè)計(jì)_第3頁(yè)
java貪吃蛇課程設(shè)計(jì)_第4頁(yè)
java貪吃蛇課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、設(shè)計(jì)人員:設(shè)計(jì)地點(diǎn)(單位): A5-103 設(shè)計(jì)題目: 貪吃蛇游戲完成日期: 年 月 日 指導(dǎo)教師評(píng)語(yǔ):_ 成績(jī)(五級(jí)記分制):_ 教師簽名:_摘要近年來(lái),java作為一種新的編程語(yǔ)言,以其簡(jiǎn)單性、可移植性和平臺(tái)無(wú)關(guān)性等優(yōu)點(diǎn),得到了各個(gè)國(guó)家廣泛地認(rèn)可。本文基于java技術(shù)和Eclipse開(kāi)發(fā)環(huán)境,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)操作簡(jiǎn)單、界面美觀的“貪吃蛇”游戲。“貪吃蛇”游戲是一個(gè)經(jīng)典的游戲,它因操作簡(jiǎn)單、娛樂(lè)性強(qiáng)而廣受歡迎。就整個(gè)游戲來(lái)說(shuō),目的是通過(guò)本游戲的設(shè)計(jì)與實(shí)現(xiàn),達(dá)到學(xué)習(xí)java技術(shù)和熟悉軟件開(kāi)發(fā)流程的目的。關(guān)鍵詞:java , 貪吃蛇, eclipse目錄緒論11 Java的概述21.1 java

2、的簡(jiǎn)介21.2 環(huán)境配置21.2.2 系統(tǒng)工具的選擇安裝32 系統(tǒng)介紹32.1 系統(tǒng)的介紹32.2 設(shè)計(jì)目的42.3 需求分析42.3.1 游戲形狀需求42.3.2 鍵盤事件處理42.3.3 顯示需求42.3.4 接口控制43 系統(tǒng)設(shè)計(jì)53.1 系統(tǒng)所需定義的類53.2 功能設(shè)計(jì)64 系統(tǒng)實(shí)現(xiàn)64.1 界面初始化64.2 蛇體實(shí)現(xiàn)84.2.1 蛇體坐標(biāo)類84.2.2 初始化蛇體94.2.3 蛇體變化94.3 食物實(shí)現(xiàn)124.4 障礙物實(shí)現(xiàn)124.5 游戲控制實(shí)現(xiàn)124.6 排行榜實(shí)現(xiàn)125 游戲的測(cè)試136 總結(jié)14致 謝14參考文獻(xiàn)15緒論“貪吃蛇”游戲是一個(gè)經(jīng)典的游戲,對(duì)于程序來(lái)說(shuō)貪吃蛇制

3、作相對(duì)簡(jiǎn)單,而且邏輯性強(qiáng),通常是要步入游戲開(kāi)發(fā)這個(gè)隊(duì)伍前必練的項(xiàng)目。貪吃蛇這個(gè)游戲的制作方法對(duì)于以前的我而言是很神秘的,我希望通過(guò)我們所學(xué)的知識(shí)和自己的努力把它剖析起來(lái)。正是由于這個(gè)想法,本文基于java技術(shù)和Eclipse開(kāi)發(fā)環(huán)境,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)操作簡(jiǎn)單、界面美觀的“貪吃蛇”游戲。由于時(shí)間的緊迫和技術(shù)有限,編寫的貪吃蛇游戲還是相對(duì)簡(jiǎn)單,但就整個(gè)游戲來(lái)說(shuō),目的是通過(guò)本游戲的設(shè)計(jì)與實(shí)現(xiàn),達(dá)到學(xué)習(xí)java技術(shù)和熟悉軟件開(kāi)發(fā)流程的目的。我相信在以后通過(guò)自己不斷的努力我會(huì)在編程這條路上越走越遠(yuǎn)。本文首先介紹了java技術(shù),對(duì)java技術(shù)進(jìn)行了概述,然后對(duì)開(kāi)發(fā)工具進(jìn)行了選擇,又進(jìn)行了需求分析進(jìn)而通過(guò)j

4、ava語(yǔ)言設(shè)計(jì)出了貪吃蛇這個(gè)經(jīng)典的小游戲,為了保證代碼的正確性和可靠性最后還進(jìn)行了系統(tǒng)測(cè)試。1Java的概述1.1 java的簡(jiǎn)介java最初被命名為Oak,目標(biāo)設(shè)定在家用電器等小型系統(tǒng)的編程語(yǔ)言,來(lái)解決諸如電視機(jī)、電話、鬧鐘、烤面包機(jī)等家用電器的控制和通訊問(wèn)題。由于這些智能化家電的市場(chǎng)需求沒(méi)有預(yù)期的高,Sun放棄了該項(xiàng)計(jì)劃。就在Oak幾近失敗之時(shí),隨著互聯(lián)網(wǎng)的發(fā)展,Sun看到了Oak在計(jì)算機(jī)網(wǎng)絡(luò)上的廣闊應(yīng)用前景,于是改造了Oak,以“Java”的名稱正式發(fā)布。Java 不同于一般的編譯執(zhí)行計(jì)算機(jī)語(yǔ)言和解釋執(zhí)行計(jì)算機(jī)語(yǔ)言。它首先將源代碼編譯成二進(jìn)制字節(jié)碼(bytecode),然后依賴各種不同平

5、臺(tái)上的虛擬機(jī)來(lái)解釋執(zhí)行字節(jié)碼,從而實(shí)現(xiàn)了“一次編譯、到處執(zhí)行”的跨平臺(tái)特性。不過(guò),每次的編譯執(zhí)行需要消耗一定的時(shí)間,這同時(shí)也在一定程度上降低了 Java 程序的運(yùn)行效率。但在 J2SE 1.4.2 發(fā)布后,Java 的執(zhí)行速度有了大幅提升3。Java是一種跨平臺(tái),適合于分布式計(jì)算環(huán)境的面向?qū)ο缶幊陶Z(yǔ)言。 具體來(lái)說(shuō),它具有如下特性: 簡(jiǎn)單性、面向?qū)ο蟆⒎植际?、健壯性、結(jié)構(gòu)中立、安全性、可移植、解釋的、高性能、多線程、動(dòng)態(tài)性等。1.2 環(huán)境配置1.2.1 JDK安裝 安裝JDK,安裝過(guò)程中可以自定義安裝目錄等信息,例如我們選擇安裝目錄為D:javajdk1.6.0_02; 安裝完成后,右擊“我的電

6、腦”,點(diǎn)擊“屬性”; 選擇“高級(jí)”選項(xiàng)卡,點(diǎn)擊“環(huán)境變量” 在“系統(tǒng)變量”中,設(shè)置三項(xiàng)屬性,JAVA_HOME,PATH,CLASSPATH,若已存在則點(diǎn)擊“編輯”,不存在則點(diǎn)擊“新建”; JAVA_HOME指明JDK安裝路徑?!伴_(kāi)始”>“運(yùn)行”,鍵入“cmd”; 鍵入命令“java -version”,“java”,“javac”幾個(gè)命令,出現(xiàn)畫面,說(shuō)明環(huán)境變量配置成功。1.2.2 系統(tǒng)工具的選擇安裝本論文采用的工具是Eclipse。Eclipse 是一個(gè)開(kāi)放源代碼的、基于 Java 的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。幸運(yùn)的是,Ec

7、lipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 Java 開(kāi)發(fā)工具(Java Development Tools,JDT)。 2 系統(tǒng)介紹2.1 系統(tǒng)的介紹本論文設(shè)計(jì)的游戲名稱為貪吃蛇,蛇身是有很多的小方塊組成的,蛇頭與蛇身都是用小方塊來(lái)組成,每一個(gè)小方塊是蛇身上的最小單位,貪吃蛇所吃的食物也是有一個(gè)個(gè)小方塊兒組成,食物會(huì)隨機(jī)出現(xiàn),當(dāng)蛇吃掉一個(gè)小方塊兒后蛇身會(huì)變長(zhǎng)然后會(huì)隨機(jī)出現(xiàn)下一個(gè)小方塊兒。障礙物也會(huì)隨機(jī)出現(xiàn),而且隨著時(shí)間增長(zhǎng),障礙物會(huì)增多,當(dāng)蛇頭碰到蛇身、障礙物或者邊框的時(shí)游戲會(huì)自動(dòng)結(jié)束。2.2 設(shè)計(jì)目的綜合運(yùn)用在校所學(xué)的知識(shí)和技能,設(shè)計(jì)并實(shí)現(xiàn)貪吃蛇游戲,使自己熟悉應(yīng)用系統(tǒng)的開(kāi)發(fā)的過(guò)程,培養(yǎng)獨(dú)立

8、的思考能力,校驗(yàn)學(xué)習(xí)效果和動(dòng)手能力,提高實(shí)踐動(dòng)手能力。 需求分析在一定的范圍內(nèi), 給出一條小蛇和隨機(jī)出現(xiàn)一個(gè)食物與一個(gè)障礙物,當(dāng)小蛇吃到食物時(shí)蛇身就長(zhǎng)長(zhǎng)。考慮到用戶需求對(duì)蛇的移動(dòng)做了多組快捷鍵設(shè)置,游戲整體界面簡(jiǎn)潔,操作簡(jiǎn)單。2.3.1 游戲形狀需求繪制簡(jiǎn)潔清晰的小蛇和食物,小蛇由幾個(gè)方塊組成,食物由一個(gè)圖片組成。障礙物由多個(gè)圖片組成隨機(jī)形狀。2.3.2 鍵盤事件處理小蛇可以通過(guò)鍵盤方向鍵(上,下,左,右)或者按鍵(W,S,A,D)進(jìn)行方向的移動(dòng)。當(dāng)蛇頭碰到障礙物,蛇身或者墻壁的時(shí)候游戲會(huì)結(jié)束。2.3.3 顯示需求當(dāng)小蛇吃掉食物后會(huì)變長(zhǎng),并且吃完食物時(shí)食物會(huì)消失,并立即產(chǎn)生一個(gè)1個(gè)新的食物,蛇

9、身隨著蛇的移動(dòng)不斷刷新。2.3.4 接口控制本軟件通過(guò)鍵盤進(jìn)行操作,在windows操作系統(tǒng)下,利用鍵盤的按鍵進(jìn)行操作,要使用鍵盤的接口事件。3 系統(tǒng)設(shè)計(jì)3.1 系統(tǒng)所需定義的類游戲設(shè)計(jì)中所涉及的相關(guān)資源,如圖:圖3.1 系統(tǒng)資源涉及資源如下:1、SnakeMain.java 類是程序運(yùn)行主類,通過(guò)調(diào)用相關(guān)資源實(shí)現(xiàn)游戲運(yùn)行。2、SnakeAt.java 類是蛇的實(shí)體類,包含蛇身點(diǎn)的橫坐標(biāo)與縱坐標(biāo)屬性,通過(guò)多個(gè)此類對(duì)象實(shí)現(xiàn)蛇身。3、SnakeFrame 類是游戲主體設(shè)計(jì)類,包含游戲界面、蛇身繪制,游戲設(shè)置、監(jiān)聽(tīng),蛇身移動(dòng)操作。4、image文件夾包含游戲主體背景圖片,食物圖片與障礙物圖片。5、J

10、dbc_connect.java 連接ORACLE數(shù)據(jù)庫(kù),實(shí)現(xiàn)記錄游戲記錄與游戲排行。6、score.java 游戲記錄類。1、 主界面通過(guò)一個(gè)窗口與各按鈕實(shí)現(xiàn)主界面設(shè)計(jì),主界面主體為一個(gè)窗口,通過(guò)繪制一個(gè)方框做為游戲邊界,以圖片分別實(shí)現(xiàn)蛇身與障礙物顯示。按鈕與狀態(tài)進(jìn)行游戲控制與顯示游戲狀態(tài)。2、 游戲操作通過(guò)對(duì)游戲線程控制實(shí)現(xiàn)游戲不同難度(移動(dòng)速度)設(shè)定,通過(guò)鍵盤監(jiān)聽(tīng)器設(shè)置實(shí)現(xiàn)貪吃蛇移動(dòng)方向控制,用集合存儲(chǔ)蛇身,通過(guò)對(duì)集合的操作實(shí)現(xiàn)蛇身的移動(dòng),吃到食物集合長(zhǎng)度加一,以線程中斷彈窗實(shí)現(xiàn)游戲結(jié)束。3、 參數(shù)設(shè)置游戲開(kāi)始時(shí)設(shè)置保護(hù)蛇頭操作,障礙物與食物的出現(xiàn)位置為隨機(jī)的,且隨著游戲時(shí)間增長(zhǎng)障礙物數(shù)

11、量增加,且食物與障礙物不得出現(xiàn)在蛇身存在的位置,使用ORACLE數(shù)據(jù)庫(kù)記錄游戲記錄并進(jìn)行排行操作。4 系統(tǒng)實(shí)現(xiàn)public void paintComponent(Graphics g) super.paintComponent(g);g.drawImage(img,5, 45, 765, 510,null); /設(shè)置一個(gè)方框,窗口的游戲主界面/繪制img中當(dāng)前可用的圖像。/g.drawRect(5, 45, 765, 510);/ 51,34g.drawString("分?jǐn)?shù):" + score, 650, 20);g.drawString("速度:"

12、+ speed, 650, 35);if (start) /開(kāi)始游戲g.setColor(Color.RED); /設(shè)置游戲中的食物的顏色為紅色g.drawImage(img1,5 + rx * 15, 45 + ry * 15, 15, 15,null,null); /蛇開(kāi)始出現(xiàn)/g.fillOval(5 + rx * 15, 45 + ry * 15, 15, 15);g.setColor(Color.white); /設(shè)置蛇的顏色for (int i = 0; i < list.size(); i+) /畫蛇身,有幾個(gè)就畫幾個(gè)g.fill3DRect(5 + list.get(i)

13、.getX() * 15, /使用當(dāng)前顏色填充突起3d方塊。45 + list.get(i).getY() * 15, 15, 15,true);/設(shè)置障礙物Set<SnakeAct> set = hinderSet;/障礙物節(jié)點(diǎn)集合Iterator<SnakeAct> it1 = set.iterator();while (it1.hasNext() SnakeAct f = (SnakeAct) it1.next();g.drawImage(img2,5 + f.getX() * 15, 45 + f.getY() * 15, 15, 15,null,null);初

14、始化結(jié)果:圖3.2 初始化界面4.2蛇體實(shí)現(xiàn)4.2.1 蛇體坐標(biāo)類package testfile;public class SnakeAct /蛇體坐標(biāo)類private int x; /蛇身點(diǎn)橫坐標(biāo)private int y; /蛇身點(diǎn)縱坐標(biāo)public SnakeAct(int x, int y) super();this.x = x;this.y = y;public SnakeAct() super();public int getX() return x;public void setX(int x) this.x = x;public int getY() return y;pub

15、lic void setY(int y) this.y = y;通過(guò)兩個(gè)坐標(biāo)確定組成蛇身方塊的位置。4.2.2 初始化蛇體g.drawImage(img1,5 + rx * 15, 45 + ry * 15, 15, 15,null,null); /蛇開(kāi)始出現(xiàn)g.setColor(Color.white); /設(shè)置蛇的顏色for (int i = 0; i < list.size(); i+) /畫蛇身,有幾個(gè)就畫幾個(gè)g.fill3DRect(5 + list.get(i).getX() * 15, /使用當(dāng)前顏色填充突起3d方塊。45 + list.get(i).getY() * 15

16、, 15, 15,true);4.2.3 蛇體變化public void otherMove() /蛇身移動(dòng)SnakeAct tempAct = new SnakeAct();for (int i = 0; i < list.size(); i+) if (i=1) /保護(hù)蛇頭list.get(i).setX(list.get(0).getX();list.get(i).setY(list.get(0).getY();else if (i>1) tempAct = list.get(i-1);list.set(i-1, list.get(i);list.set(i,tempAct)

17、; private void eat() /吃到食物 if (rx=list.get(0).getX()&&ry=list.get(0).getY() createFood();SnakeAct tempAct = new SnakeAct();tempAct.setX(list.get(list.size()-1).getX();tempAct.setY(list.get(list.size()-1).getY();list.add(tempAct);score += 100+100*speed;tempeat1+=1;if (tempeat1-tempeat2>=5)

18、 tempeat2 += 5;if (speed<9) speed+=1;if (speed-tempspeed>=3) tempspeed+=3;setHinder();public void run() /蛇 自動(dòng)移動(dòng)/ TODO Auto-generated method stubwhile (true) if (start) switch (temp) case 1:move(0, -1);break;case 2:move(0, 1);break;case 3:move(1, 0);break;case 4:move(-1, 0);break;default:move(1

19、, 0);break;repaint();try Thread.sleep(500-(50*speed); /移動(dòng)速率 catch (InterruptedException e) e.printStackTrace();初始化設(shè)置蛇體基本方塊的形狀與顏色,切對(duì)初始蛇頭文職進(jìn)行限制,避免開(kāi)始游戲時(shí)由于蛇頭位置導(dǎo)致游戲直接結(jié)束,通過(guò)對(duì)蛇身集合的操作實(shí)現(xiàn)蛇身的增長(zhǎng)與蛇的移動(dòng)。4.3食物實(shí)現(xiàn)通過(guò)隨機(jī)函數(shù)生成食物坐標(biāo),且對(duì)食物出現(xiàn)位置進(jìn)行判斷,食物不能出現(xiàn)在蛇身坐標(biāo)上。4.4 障礙物實(shí)現(xiàn)通過(guò)隨機(jī)函數(shù)生成障礙物坐標(biāo)進(jìn)行障礙物顯示,并對(duì)障礙物位置進(jìn)行判斷,不允許障礙物出現(xiàn)在蛇身坐標(biāo)。4.5游戲控制實(shí)現(xiàn)通過(guò)

20、鍵位監(jiān)聽(tīng)器對(duì)鍵位響應(yīng)與相關(guān)操作實(shí)現(xiàn)游戲操作,控制貪吃蛇的上下左右的移動(dòng),當(dāng)沒(méi)有監(jiān)聽(tīng)到響應(yīng)鍵位操作時(shí)貪吃蛇保持當(dāng)前移動(dòng)狀態(tài)。4.6 排行榜實(shí)現(xiàn)通過(guò)ORACLE數(shù)據(jù)庫(kù)記錄游戲記錄,從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)并排序,通過(guò)窗口顯示排行數(shù)據(jù),實(shí)現(xiàn)游戲排行榜功能。5 游戲的測(cè)試測(cè)試的目的是盡可能的發(fā)現(xiàn)潛在的錯(cuò)誤和缺陷,為了保證系統(tǒng)的質(zhì)量和可靠性,我們對(duì)游戲進(jìn)行了測(cè)試。在開(kāi)發(fā)的每一個(gè)階段都應(yīng)精心設(shè)計(jì),并利用實(shí)例來(lái)運(yùn)行程序,使可以發(fā)現(xiàn)錯(cuò)誤。系統(tǒng)的測(cè)試是為了發(fā)現(xiàn)錯(cuò)誤而要執(zhí)行的過(guò)程。由于技術(shù)水平有限此課程設(shè)計(jì)所設(shè)計(jì)的貪吃蛇游戲過(guò)于簡(jiǎn)單,但是也付出了巨大的努力,所以無(wú)論簡(jiǎn)單與否測(cè)試都是必須執(zhí)行的過(guò)程。本程序進(jìn)行測(cè)試后沒(méi)有發(fā)

21、現(xiàn)異常。6 總結(jié)此次課程設(shè)計(jì)讓我們學(xué)到很多,也了解了程序開(kāi)發(fā)的具體過(guò)程。在學(xué)習(xí)、使用java的過(guò)程中,讓我沒(méi)們對(duì)編程語(yǔ)言有了新的認(rèn)識(shí)。在不斷的調(diào)試、修改的過(guò)程當(dāng)中,我們對(duì)程序的設(shè)計(jì)與構(gòu)架在整體上有了長(zhǎng)足的進(jìn)步。在做java課程設(shè)計(jì)以前,我們對(duì)Java游戲開(kāi)發(fā)只是停留在理論知識(shí)的水平上,缺乏實(shí)際的軟件開(kāi)發(fā)經(jīng)驗(yàn)。這次通過(guò)做java課程設(shè)計(jì),我們完成了貪吃蛇游戲的軟件開(kāi)發(fā)任務(wù)。在整個(gè)開(kāi)發(fā)過(guò)程中遇到了很多問(wèn)題,如蛇的移動(dòng)的表示、圖形化界面的設(shè)計(jì)問(wèn)題,但這些問(wèn)題最終都被攻克了下來(lái)。首先,完成了從局部到整體從細(xì)節(jié)到大局的轉(zhuǎn)變。設(shè)計(jì)過(guò)程中,經(jīng)常會(huì)遇到困難,我們學(xué)會(huì)通過(guò)反復(fù)思考和測(cè)試,然后找出自己的錯(cuò)誤并加以改正,再進(jìn)行下一個(gè)步驟。這個(gè)程序就是在這樣反復(fù)過(guò)程序中一點(diǎn)一點(diǎ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ù)網(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)論