九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

面向?qū)ο笳n程設(shè)計java貪吃蛇

上傳人:1888****888 文檔編號:36234177 上傳時間:2021-10-29 格式:DOC 頁數(shù):19 大?。?53.50KB
收藏 版權(quán)申訴 舉報 下載
面向?qū)ο笳n程設(shè)計java貪吃蛇_(dá)第1頁
第1頁 / 共19頁
面向?qū)ο笳n程設(shè)計java貪吃蛇_(dá)第2頁
第2頁 / 共19頁
面向?qū)ο笳n程設(shè)計java貪吃蛇_(dá)第3頁
第3頁 / 共19頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《面向?qū)ο笳n程設(shè)計java貪吃蛇》由會員分享,可在線閱讀,更多相關(guān)《面向?qū)ο笳n程設(shè)計java貪吃蛇(19頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、面向?qū)ο笳n程設(shè)計1. 需求分析1.1游戲開發(fā)的可行性游戲開發(fā)至今已經(jīng)有30多年,在這個短暫的時期里,隨著硬件水平的提高,游戲開發(fā)新技術(shù)層出不窮,經(jīng)典游戲比比皆是。游戲這個名稱一直就存在于每個人的日常生活中,如猜拳游戲、猜謎游戲、大地游戲、球類游戲等,林林總總,不勝枚舉,甚至于有些流行歌曲把人生也比喻為游戲,好比“一場游戲一場夢” 。因此,游戲?qū)τ诂F(xiàn)代人的成長歷程,絕對是一個不可或缺的重要角色。1.2設(shè)計目的綜合運用在校期間所學(xué)理論知識和技能,設(shè)計開發(fā)貪吃蛇游戲,使自己熟悉應(yīng)用系統(tǒng)的開發(fā)過程,培養(yǎng)獨立思考能力,檢驗學(xué)習(xí)效果和動手能力,提高工程實踐能力。1.3游戲需求 給出1條小蛇和隨機出1個食物

2、當(dāng)小蛇吃到食物時就加分。1.3.1游戲界面需求良好的用戶界面,有分?jǐn)?shù)顯示。有存取檔功能,并且可以暫停,還有“英雄榜”記錄分?jǐn)?shù)排名情況,并且可調(diào)節(jié)小蛇運動速度。1.3.2游戲形狀(方塊)需求良好的方塊形狀設(shè)計,繪制小蛇和食物,小蛇由幾個方塊組成,食物由1個方塊組成。1.3.3鍵盤處理事件小蛇可通過鍵盤方向鍵(上、下、左、右鍵)進(jìn)行向上、向下、向左、向右移動。1.3.4顯示需求當(dāng)小蛇吃掉幾個食物后會變長,并且吃完食物時食物會消失,并立即隨機生成1個新的食物。1.3.5 接口控制本軟件需求通過鍵盤進(jìn)行操作,在Windows的操作系統(tǒng)下,利用鍵盤的上、下、左、右鍵對小蛇進(jìn)行移動操作,要使用鍵盤的接口事

3、件。2. 功能設(shè)計及源程序的主要部分2.1 游戲流程圖2.2 功能的實現(xiàn),類的實現(xiàn)及類層次 2.2.1游戲界面public SnakeFrame() setSize(width, height); /設(shè)置窗體大小setTitle(貪吃蛇); /標(biāo)題SnakePanel panel = new SnakePanel();/游戲面板add(panel); /將面板添加到窗體中setLocation(260, 160); /設(shè)置窗體位置setVisible(true);setResizable(false); /禁用窗體最大化2.2.2功能按鈕public SnakePanel() /構(gòu)造函數(shù)/添加

4、功能按鈕setLayout(null);add(startGame);add(stopGame);add(saveGame);add(listGame);add(newGame);add(exitGame);/設(shè)置位置startGame.setBounds(402, 50, 80, 40);stopGame.setBounds(402, 100, 80, 40);saveGame.setBounds(402, 150, 80, 40);listGame.setBounds(402,200, 80, 40);newGame.setBounds(402, 250, 80, 40);exitGame

5、.setBounds(402, 300, 80, 40);/添加監(jiān)視器ButtonListener btnListener=new ButtonListener();startGame.addActionListener(btnListener);stopGame.addActionListener(btnListener);saveGame.addActionListener(btnListener);listGame.addActionListener(btnListener);newGame.addActionListener(btnListener);exitGame.addActio

