版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計說明書</b></p><p> 面向對象程序設計(Java)</p><p> 班級: 姓名: </p><p> 設計題目: 貪吃蛇 </p><p> 設計時間: 2012-0
2、1-09 至 2012-01-13 </p><p> 指導教師: </p><p> 評 語:_________________________________</p><p> _________________________________________</p><
3、;p> _________________________________________</p><p> _________________________________________</p><p> _________________________________________</p><p> 評閱成績:___________評閱教師
4、:_____________</p><p><b> 課程設計說明書</b></p><p><b> 課程設計的目的</b></p><p> 首先Java是一種易學易懂的通用程序設計語言,由于它具有功能性強,運用簡潔,靈活兼有高級語言與低級語言的優(yōu)點,以及“目標程序效率高”可移植性和能在各種系統(tǒng)上普遍實現等特點
5、使它成為當今世界上的主流程序設計語言之一,同時被選作目前全世界廣泛應用,同時也是大學期間好多專業(yè)的必修課程。作為當代的大學生要很好的利用它,學好一門設計語言,實現學以至用。 </p><p> 再者《JAVA程序設計》是計算機相關專業(yè)的必修專業(yè)基礎課程,其實踐性、應用性很強。實踐教學環(huán)節(jié)是必不可少的一個重要環(huán)節(jié)。本課程的程序設計專題實際是我們學習完java課程后,進行的一次全面的綜合訓練,JAVA程序設計的設計
6、目的是加深對理論教學內容的理解和掌握,使我較系統(tǒng)地掌握程序設計及其在網絡開發(fā)中的廣泛應用,基本方法及技巧,為我綜合運用所學知識,利用軟件工程為基礎進行軟件開發(fā)、并在實踐應用方面打下一定基礎。</p><p> 功能模塊簡介和系統(tǒng)結構圖</p><p><b> 整體功能</b></p><p> 一條蛇在封閉圍墻里,圍墻里隨機出現一個食物
7、,通過按鍵盤四個光標鍵控制蛇向上下左右四個方向移動,當一只按著某一鍵的時候就會一值加速。蛇頭撞倒食物,則食物被吃掉,蛇身體長一節(jié),同時記100分,接著又隨機出現食物,等待蛇來吃,如果蛇在移動中撞到墻或身體交叉蛇頭撞倒自己身體游戲結束。</p><p><b> 模塊劃分</b></p><p> 貪吃蛇游戲設計與實現,主要分為以下三個模塊:游戲主界面模塊和游戲控制
8、模塊和查看游戲游戲基本信息模塊。</p><p><b> 游戲主界面模塊:</b></p><p> 游戲的主界面是進入游戲后,能夠給玩家第一感官的部分,主要包括游戲圖形區(qū)域界面以及玩游戲所得的分數。</p><p><b> 游戲控制模塊:</b></p><p> 這個模塊是游戲的中心
9、環(huán)節(jié),我將它添加在了菜單條里邊,主要完成控制游戲,有開始游戲,退出游戲,以及選擇游戲的難易程度,還有加快蛇的爬行速度。以及計算當前的分數,以及蛇吃的食物個數。</p><p> 其中難易程度包括了困難,一般及簡單。</p><p> 查看游戲基本信息模塊:</p><p> 有查看游戲的最高記錄以及游戲八本或者作者等基本信息。</p><p
10、><b> 性能:</b></p><p> 本軟件在設計方面本著方便、實用及娛樂性高的宗旨,在對界面進行設計的過程中,始終堅持清晰明了,在性能方面能夠實現效率高,不易出錯等優(yōu)點。</p><p><b> 系統(tǒng)結構圖</b></p><p> 圖2 菜單圖
11、 圖3 貪吃蛇界面</p><p><b> 運行說明</b></p><p> 進入主界面后單擊游戲,會彈出它的子菜單,然后選擇開始游戲此時就會觸發(fā)ks(開始游戲)事件,此時會出現蛇和食物,通過鍵盤的控制可以實現蛇的移動方向以及移動速度。當吃到事物的時候蛇的長度就增加,當蛇的長度增加時移動的速度也會加快,并且會隨機出現新的食物。當吃不到食物或者碰到了墻壁或者碰
12、到了自身時就會死亡。</p><p> 單擊難易程度菜單時彈出它的子菜單,有簡單,一般和困難,分別控制游戲的難易程度,單擊積分排行時會出現最高分的記錄。</p><p><b> 主要源程序及代碼</b></p><p> import javax.swing.*; </p><p> import java.a
13、wt.*; </p><p> import java.awt.event.*; </p><p> public class TanChiShe extends JFrame implements ActionListener, KeyListener,Runnable </p><p><b> { </b></p>&
14、lt;p> JMenuBar menuBar; </p><p> JMenu youXi,ny,fs,gy; </p><p> JMenuItem ks,tc,zz,fsi; </p><p> JCheckBoxMenuItem jd,yb,kn; </p><p> int length = 6; </p>
15、<p> Toolkit toolkit; </p><p> int i,x,y,z,objectX,objectY,object=0,growth=0,time;</p><p> int difficult=2; </p><p> int m[]=new int[50]; </p><p> int n[]=n
16、ew int[50]; </p><p> Thread she = null; </p><p> int life=0; </p><p> int foods = 0; </p><p> int fenshu=0; </p><p> public void run() </p><
17、;p><b> { </b></p><p> time=500; </p><p> for(i=0;i<=length-1;i++) </p><p><b> { </b></p><p> m[i]=90-i*10;n[i]=60; </p><p
18、><b> } </b></p><p><b> x=m[0]; </b></p><p><b> y=n[0]; </b></p><p><b> z=4; </b></p><p> while(she!=null) &l
19、t;/p><p><b> { </b></p><p><b> check(); </b></p><p><b> try </b></p><p><b> { </b></p><p> she.sleep(t
20、ime); </p><p><b> } </b></p><p> catch(Exception ee) </p><p><b> { </b></p><p> System.out.println(z+""); </p><p><
21、;b> } </b></p><p><b> } </b></p><p><b> } </b></p><p> public TanChiShe() </p><p><b> { </b></p><p> set
22、Visible(true); </p><p> menuBar = new JMenuBar(); </p><p> Container con=getContentPane(); </p><p> toolkit=getToolkit(); </p><p> youXi = new JMenu("游戲")
23、; </p><p> ks = new JMenuItem("開始(新)游戲"); </p><p> tc = new JMenuItem("推出"); </p><p> ny = new JMenu("難易程度"); </p><p> jd = new JChe
24、ckBoxMenuItem("簡單"); </p><p> yb = new JCheckBoxMenuItem("一般"); </p><p> kn = new JCheckBoxMenuItem("困難"); </p><p> fs = new JMenu("積分排行"
25、); </p><p> fsi = new JMenuItem("最高記錄"); </p><p> gy = new JMenu("關于"); </p><p> zz = new JMenuItem("關于作者"); </p><p> gy.add(zz);
26、 </p><p> ny.add(jd); </p><p> ny.add(yb); </p><p> ny.add(kn); </p><p> fs.add(fsi); </p><p> youXi.add(ks); </p><p> youXi.add(tc);
27、 </p><p> menuBar.add(youXi); </p><p> menuBar.add(ny); </p><p> menuBar.add(fs); </p><p> menuBar.add(gy); </p><p> zz.addActionListener(this); <
28、/p><p> ks.addActionListener(this); </p><p> tc.addActionListener(this); </p><p> addKeyListener(this); </p><p> fsi.addActionListener(this); </p><p> Ke
29、yStroke keyOpen = KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK); </p><p> ks.setAccelerator(keyOpen); </p><p> KeyStroke keyExit = KeyStroke.getKeyStroke('X',InputEvent
30、.CTRL_DOWN_MASK); </p><p> tc.setAccelerator(keyExit); </p><p> setJMenuBar(menuBar); </p><p> setTitle("貪吃蛇"); </p><p> setResizable(false); </p>
31、<p> setBounds(300,200,400,400); </p><p> validate(); </p><p> setDefaultCloseOperation(EXIT_ON_CLOSE); </p><p><b> } </b></p><p> public stat
32、ic void main(String args[]) </p><p><b> { </b></p><p> TanChiShe tcs=new TanChiShe(); </p><p><b> } </b></p><p> public void actionPerformed
33、(ActionEvent e) </p><p><b> { </b></p><p> if(e.getSource()==ks) </p><p><b> { </b></p><p> length = 6; </p><p> life = 0; <
34、;/p><p> foods = 0; </p><p> if(she==null) </p><p><b> { </b></p><p> she=new Thread(this); </p><p> she.start(); </p><p><b&
35、gt; } </b></p><p> else if(she!=null) </p><p><b> { </b></p><p> she=null; </p><p> she= new Thread(this); </p><p> she.start(); &l
36、t;/p><p><b> } </b></p><p><b> } </b></p><p> if(e.getSource()==tc) </p><p><b> { </b></p><p> System.exit(0); </p
37、><p><b> } </b></p><p> if(e.getSource()==zz) </p><p><b> { </b></p><p> JOptionPane.showMessageDialog(this, "成曉曉"+"\n\n"+&
38、quot;\n"); </p><p><b> } </b></p><p> if(e.getSource()==fsi) </p><p><b> { </b></p><p> JOptionPane.showMessageDialog(this,"最高記錄為&
39、quot;+fenshu+""); </p><p><b> } </b></p><p><b> } </b></p><p> public void check() </p><p><b> { </b></p>&l
40、t;p> isDead(); </p><p> if(she!=null) </p><p><b> { </b></p><p> if(growth==0) </p><p><b> { </b></p><p> reform(); </p
41、><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p> upgrowth(); </p><p><b> } </b></p>
42、<p> if(x==objectX&&y==objectY) </p><p><b> { </b></p><p> object=0; </p><p> growth=1; </p><p> toolkit.beep(); </p><p><
43、b> } </b></p><p> if(object==0) </p><p><b> { </b></p><p> object=1; </p><p> objectX=(int)Math.floor(Math.random()*39)*10; </p><p
44、> objectY=(int)Math.floor(Math.random()*29)*10+50; </p><p><b> } </b></p><p> this.repaint(); </p><p><b> } </b></p><p><b> } <
45、/b></p><p> void isDead() </p><p><b> { </b></p><p><b> if(z==4) </b></p><p><b> { </b></p><p><b> x=x+10
46、; </b></p><p><b> } </b></p><p> else if(z==3) </p><p><b> { </b></p><p><b> x=x-10; </b></p><p><b> }
47、 </b></p><p> else if(z==2) </p><p><b> { </b></p><p><b> y=y+10; </b></p><p><b> } </b></p><p> else if(z==
48、1) </p><p><b> { </b></p><p><b> y=y-10; </b></p><p><b> } </b></p><p> if(x<0||x>390||y<50||y>390) </p><
49、p><b> { </b></p><p> she=null; </p><p><b> } </b></p><p> for(i=1;i<length;i++) </p><p><b> { </b></p><p>
50、if(m[i]==x&&n[i]==y) </p><p><b> { </b></p><p> she=null; </p><p><b> } </b></p><p><b> } </b></p><p><b
51、> } </b></p><p> public void upgrowth() </p><p><b> { </b></p><p> if(length<50) </p><p><b> { </b></p><p> leng
52、th++; </p><p><b> } </b></p><p> growth--; </p><p> time=time-10; </p><p> reform(); </p><p> life+=100; </p><p> if(fenshu
53、<life) </p><p><b> { </b></p><p> fenshu = life; </p><p><b> } </b></p><p><b> foods++; </b></p><p><b> }
54、 </b></p><p> public void reform() </p><p><b> { </b></p><p> for(i=length-1;i>0;i--) </p><p><b> { </b></p><p> m[i]
55、=m[i-1]; </p><p> n[i]=n[i-1]; </p><p><b> } </b></p><p><b> if(z==4) </b></p><p><b> { </b></p><p> m[0]=m[0]+10;
56、 </p><p><b> } </b></p><p><b> if(z==3) </b></p><p><b> { </b></p><p> m[0]=m[0]-10; </p><p><b> } </b>
57、;</p><p><b> if(z==2) </b></p><p><b> { </b></p><p> n[0]=n[0]+10; </p><p><b> } </b></p><p><b> if(z==1) &l
58、t;/b></p><p><b> { </b></p><p> n[0]=n[0]-10; </p><p><b> } </b></p><p><b> } </b></p><p> public void keyPress
59、ed(KeyEvent e) </p><p><b> { </b></p><p> if(she!=null) </p><p><b> { </b></p><p> if(e.getKeyCode()==KeyEvent.VK_UP) </p><p>&
60、lt;b> { </b></p><p><b> if(z!=2) </b></p><p><b> { </b></p><p><b> z=1; </b></p><p><b> check(); </b></
61、p><p><b> } </b></p><p><b> } </b></p><p> else if(e.getKeyCode()==KeyEvent.VK_DOWN) </p><p><b> { </b></p><p><b&g
62、t; if(z!=1) </b></p><p><b> { </b></p><p><b> z=2; </b></p><p><b> check(); </b></p><p><b> } </b></p>
63、<p><b> } </b></p><p> else if(e.getKeyCode()==KeyEvent.VK_LEFT) </p><p><b> { </b></p><p><b> if(z!=4) </b></p><p><b&
64、gt; { </b></p><p><b> z=3; </b></p><p><b> check(); </b></p><p><b> } </b></p><p><b> } </b></p><p
65、> else if(e.getKeyCode()==KeyEvent.VK_RIGHT) </p><p><b> { </b></p><p><b> if(z!=3) </b></p><p><b> { </b></p><p><b>
66、z=4; </b></p><p><b> check(); </b></p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p>
67、;<b> } </b></p><p> public void keyReleased(KeyEvent e) </p><p><b> { </b></p><p><b> } </b></p><p> public void keyTyped(Key
68、Event e) </p><p><b> { </b></p><p><b> } </b></p><p> public void paint(Graphics g) </p><p><b> { </b></p><p> g.
69、setColor(Color.DARK_GRAY); </p><p> g.fillRect(0,50,400,400); </p><p> g.setColor(Color.pink); </p><p> for(i=0;i<=length-1;i++) </p><p><b> { </b>&l
70、t;/p><p> g.fillRect(m[i],n[i],10,10); </p><p><b> } </b></p><p> g.setColor(Color.green); </p><p> g.fillRect(objectX,objectY,10,10); </p><p&g
71、t; g.setColor(Color.white); </p><p> g.drawString("當前 分數"+this.life,6,60); </p><p> g.drawString("當前已吃食物數"+this.foods,6,72); </p><p><b> } </b&
72、gt;</p><p><b> }</b></p><p><b> 程序總結</b></p><p><b> 運行結果</b></p><p> 通過這次課程設計,我對這學期所學的JAVA語言程序設計有一個更深刻的了解,將所學的知識應用于實踐,由于所學知識有限,為
73、了使游戲能夠實現自己預先的構想,我通過上網和去圖書館找程序,比較好的流程圖及功能模塊,不斷閱讀修改代碼使程序達到預期所要實現的目標,完成課程設計后,可以感覺到自己對Java程序的又有了新的認識。雖然花了好大勁做完了這個小程序,但是其中還是有很多不足的地方,首先由于我的個人能力有限,沒有設置貪吃蛇的暫停與繼續(xù),沒有給游戲添加背景音樂只設置了重新開始和推出游戲以及難易程度,最高紀錄。再者貪吃蛇的界面設置的不夠好看,我是根據java課程的大實
74、驗做的,所以將模塊功能的按鈕放在了菜單里邊,這樣玩家看到的游戲界面給玩家身臨其境的感覺不是很強。即便是程序有好幾處不足的地方,但是還是有優(yōu)點的,如可以使用鍵盤是蛇移動的速度加快,能將玩家的分數進行記錄。能夠顯示最高紀錄,當蛇吃到事物的時候會有系統(tǒng)的提示音,可以設置游戲的難易程度等。希望在以后的實踐中能夠將這些不足都改掉,首先添加上暫停和繼續(xù)功能,這樣就方便了玩家在玩的過程中有事的話就可以暫停游戲等到忙完了在接著玩,添加上這個功能之后貪吃
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論