6、nListener(btnListener);/取消所有 Button 的焦點startGame.setFocusable(false);stopGame.setFocusable(false);saveGame.setFocusable(false);listGame.setFocusable(false);newGame.setFocusable(false);/速度String speed=1,2,3,4,5,預(yù)設(shè);combspeed=new JComboBox(speed);combspeed.setBorder(BorderFactory.createTitledBorder(速度)

7、;add(combspeed);/添加組合框combspeed.setBounds(402,340,80,46);comboBoxListener comblistener=new comboBoxListener();combspeed.addActionListener(comblistener);/添加監(jiān)視器combspeed.setFocusable(false); /取消焦點initGame(); /初始化游戲addKeyListener(new Listener();/添加鍵盤按鍵監(jiān)視器setFocusable(true); /將焦點設(shè)置在當(dāng)前面板上 以便通過鍵盤控制游戲thisw

8、in=this;2.2.3鍵盤監(jiān)視器class Listener implements KeyListener public void keyPressed(KeyEvent e) int key = e.getKeyCode();/獲得鍵碼if (key = KeyEvent.VK_LEFT & direction != 2)direction = 0; /左else if (key = KeyEvent.VK_UP & direction != 3)direction = 1; /上else if (key = KeyEvent.VK_RIGHT & direction != 0)dire

9、ction = 2; /右else if (key = KeyEvent.VK_DOWN & direction != 1)direction = 3; /下public void keyReleased(KeyEvent e) Overridepublic void keyTyped(KeyEvent e) public void keyPressed(KeyEvent e) int key = e.getKeyCode();/獲得鍵碼if (key = KeyEvent.VK_LEFT & direction != 2)direction = 0; /左else if (key = Key

10、Event.VK_UP & direction != 3)direction = 1; /上else if (key = KeyEvent.VK_RIGHT & direction != 0)direction = 2; /右else if (key = KeyEvent.VK_DOWN & direction != 1)direction = 3; /下2.2.4蛇和食物的變化2.2.4.1蛇和食物的產(chǎn)生:public void drawSnake(Graphics g)Graphics2D g2d = (Graphics2D) g;for(int i=0;iarrayList.length

11、;i+)for(int j=0;jarrayListi.length;j+)if(arrayListij = 1) /蛇身g.setColor(frontcolor); /蛇身顏色else if(arrayListij = 2)/蛇頭g.setColor(Color.RED); /蛇頭顏色else if(arrayListij = 3) /食物g.setColor(foodcolor); /食物顏色if (arrayListij != 0) int curx = border_left + i * 10;int cury = border_top + j * 10;g2d.draw(new R

12、ectangle2D.Double(curx, cury, 8, 8);2.2.4.2小蛇移動和吃掉食物:public boolean Move() /移動if (direction = 0)x -= 1; /左else if (direction = 1)y -= 1; /上else if (direction = 2)x += 1; /右else if (direction = 3)y += 1; /下/向前移動一步if(GameOver()/游戲結(jié)束clock.stop();gameover=true;flag=false; /不再產(chǎn)生新的豆豆if(x =arrayList.length

13、 | y = arrayList0.length)elsearrayListxy=2; /此時蛇頭位置int headx=snakeBody.get(0).x; /頭部坐標(biāo)int heady=snakeBody.get(0).y;arrayListheadxheady=1; /蛇頭變蛇身int tailx=snakeBody.get(snakeBody.size()-1).x;/尾部坐標(biāo)int taily=snakeBody.get(snakeBody.size()-1).y;arrayListtailxtaily=0; /修改尾部return false; /游戲結(jié)束arrayListxy=

14、2; /此時蛇頭位置int headx=snakeBody.get(0).x; /頭部坐標(biāo)int heady=snakeBody.get(0).y;arrayListheadxheady=1; /蛇頭變蛇身snakeBody.add(0,new Point(x,y);/添加新的頭部int tailx=snakeBody.get(snakeBody.size()-1).x;/尾部坐標(biāo)int taily=snakeBody.get(snakeBody.size()-1).y;if(x = foodx & y = foody) /吃掉了豆豆flag=true; /可以產(chǎn)生新的豆豆score+=tim

15、e; /總分?jǐn)?shù)time=30; /新豆豆的分值elsearrayListtailxtaily=0; /修改尾部snakeBody.remove(snakeBody.size()-1);/刪除舊的尾部return true;2.2.5記錄游戲的功能2.2.5.1判斷是否可進(jìn)入記錄:public boolean enableShow()if(score = 0)return false;if(!new File(Data).exists()/Data 目錄不存在return true;if(!new File(Data,list.snake).exists()/list.snake 文件不存在re

16、turn true;File file=new File(Data,list.snake);try BufferedReader iostream=new BufferedReader(new FileReader(file);String strline=iostream.readLine();if(strline = null)/空文件return true;int row=0;while(strline!=null)String str=strline.split(#);/信息以#分隔成 name 和 score 兩部分if(str.length!=2) /格式錯誤時刪除文件iostre

17、am.close();/關(guān)閉流 否則無法刪除文件file.delete(); /刪除文件return true;int gain=Integer.parseInt(str1);if(score = gain)return true;strline=iostream.readLine();/讀取下一行row+;if(row = 9)return true;iostream.close();/關(guān)閉流 catch (FileNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOExcep

18、tion e) / TODO Auto-generated catch blocke.printStackTrace();return false;2.2.5.2保存數(shù)據(jù)到文件:public void saveDataToFile(String filename)if(gameover) /游戲已結(jié)束無法保存return;File file=new File(Data,filename);try BufferedWriter out=new BufferedWriter(new FileWriter(file);/當(dāng)前矩陣out.write(Matrixn);for(int i=0;iarra

19、yList.length;i+)/矩陣數(shù)據(jù)for(int j=0;jarrayListi.length;j+)out.write(arrayListij+#);out.write(n);/換行/snakeBodyout.write(snakeBodyn);for(int i=0;isnakeBody.size();i+)/鏈表數(shù)據(jù)String str=String.valueOf(snakeBody.get(i).x);str+=,+String.valueOf(snakeBody.get(i).y);out.write(str+n);/頭部坐標(biāo)out.write(headn);out.wri

20、te(x+,+y+n);/當(dāng)前食物坐標(biāo)out.write(foodn);out.write(foodx+,+foody+n);/是否可產(chǎn)生新的食物out.write(flagn);out.write(String.valueOf(flag)+n);/移動方向out.write(directionn);out.write(String.valueOf(direction)+n);/當(dāng)前總分out.write(scoren);out.write(String.valueOf(score)+n);/當(dāng)前食物剩余分值out.write(timen);out.write(String.valueOf(t

21、ime)+n);/關(guān)閉流out.close(); catch (IOException e) e.printStackTrace();catch(Exception ee)2.2.5.3從文件中讀取數(shù)據(jù):public void readDataFromFile(String filename)for(int i=0;iarrayList.length;i+)for(int j=0;jarrayListi.length;j+)arrayListij=0;/全部初始化為空snakeBody.clear();File file=new File(Data,filename);try Buffered

22、Reader in=new BufferedReader(new FileReader(file);String str=in.readLine();if(!str.equals(Matrix)JOptionPane.showMessageDialog(this, 文件格式錯誤:無法讀取);return;/讀取矩陣元素str=in.readLine();int i=0;while(str!=null)String data=str.split(#);for(int j=0;jdata.length;j+)arrayListij=Integer.parseInt(dataj);i+;/下一行st

23、r=in.readLine();if(str.equals(snakeBody)break;/跳出while循環(huán)/讀取snakeBody數(shù)據(jù)str=in.readLine();while(str!=null)String data=str.split(,);int x=Integer.parseInt(data0);int y=Integer.parseInt(data1);snakeBody.add(new Point(x,y); /每次都添加到尾部str=in.readLine();if(str.equals(head)break;/讀取頭部坐標(biāo)str=in.readLine();if(s

24、tr!=null)String data=str.split(,);x=Integer.parseInt(data0);y=Integer.parseInt(data1);str=in.readLine();if (str!=null & str.equals(food) /讀取當(dāng)前食物坐標(biāo)str = in.readLine();if (str != null) String data = str.split(,);foodx = Integer.parseInt(data0);foody = Integer.parseInt(data1);/讀取flagstr=in.readLine();i

25、f(str!=null & str.equals(flag)str=in.readLine();if(str!=null)flag=Boolean.parseBoolean(str);/讀取移動方向str=in.readLine();if(str!=null & str.equals(direction)str=in.readLine();if(str!=null)direction=Integer.parseInt(str);/讀取總分str=in.readLine();if(str!=null & str.equals(score)str=in.readLine();if(str!=nul

26、l)score=Integer.parseInt(str);/讀取當(dāng)前食物剩余分值str=in.readLine();if(str!=null & str.equals(time)str=in.readLine();if(str!=null)time=Integer.parseInt(str);/關(guān)閉流in.close();clock.stop();repaint(); /重繪窗體 catch (FileNotFoundException e) JOptionPane.showMessageDialog(this, 文件未找到);catch(Exception ee)2.2.6英雄排行榜的設(shè)計

27、2.2.6.1排行榜的構(gòu)造:public ListFrame()/構(gòu)造函數(shù)setTitle(排行版);setLayout(new BorderLayout();title=new JButton(英雄排行榜);add(BorderLayout.NORTH,title);title.setFocusable(false);for(int i=0;i10;i+)tabledatai0=String.valueOf(i+1);for(int j=1;j3;j+)tabledataij=;2.2.6.2排行榜的排行記錄與順序:public static void main(String args) n

28、ew ListFrame();/顯示記錄public static void showList()new ListFrame().table.setEnabled(false);/插入一條新的記錄public static void insertNewData(int score)ListFrame listwin=new ListFrame();Object obj=listwin.tabledata;boolean over=false;for(int i=0;i= data)for(int j=9;ji;j-)/依次后移下面的數(shù)據(jù)objj2=objj-12;objj1=objj-11;o

29、bji2=score;obji1=input your name;over=true;listwin.currentrow=i;break;if(!over)/沒有超過以前的記錄listwin.table.setEnabled(false);/不可編輯return;listwin.table.isCellEditable(listwin.currentrow, 1);listwin.table.editCellAt(listwin.currentrow, 1);/選中當(dāng)前單元格JTextField editor=(JTextField)listwin.table.getCellEditor()

30、.getTableCellEditorComponent(listwin.table, listwin.table.getValueAt(listwin.currentrow, 1), true, listwin.currentrow, 1);editor.selectAll();2.2.6.3排行榜記錄文件的讀?。簆ublic void checkFile(String filename)/檢查 Data 目錄是否存在if(new File(Data).exists()elsenew File(Data).mkdir();/創(chuàng)建 Data 目錄/檢查指定 文件是否存在listfile=new

31、 File(Data,filename);if(listfile.exists()/文件已經(jīng)存在else /文件不存在 創(chuàng)建新的文件trylistfile.createNewFile();catch(Exception e)JOptionPane.showMessageDialog(this, 創(chuàng)建排名文件時發(fā)生錯誤!);/從文件中讀取排名信息public void readFromFile(String filename)checkFile(filename);try/讀取排名信息文件iostream=new BufferedReader(new FileReader(listfile);S

32、tring strline=iostream.readLine();int row=0;while(strline!=null)String str=strline.split(#);/信息以#分隔成 name 和 score 兩部分if(str.length!=2)JOptionPane.showMessageDialog(this, 讀入排名文件時發(fā)生錯誤);return;tabledatarow1=str0;/姓名tabledatarow2=str1;/分?jǐn)?shù)row+;if(row = 10)break;strline=iostream.readLine();/讀取下一行iostream.

33、close();/關(guān)閉流catch(Exception ee)System.out.println(ee);/將數(shù)據(jù)寫入文件public void writeDataToFile()tryBufferedWriter write=new BufferedWriter(new FileWriter(listfile);for(int i=0;i10;i+)String str=tabledatai1+#+tabledatai2+n;if(str.equals(#n)break;write.write(str);write.close();catch (Exception e) 3. 開發(fā)平臺Ja

34、va: 1.6.0_07; Java HotSpot(TM) Client VM 10.0-b234. 測試與發(fā)布4.1運行測試過程4.1.1開始新游戲4.1.2游戲運行4.1.3 游戲結(jié)束4.1.4變化游戲難度4.1.5游戲排行榜4.1.6游戲存取檔4.2測試結(jié)果游戲運行狀況良好,未發(fā)現(xiàn)bug。5. 自我評價與總結(jié)5.1遇到的問題及解決的辦法先是不太清楚圖形化界面的設(shè)計,后來在同學(xué)的幫助和自己的查找下解決了這個問題。后來在蛇的移動的表示上也不太清楚,找了一些資料后發(fā)現(xiàn)蛇身由一串基本圖形構(gòu)成,每過一秒,檢測前面是什么,如果是空的,那么把頭畫成普通身體的樣子,再在前方(或側(cè)面,如果轉(zhuǎn)彎的話)再畫

35、一個頭,并將其坐標(biāo)記入數(shù)組,數(shù)組要足夠大,再把尾巴畫成背景色;如果前面是食物,尾巴就不刪除,這里的難點是數(shù)組里的操作和坐標(biāo)的表示:把頭添在最后一個元素,把第一個元素提取(也就是尾巴)。最后在排行榜和存檔的讀取問題上遇到了困難,在同學(xué)的幫助下解決了這個難題。5.2 心得體會這次java課程設(shè)計讓我重新認(rèn)識到了編程的藝術(shù),在學(xué)習(xí)、使用Java的過程中,通過與以前所學(xué)的C/C+內(nèi)容的對比,讓我進(jìn)一步鞏固了C/C+的知識,并更進(jìn)一步在總體上讓我對編程語言有了更新的認(rèn)識。在不斷的設(shè)計、調(diào)試、修改的過程當(dāng)中,我對程序的設(shè)計與構(gòu)架在整體上有了長足的進(jìn)步。在做java課程設(shè)計以前,我對Java游戲開發(fā)只是停留

36、在理論知識的水平上,是“紙上談兵”,缺乏實際的軟件開發(fā)經(jīng)驗。這次通過做java課程設(shè)計,我完成了貪吃蛇游戲的軟件開發(fā)任務(wù)。在整個開發(fā)過程中遇到了很多問題,如蛇的移動的表示、排行榜和存檔的讀取問題、屏幕太閃爍的問題、圖形化界面的設(shè)計問題,但最終都被我一一解決,對其中比較主要的幾點體會總結(jié)如下。第一,完成了從局部到整體從細(xì)節(jié)到大局的轉(zhuǎn)變。設(shè)計過程中,經(jīng)常會遇到困難,我學(xué)會通過反復(fù)思考和測試,然后找出自己的錯誤并加以改正,再進(jìn)行下一個步驟。這個程序就是在這樣反復(fù)過程序中一點一點的完成的。完成之后再來優(yōu)化整個程序。第二,做課設(shè)是一個不斷學(xué)習(xí)新鮮事物的過程,從設(shè)計初的不懂到最后能夠順利完成,我體會到在實

37、踐中學(xué)習(xí)的重要性,這對于將來我走上工作崗位具有重要意義。 第三,通過課設(shè)使我對Java這門課程有了一定的了解,也對我今后的就業(yè)之路打下了一定的基礎(chǔ)。經(jīng)過一個月的不斷努力,課設(shè)內(nèi)容已經(jīng)基本上完成了?;仡欉@個設(shè)計過程,我學(xué)到了許多書本上沒有學(xué)到的知識。通過這次自己制作的軟件,豐富了自己的實踐技能,擴(kuò)展了本專業(yè)的知識面,使我受益非淺,同時也體驗到了搞軟件開發(fā)的困難度。在這次設(shè)計的同時,我又從中學(xué)到了許多東西。但由于我對這樣的軟件開發(fā)還只是一個開始,了解的不多,這其中或許還有很多的不足,有些模塊做得不是很好,界面的設(shè)計及整體的布局還比較簡單,沒有突出特色出來,這也可能是我這個系統(tǒng)的不足之處,在這里也懇請各位老師能夠?qū)ξ业淖髌分该鞑蛔悴⒓右愿恼?。總之,在這一次的課設(shè)過程中,我查閱了大量的資料,對Java有了一點初步的認(rèn)識,對于軟件工程這些輔助性的教材也鞏固了不少,為我這次的課設(shè)提供了很大的幫助,鍛煉了我的能力讓我掌握了一門新的程序設(shè)計語言:java語言,系統(tǒng)地學(xué)習(xí)了數(shù)據(jù)庫方面的知識,并更進(jìn)一步提高了我在程序設(shè)計、調(diào)試方面的技巧。更重要的是,它還讓我認(rèn)識到了自己的不足,在編程方面,我僅僅是剛剛?cè)腴T而已,以后的道路任重道遠(yuǎn),需要我不斷的豐富自己、充實自己,這樣才能在程序設(shè)計方面有所收獲。

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!