Java坦克大戰(zhàn)設(shè)計報告_第1頁
Java坦克大戰(zhàn)設(shè)計報告_第2頁
Java坦克大戰(zhàn)設(shè)計報告_第3頁
Java坦克大戰(zhàn)設(shè)計報告_第4頁
Java坦克大戰(zhàn)設(shè)計報告_第5頁
已閱讀5頁,還剩82頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) 程序語言綜合課程設(shè)計設(shè)計報告 學(xué)院:信息工程學(xué)院專業(yè)班級:學(xué)號:3姓名:指導(dǎo)老師:完成時間:2011年7月22日目錄 TOC o 1-3 h z u 題目一 坦克大戰(zhàn)1.1題目簡介坦克大戰(zhàn)是運用java高級編程語言使用MyEclipse8.6實現(xiàn)的一個游戲系統(tǒng),它具有單人游戲和雙人游戲的游戲界面以及對游戲的屬性進行編輯的游戲設(shè)置對話框。1.2設(shè)計的內(nèi)容、要求和目標1.2.1設(shè)計內(nèi)容 本項目的內(nèi)容包括技術(shù)和非技術(shù)兩大部分:技術(shù)上需要進行數(shù)據(jù)存儲和圖片的處理、整個窗口的布

2、局、代碼的編寫及調(diào)試。非技術(shù)部分包括:人力資源的充分利用。1.2.2設(shè)計要求 (1)設(shè)計GUI界面的坦克大戰(zhàn)。坦克大戰(zhàn)中有我軍坦克一輛,敵軍坦克若干。初始狀態(tài)是我軍坦克位于屏幕正下方,而敵軍坦克分布屏幕正上方,敵軍坦克可以自由移動并發(fā)射子彈,我軍坦克可以按“A”,“S”,“D”,“W”鍵操作我軍坦克向不同的四個方向前進,按“J”鍵可以發(fā)射子彈;(2)程序要求用戶在通過按下指定按鈕來控制自己的坦克,敵人坦克是隨機運動并發(fā)射子彈的;(3)當然用戶還可以點擊文件菜單選擇各種需要的操作;(4)實現(xiàn)幫助功能,用戶有不明白的地方可以查看幫助文檔;(5)實現(xiàn)與數(shù)據(jù)庫的連接,用戶使用時必須登錄。1.2.3設(shè)計

3、目標系統(tǒng)應(yīng)該盡量做到以下的目標:人力與設(shè)備費用的減少;采用現(xiàn)代程序設(shè)計技術(shù);數(shù)據(jù)的處理速度提高;管理信息服務(wù)的改進;人員利用率盡可能提高;1.3總體設(shè)計1.3.1系統(tǒng)功能結(jié)構(gòu)圖下面列出了本系統(tǒng)的整體功能結(jié)果圖以及各個模塊之間的彼此聯(lián)系,見圖1-1所示。圖1-1 系統(tǒng)各個功能模塊之間的聯(lián)系說明:用戶根據(jù)主界面,在菜單項里可以選擇開始游戲,可以開始單人游戲,也可以開始雙人游戲,在游戲中倘若你有其他事情要做,你可以選擇暫停游戲,當然你還可以選擇存盤退出,這樣當你以后想再玩沒玩完的游戲你就可以選擇繼續(xù)上局游戲,這樣你可以接著上次玩的游戲,你還可以選擇游戲設(shè)置,設(shè)置敵人的坦克數(shù)量和敵人坦克的速度,以及我

4、軍坦克速度,還有你可以設(shè)置娛樂方式,你可以選擇使用背景音樂,和游戲音效。 1.3.2系統(tǒng)總體流程圖坦克大戰(zhàn)的總體流程圖見圖1-2所示。圖1-2 總體流程圖3.3系統(tǒng)所有類之間的關(guān)系系統(tǒng)所有類之間的關(guān)系如圖1-3所示圖1-3類之間的關(guān)系設(shè)計一個系統(tǒng)的時候,把不同功能的具體實現(xiàn)放到不同的類里面,這樣便于以后程序的擴展以及修改;類的名稱最好是體現(xiàn)出這個類實現(xiàn)的功能,這樣可以達到看類名就知道這個類的功能,方便以后程序的維護。本系統(tǒng)的實現(xiàn)一共用到了以上的12個類,它們之間的關(guān)系見圖1-3所示,箭頭方向代表是被依賴的類,各個類實現(xiàn)了一些單獨的功能。1.4詳細設(shè)計及實現(xiàn)1.4.1界面及布局設(shè)計系統(tǒng)的整體布局

5、為:BorderLayout布局, 采用了菜單、按鈕、面板等組件,菜單主要包括選擇開始新游戲,暫停游戲,繼續(xù)上局游戲,存盤退出,退出游戲,游戲設(shè)置等功能。1.4.2開機歡迎畫面的實現(xiàn)方法FirstPanel類是javax.swing包中JPanel容器的一個子類,它主要是重寫了paint()方法,先從文本文件里讀取數(shù)據(jù),然后把數(shù)據(jù)通過畫筆畫在畫板上,標明FirstPanel類的主要成員變量和方法以及和TankGames類之間組合關(guān)系的UML圖如圖1-4所示。圖1-4 FirstPanel類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細說明。1、成員變量(1)word是WordMove型數(shù)據(jù),它

6、是用來改變文字的縱坐標的,使文字動態(tài)的畫在畫板上。(2)fr是FileReader型數(shù)據(jù),它是用來讀取文本文件的。(3)br是BufferedReader型數(shù)據(jù),是緩沖輸出流,用它來讀取fr里面的數(shù)據(jù)。(4)str是String型數(shù)據(jù),接受讀取到得文本文件。(5)aa是Vector型數(shù)據(jù),是類型為字符串類型的集合,用它來裝一個個str。(6)img是Image型數(shù)據(jù),是圖片類型數(shù)據(jù),用來設(shè)置背景圖片的。(7)f,f1,f2都是Font類型的數(shù)據(jù),用來確定動態(tài)顯示字的字體。2、方法(1)FirstPanel()是構(gòu)造方法,負責完成FirstPanel容器的初始化。(2)容器調(diào)用paint(Gra

7、phics g)方法可以在畫板上把文本文件畫出來,以便動態(tài)的顯示出來。(3)容器調(diào)用show()方法可以將畫板上的文字顯示出來。(4)容器調(diào)用run()方法可以改變文字的縱坐標,使原本靜態(tài)的文字運動起來。綜上所述,F(xiàn)irstPanel創(chuàng)建的容器效果如圖1-5所示。圖1-5 FirstPanel創(chuàng)建的容器1.4.3單人游戲的實現(xiàn)方法mypanel類是javax.swing包中JPamel類的子類,所創(chuàng)建的對象是一個面板,面板上有坦克大戰(zhàn)的敵我雙方坦克,和戰(zhàn)場,以及我軍消滅敵軍數(shù)量的標識,標明mypanel類的主要成員變量、方法以及和TankGames類之間組合關(guān)系的UML如圖1-6所示。 圖1-

8、6 mypanel類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細說明。1、成員變量(1)isZanT、isSounds、isMusic都是boolean類型數(shù)據(jù),分別確定是否游戲暫停,是否使用背景音樂,是否使用音效。(2)word是WordMove類型數(shù)據(jù),用于制造動態(tài)字。(3)mt,en分別是mytank和enemyTank類型數(shù)據(jù),用于在畫板上定義敵我雙方坦克。(4)zd,zhd分別是ZDan和ZhaDan類型數(shù)據(jù),在畫板上定義子彈和炸彈。(5)image1、imge2、imgae3都是Image類型數(shù)據(jù),在擊中坦克時,將這三幅圖片畫出來,制造爆炸效果。(6)f是Font類型數(shù)據(jù),用于定

9、義游戲結(jié)束時動態(tài)字的字體。2、方法(1)mypanel()構(gòu)造方法,初始化定義的成員變量。(2)paint(Graphics g)在畫板上畫坦克,畫子彈,畫炸彈等各種作戰(zhàn)場面。(3)addmytank()方法用來增加我軍坦克,我軍坦克的生命值是3,當我軍生命值大于0時,每死一次就增加一輛我軍坦克,直至我軍坦克生命值為0。(4)addEnemytank()方法是用來增加敵軍坦克,敵軍坦克默認情況下是20輛,而戰(zhàn)場只允許敵軍4輛坦克作戰(zhàn),所以每擊毀敵軍一輛坦克就會調(diào)用此方法增加一輛敵軍坦克,直至敵軍坦克數(shù)量小于或者等于4。(5)zhanji()方法是用來記錄我軍擊毀坦克數(shù)量。(6)Bomp()方法

10、是在擊中坦克時畫出爆炸效果。(7)drawtank()用來在畫板上畫出敵我雙方坦克。(8)drawzd()用來在畫板上畫子彈。(9)shotEnemytank()是在我軍發(fā)射子彈時調(diào)用的,用戶按下指定鍵就會激發(fā)此方法。(10)shotmytank()是敵軍發(fā)射子彈時調(diào)用此方法。(11)isjizhong()是用來判斷子彈是否擊中坦克。(12)GameOver()是在游戲結(jié)束時調(diào)用的,用來描述游戲結(jié)束。因此mypanel創(chuàng)建的畫板的效果如圖1-7所示。圖1-7 mypanel創(chuàng)建的畫板的效果爆炸效果如下圖:圖1-8 爆炸效果圖1.4.4添加背景音樂的方法 為了在應(yīng)用程序中播放音樂,首先根據(jù)相應(yīng)的

11、音頻文件創(chuàng)建一個File對象,例如: File file=new File(“十年.Wav”);然后,file對象調(diào)用toURL()方法返回一個URL對象,例如: URL url=file.toURL();最后,使用Applet類的靜態(tài)方法返回一個音頻對象,例如: clip=Applet.newAudioClip(url);1.4.5雙人游戲?qū)崿F(xiàn)的方法SRen類是javax.swing包中JPamel類的子類,所創(chuàng)建的對象是一個面板,面板上有坦克大戰(zhàn)的敵我雙方坦克(此時我軍坦克數(shù)量為2),和戰(zhàn)場,以及我軍消滅敵軍數(shù)量的標識,標明SRen類的主要成員變量、方法以及和TankGames類之間組合關(guān)

12、系的UML如圖1-9所示。圖1-9 SRen類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細說明。1、成員變量(1)isZanT、isSounds都是boolean類型數(shù)據(jù),分別確定是否游戲暫停,是否使用音效。(2)word是WordMove類型數(shù)據(jù),用于制造動態(tài)字。(3)myts0life、myts1life都是int類型的數(shù)據(jù),分別用來記錄我方兩輛坦克的生命值。(4)myts0XM、myts1XM都是int類型的數(shù)據(jù),分別來記錄我方兩輛坦克消滅敵軍坦克數(shù)量。(5)zd,zhd分別是ZDan和ZhaDan類型數(shù)據(jù),在畫板上定義子彈和炸彈。(6)image1、imge2、imgae3都是Ima

13、ge類型數(shù)據(jù),在擊中坦克時,將這三幅圖片畫出來,制造爆炸效果。(7)f是Font類型數(shù)據(jù),用于定義游戲結(jié)束時動態(tài)字的字體。2、方法(1)SRen()構(gòu)造方法,初始化定義的成員變量。(2)paint(Graphics g)在畫板上畫坦克,畫子彈,畫炸彈等各種作戰(zhàn)場面。(3)addmytank()方法用來增加我軍坦克,我軍坦克的生命值是3,當我軍生命值大于0時,每死一次就增加一輛我軍坦克,直至我軍坦克生命值為0。(4)addEnemytank()方法是用來增加敵軍坦克,敵軍坦克默認情況下是20輛,而戰(zhàn)場只允許敵軍4輛坦克作戰(zhàn),所以每擊毀敵軍一輛坦克就會調(diào)用此方法增加一輛敵軍坦克,直至敵軍坦克數(shù)量小

14、于或者等于4。(5)zhanji()方法是用來記錄我軍擊毀坦克數(shù)量。(6)Bomp()方法是在擊中坦克時畫出爆炸效果。(7)drawtank()用來在畫板上畫出敵我雙方坦克。(8)drawzd()用來在畫板上畫子彈。(9)shotEnemytank()是在我軍發(fā)射子彈時調(diào)用的,用戶按下指定鍵就會激發(fā)此方法。(10)shotmytank()是敵軍發(fā)射子彈時調(diào)用此方法。(11)isjizhong()是用來判斷子彈是否擊中坦克。(12)GameOver()是在游戲結(jié)束時調(diào)用的,用來描述游戲結(jié)束。因此mypanel創(chuàng)建的畫板的效果如圖1-10所示。圖1-10 SRen創(chuàng)建的畫板1.4.6游戲設(shè)置方法F

15、irstDialog是java.swing包中Dialog類的子類,它創(chuàng)建的是一個對話框,此對話框里面主要有選擇按鈕,滾動條,還有兩個按鈕。標明FirstDialog類的主要成員變量、方法以及和TankGames類之間組合關(guān)系的UML如圖1-11所示。 圖1-11 SRen類的UML圖以下是UML圖中有關(guān)數(shù)據(jù)和方法的詳細說明。1、成員變量(1)jbl1,jbl2,jbl3,jbl4都是JLabel類型數(shù)據(jù),用于提示標簽。(2)jck1,jck2是JCheck類型數(shù)據(jù),用來控制音效和背景音樂。(3)jsc1,jsc2,jsc3都是JScrollBox類型數(shù)據(jù),分別用來控制敵軍坦克數(shù)量,敵軍坦克速

16、度,我軍坦克速度。(4)box1,box2,box3,box4都是Box類型數(shù)據(jù),用于整體布局。(5)jp是JPanel類型數(shù)據(jù),整體布局需要。(6)jbt1,jbt2都是JButton數(shù)據(jù)類型。2、方法(1)FirstDialog()構(gòu)造方法,初始化定義的成員變量。(2)actionPerformed(Event e)方法用于出來監(jiān)聽事件。(3)ItemStatechanged(Event e)方法用于處理選擇框事件的處理。因此FirstDialog創(chuàng)建的畫板的效果如圖1-12所示。 圖1-12 FirstDialog創(chuàng)建的對話框1.4.7存盤退出實現(xiàn)方法本程序是利用輸出輸入流將戰(zhàn)場敵我雙方

17、坦克坐標保存到文本文件里面,詳細請見下圖。圖1-13 存盤退出菜單當點擊存盤退出,程序就會在F盤下新建一個文本文件,如:圖1-14 保存游戲信息的文本這時當我們點擊繼續(xù)上局時,又回回到剛才玩的游戲,如:圖1-15 繼續(xù)上局菜單繼續(xù)上局后的效果圖如下圖:圖1-16 繼續(xù)上局效果圖1.4.8運行效果圖系統(tǒng)運行的主界面如圖1-17所示圖1-17 運行歡迎界面效果圖坦克大戰(zhàn)單人游戲效果如圖1-18所示圖1-18 單人游戲效果圖雙人游戲效果如圖1-19所示圖1-19 雙人游戲效果圖菜單選擇如圖1-20所示圖1-20 菜單選擇1.4.9源代碼分析1.開機歡迎界面實現(xiàn)的代碼。public class Fir

18、stPanel extends JPanel implements Runnable public WordMove word = null;FileReader fr = null;BufferedReader br = null;String str=;Vector aa =null;Image img;Font f = new Font(華文姚體,Font.BOLD,25);Font f1 = new Font(華文姚體,Font.BOLD,35);Font f2 = new Font(華文彩云,Font.BOLD,150);public FirstPanel() word = new

19、WordMove(30,340);word.setHH(500);word.b=true;aa = new Vector();this.setBackground(Color.black);show();try img = ImageIO.read(new File(123.jpg); catch (IOException e) e.printStackTrace();public void paint(Graphics g) super.paint(g);g.setColor(Color.yellow);for(int i=0;iaa.size();i+) String a = aa.get

20、(i);if(i=0) g.setFont(f1);else if(i=24) g.setFont(f2);else g.setFont(f);g.drawString(a,word.x,word.HH+(i+1)*50); /畫出運動的文字public void show() Thread t = new Thread(word);t.start();try fr = new FileReader(Directions.txt); /讀取文本文件里面的文字br = new BufferedReader(fr);str =br.readLine();aa.add(str);while (str

21、=br.readLine()!=null) aa.add(str); catch (Exception e) e.printStackTrace();finally try br.close();fr.close(); catch (IOException e) e.printStackTrace();public void run() while(true) try Thread.sleep(50); catch (InterruptedException e) e.printStackTrace();this.repaint();2.單人游戲界面的實現(xiàn)代碼public class mypa

22、nel extends JPanel implements Runnable,KeyListener /所有的成員變量public boolean isZanT = false;public WordMove word = null;public mytank mt = null;public enemyTank en = null;public ZDan zd = null;public static boolean isSounds=true;public static boolean ismusic=true;public ZhaDan zhd = null;int BZ = 0;Ima

23、ge image1 = null,image2 = null,image3 = null;public Vector enemy = new Vector();public Vector myt = new Vector();public Vector ZDs = new Vector();String str=擊毀敵軍坦克數(shù)量;Font f = new Font(華文新魏,Font.BOLD,20);public int tan=0,150,300,450;/構(gòu)造方法public mypanel(String n) String ss=n;/新游戲進這if(ss.equals(First)

24、for(int i=0;i4;i+) en = new enemyTank(i*150,0,0);en.setDirect(2);Thread tt = new Thread(en);tt.start();enemy.add(en);enemyTank.enemy.add(en);else /繼續(xù)上局進這for(int j=0;jRecord.nodes.size();j+) en = new enemyTank(Record.nodes.get(j).getX(),Record.nodes.get(j).getY(),Record.nodes.get(j).getDirect();Threa

25、d tt = new Thread(en);tt.start();enemy.add(en);word = new WordMove(200,350);mt = new mytank(200,350,1);myt.add(mt);try image1 = ImageIO.read(new File(bomb_1.gif);image2 = ImageIO.read(new File(bomb_2.gif);image3 = ImageIO.read(new File(bomb_3.gif); catch (IOException e) e.printStackTrace();/畫圖public

26、 void paint(Graphics g)super.paint(g);g.fill3DRect(0,0,700,400,false);g.setColor(Color.BLUE);g.drawString(敵軍坦克還有+Record.enemyCount+輛,600,20);g.setFont(f);g.setColor(Color.red);g.drawString(str,702,30);/對我軍坦克進行處理addmytank(g);/顯示銷毀敵軍坦克數(shù)zhanji(g);/處理敵軍坦克addEnemytank(g);/炸彈爆炸Bomp(g);/游戲結(jié)束處理GameOver(g);/

27、畫我的坦克public void addmytank(Graphics g)for(int i=0;imyt.size();i+)mt=myt.get(i);drawtank(mt.x,mt.y,1,mt.direct,g);drawzd(mt,g);shotEnemy(mt);/記錄我的成績public void zhanji(Graphics g) drawtank(740,60,0,0,g);g.setColor(Color.red);g.drawString(X +mt.record.getXMenemy(),800,80);/畫敵人的坦克及子彈public void addEnemy

28、tank(Graphics g) for(int j=0;jenemy.size();j+) enemyTank t = enemy.get(j);if(t.isLive) drawtank(t.x,t.y,0,t.direct,g);if(t.zx!=null) drawzd(t,g);shotmytank(t);if(enemy.size()=4) int i=(int)(Math.random()*3);enemyTank k = new enemyTank(tani+10,0,0);k.setDirect(2);if(!enemyTank.isContact(k) Thread t =

29、 new Thread(k);t.start(); this.enemy.add(k);enemyTank.enemy.add(k);/爆炸效果public void Bomp(Graphics g) for(int i=0;i6) g.drawImage(image1,zh.x,zh.y,30,30,this);else if(zh.LifeTime3) g.drawImage(image2,zh.x,zh.y,30,30,this);else g.drawImage(image3,zh.x,zh.y,30,30,this);zh.lifeDown();if(zh.LifeTime=0) Z

30、Ds.remove(zh);/畫坦克(不管是畫敵人坦克還是畫自己坦克都須調(diào)用此方法)public void drawtank(int x,int y,int type,int direct,Graphics g) switch(type) case 0:g.setColor(Color.CYAN);break;case 1:g.setColor(Color.yellow);break;switch(direct) case 0:g.fill3DRect(x,y,5,30,false);g.fill3DRect(x+15,y,5,30,false);g.fill3DRect(x+5,y+5,10

31、,20,false);g.fillOval(x+7,y+10,7,10);g.drawLine(x+10,y+10,x+10,y);break;case 1:g.fill3DRect(x,y,30,5,false);g.fill3DRect(x,y+15,30,5,false);g.fill3DRect(x+5,y+5,20,10,false);g.fillOval(x+10,y+7,10,7);g.drawLine(x+20,y+10,x+30,y+10);break;case 2:g.fill3DRect(x,y,5,30,false);g.fill3DRect(x+15,y,5,30,f

32、alse);g.fill3DRect(x+5,y+5,10,20,false);g.fillOval(x+7,y+10,7,10);g.drawLine(x+10,y+20,x+10,y+30);break;case 3:g.fill3DRect(x,y,30,5,false);g.fill3DRect(x,y+15,30,5,false);g.fill3DRect(x+5,y+5,20,10,false);g.fillOval(x+10,y+7,10,7);g.drawLine(x+10,y+10,x,y+10);break;/畫子彈public void drawzd(Tank tank,

33、Graphics g) if(tank.zx!=null) for(int k=0;ktank.zx.size();k+) ZDan s = tank.zx.get(k);if(s.isLive) g.draw3DRect(s.x,s.y,1,1,false);else tank.zx.remove(s);Thread t = new Thread(s);t.start();/射擊敵人坦克public void shotEnemy(mytank mt) for(int i=0;imt.zx.size();i+) zd= mt.zx.get(i);for(int j=0;jenemy.size(

34、);j+) en = enemy.get(j);if(isJizhong(en,zd) zhd = new ZhaDan(en.x,en.y); ZDs.add(zhd);if(isSounds) sounds.clip.play();mt.zx.remove(zd);en.isLive=false;enemy.remove(en);mt.record.enemyCDwon();mt.record.myCJ();/射擊我軍坦克public void shotmytank(enemyTank t) for(int i=0;it.zx.size();i+) zd= t.zx.get(i);for(

35、int j=0;jmyt.size();j+) mt = myt.get(j);if(isJizhong(mt,zd) zhd = new ZhaDan(mt.x,mt.y); ZDs.add(zhd);if(isSounds)sounds.clip.play();t.zx.remove(zd);Record.mylifeD();myt.remove(mt); if(myt.size()0) mytank k = new mytank(200,350,1);myt.add(k);/判斷子彈是否擊中坦克public boolean isJizhong(Tank en,ZDan zd) boole

36、an b = false;switch(zd.direct) case 0:if(zd.xen.x&zd.xen.x+20&zd.yen.x&zd.xen.x+30&zd.yen.x&zd.xen.y)|(zd.xen.x&zd.xen.y) b=true;break;case 1:if(zd.yen.y&zd.yen.x)|(zd.yen.y&zd.yen.x) b=true;break;case 3:if(zd.yen.y&zd.yen.y+30&zd.xen.y&zd.yen.y+20&zd.x0) for(int i=0;i200) et.bl=false;sounds.clip2.s

37、top();/鍵盤事件處理public void keyPressed(KeyEvent e) if(!isOver()&!isZanT) if(e.getKeyCode()=KeyEvent.VK_W) mt.setDirect(0);mt.y-=mytank.myspeed;if(mt.y670)mt.x-=mytank.myspeed;else if(e.getKeyCode()=KeyEvent.VK_S) mt.setDirect(2);mt.y+=mytank.myspeed;if(mt.y370) mt.y-=mytank.myspeed;else if(e.getKeyCode

38、()=KeyEvent.VK_A) mt.setDirect(3);mt.x-=mytank.myspeed;if(mt.x0) for(int i=0;i200) et.bl=false;sounds.clip2.stop();/畫坦克(不管是畫敵人坦克還是畫自己坦克都須調(diào)用此方法)public void drawtank(int x,int y,int type,int direct,Graphics g) switch(type) case 0:g.setColor(Color.CYAN);break;case 1:g.setColor(Color.yellow);break;case

39、2:g.setColor(Color.orange);break;switch(direct) case 0:g.fill3DRect(x,y,5,30,false);g.fill3DRect(x+15,y,5,30,false);g.fill3DRect(x+5,y+5,10,20,false);g.fillOval(x+7,y+10,7,10);g.drawLine(x+10,y+10,x+10,y);break;case 1:g.fill3DRect(x,y,30,5,false);g.fill3DRect(x,y+15,30,5,false);g.fill3DRect(x+5,y+5,

40、20,10,false);g.fillOval(x+10,y+7,10,7);g.drawLine(x+20,y+10,x+30,y+10);break;case 2:g.fill3DRect(x,y,5,30,false);g.fill3DRect(x+15,y,5,30,false);g.fill3DRect(x+5,y+5,10,20,false);g.fillOval(x+7,y+10,7,10);g.drawLine(x+10,y+20,x+10,y+30);break;case 3:g.fill3DRect(x,y,30,5,false);g.fill3DRect(x,y+15,3

41、0,5,false);g.fill3DRect(x+5,y+5,20,10,false);g.fillOval(x+10,y+7,10,7);g.drawLine(x+10,y+10,x,y+10);break;/畫子彈public void drawzd(Tank tank,Graphics g) if(tank.zx!=null) for(int k=0;k0) mytank k = myts0.get(0);drawtank(k.x,k.y,k.type,k.direct,g);drawzd(k,g);shotEnemy(k);if(myts1.size()0) mytank k = m

42、yts1.get(0);drawtank(k.x,k.y,k.type,k.direct,g);drawzd(k,g);shotEnemy(k);/畫敵軍坦克public void addenemytank(Graphics g) if(enemys.size()0) for(int i=0;ienemys.size();i+) enemyTank k = enemys.get(i);k.zh=46;k.zhy=45;k.zhx=145;drawtank(k.x,k.y,k.type,k.direct,g);drawzd(k,g);shotmytank(k);if(enemys.size()=

43、8) int i=(int)(Math.random()*7);enemyTank k = new enemyTank(eemi+10,0,0);k.setDirect(2);if(!enemyTank.isContact(k) Thread t = new Thread(k);t.start(); this.enemys.add(k);enemyTank.enemy.add(k);/記錄我的成績public void zhanji(Graphics g) drawtank(10,60,0,0,g);drawtank(765,60,0,0,g);g.setColor(Color.red);g.

44、drawString(X +myts0XM,50,80); g.drawString(X +myts1XM,795,80);/g.drawString(X +mt.record.getXMenemy(),800,80);/判斷子彈是否擊中坦克public boolean isJizhong(Tank en,ZDan zd) boolean b = false;switch(zd.direct) case 0:if(zd.xen.x&zd.xen.x+20&zd.yen.x&zd.xen.x+30&zd.yen.x&zd.xen.y)|(zd.xen.x&zd.xen.y) b=true;bre

45、ak;case 1:if(zd.yen.y&zd.yen.x)|(zd.yen.y&zd.yen.x) b=true;break;case 3:if(zd.yen.y&zd.yen.y+30&zd.xen.y&zd.yen.y+20&zd.xen.x+30) b=true;break;return b;/射擊敵人坦克public void shotEnemy(mytank mt) for(int i=0;imt.zx.size();i+) ZDan zd= mt.zx.get(i);for(int j=0;j0) k = myts0.get(0);if(k=mt) myts0XM+;if(my

46、ts1.size()0) kk = myts1.get(0);if(kk=mt) myts1XM+;if(isSouds) sounds.clip.play();mt.zx.remove(zd);en.isLive=false;enemys.remove(en);mt.record.enemyCDwon();mt.record.myCJ();/射擊我軍坦克public void shotmytank(enemyTank t) for(int i=0;it.zx.size();i+) ZDan zd= t.zx.get(i);for(int j=0;jmyts0.size();j+) mytan

47、k mt = myts0.get(j);if(isJizhong(mt,zd) ZhaDan zhd = new ZhaDan(mt.x,mt.y); zhs.add(zhd);myts0life-;if(isSouds) sounds.clip.play();t.zx.remove(zd);myts0.remove(mt); if(myts0.size()0) mytank k = new mytank(290,415,1);myts0.add(k);for(int j=0;jmyts1.size();j+) mytank mt = myts1.get(j);if(isJizhong(mt,

48、zd) ZhaDan zhd = new ZhaDan(mt.x,mt.y); zhs.add(zhd);myts1life-;if(isSouds) sounds.clip.play();t.zx.remove(zd);Record.mylifeD();myts1.remove(mt); if(myts1.size()0) mytank k = new mytank(580,415,1);myts1.add(k);/爆炸效果public void Bomp(Graphics g) for(int i=0;i6) g.drawImage(image1,zh.x,zh.y,30,30,this)

49、;else if(zh.LifeTime3) g.drawImage(image2,zh.x,zh.y,30,30,this);else g.drawImage(image3,zh.x,zh.y,30,30,this);zh.lifeDown();if(zh.LifeTime=0) zhs.remove(zh);public void run() while(true) try Thread.sleep(100); catch (InterruptedException e) e.printStackTrace();this.repaint();public void keyPressed(K

50、eyEvent arg0) if(!isOver()&!isZanT) if(arg0.getKeyCode()=KeyEvent.VK_UP&myts1.size()0) mytank k = myts1.get(0);k.setDirect(0);k.y-=mytank.myspeed;if(k.y0) mytank k = myts1.get(0);k.setDirect(2);k.y+=mytank.myspeed;if(k.y415) k.y-=mytank.myspeed;else if(arg0.getKeyCode()=KeyEvent.VK_RIGHT&myts1.size(

51、)0) mytank k = myts1.get(0);k.setDirect(1);k.x+=mytank.myspeed;if(k.x716) k.x-=mytank.myspeed;else if(arg0.getKeyCode()=KeyEvent.VK_LEFT&myts1.size()0) mytank k = myts1.get(0);k.setDirect(3);k.x-=mytank.myspeed;if(k.x0) mytank k = myts1.get(0);k.feed(k);if(arg0.getKeyCode()=KeyEvent.VK_W&myts0.size(

52、)0) mytank k = myts0.get(0);k.setDirect(0);k.y-=mytank.myspeed;if(k.y0) mytank k = myts0.get(0);k.setDirect(2);k.y+=mytank.myspeed;if(k.y415) k.y-=mytank.myspeed;else if(arg0.getKeyCode()=KeyEvent.VK_D&myts0.size()0) mytank k = myts0.get(0);k.setDirect(1);k.x+=mytank.myspeed;if(k.x716) k.x-=mytank.m

53、yspeed;else if(arg0.getKeyCode()=KeyEvent.VK_A&myts0.size()0) mytank k = myts0.get(0);k.setDirect(3);k.x-=mytank.myspeed;if(k.x0) mytank k = myts0.get(0);k.feed(k); 1.5系統(tǒng)運行及使用說明系統(tǒng)在Eclips、DOS環(huán)境下都可以運行。用戶根據(jù)主界面,菜單里有二級菜單開始新游戲,選擇開始新游戲又有單人游戲和雙人游戲。菜單還包刮繼續(xù)上局,存盤退出,暫停游戲,游戲設(shè)置等。本程序運用了多線程編程,每個坦克和子彈的運動都是因為線程的原因,本系

54、統(tǒng)還用到了輸出輸入流的知識,將戰(zhàn)場的坦克坐標記錄到文本文件中。題目二 都昌大酒店餐飲管理系統(tǒng)2.1題目簡介都昌大酒店餐飲管理系統(tǒng)是采用Java編程語言,用JDBC連接到數(shù)據(jù)庫的單機版小型系統(tǒng)。為方便餐飲管理,記錄酒店日常管理有關(guān)信息,都昌大酒店管理系統(tǒng)孕育而生。2.2設(shè)計的內(nèi)容、要求和目標2.2.1設(shè)計的內(nèi)容 都昌大酒店管理系統(tǒng),設(shè)計了數(shù)據(jù)庫,實現(xiàn)了對數(shù)據(jù)庫的數(shù)據(jù)插入,查詢,更新等各項操作。在都昌大酒店管理系統(tǒng)中,開發(fā)了面向員工的管理平臺。對員工提供的服務(wù)有登陸,瀏覽,以及對員工的添加、查詢、修改、刪除功能。2.2.2要求 1. 登錄界面 2. 人事管理模塊 3. 部門管理模塊.,輸入時部門名

55、稱用下拉框選擇,必須是部門表的部門名稱,保存到數(shù)據(jù)庫中時將保存到部門表中。4. 人事信息管理模塊,可以進行對員工的查詢,當然可以添加新的員工,還可以刪除一些員工。2.2.3目標 能夠?qū)崿F(xiàn)對數(shù)據(jù)庫的操作,可以實現(xiàn)對用戶的用戶名和密碼進行驗證,如果登陸成功,則進入都昌大酒店餐飲管理系統(tǒng)的主界面,通過主界面提供的菜單,可以實現(xiàn)對菜譜,人事信息,部門信息,以及對以上信息的添加、查詢、修改、刪除。2.3總體設(shè)計2.3.1功能模塊設(shè)計下面列出了本系統(tǒng)的整體功能結(jié)果圖以及各個模塊之間的彼此聯(lián)系,見圖2-1所示。圖2-1 系統(tǒng)模塊各個功能間的聯(lián)系說明:用戶根據(jù)登錄系統(tǒng)的主界面,在此主頁面里可以選擇人事管理模塊

56、,它提供為本酒店所有員工的基本信息,還可以進行添加或者刪除員工操作,在主頁面里你還可以選擇部門管理模塊,它為本酒店提供開設(shè)和廢除部門的功能,等等。2.3.2系統(tǒng)所有類之間的關(guān)系系統(tǒng)所有類之間的關(guān)系如圖2-2所示圖2-2系統(tǒng)所有類之間的關(guān)系在都昌大酒店餐飲管理系統(tǒng)中,需要編寫12個Java源文件;其中有一個專門連接數(shù)據(jù)庫的類,那就是GetRs.java類,它就相當于我們要訪問的數(shù)據(jù)庫里面的表,屬于數(shù)據(jù)層,而RSModel.java和departModel.java屬于業(yè)務(wù)邏輯層,主要負責與數(shù)據(jù)層聯(lián)系,從數(shù)據(jù)層里面取得數(shù)據(jù),而其他的屬于界面層,主要是將從數(shù)據(jù)庫里面取出來的數(shù)據(jù)顯示出來。2.4數(shù)據(jù)庫

57、設(shè)計 2.4.1關(guān)系模式 員工登錄(員工編號,密碼)員工信息(員工編號,員工姓名,性別,年齡,住址,職位,所在部門編號)部門信息(部門編號,部門名稱,職位)菜譜信息(菜單編號,菜品名稱,菜品價格,所用材料,材料庫存,材料購地)2.4.2 E-R圖圖2-3 E-R圖2.4.3數(shù)據(jù)庫管理物理實現(xiàn)數(shù)據(jù)庫是采用SQL server 2005,數(shù)據(jù)庫名是Restaurant。2.4.4數(shù)據(jù)庫表 員工登錄信息表( Login_info )對應(yīng)的數(shù)據(jù)字典如表2-1所示:表2-1 員工登錄信息名字:員工登錄信息描述:員工登錄的基本信息定義:員工登錄信息=員工編號+員工密碼員工基本信息表( stuff_info

58、 )對應(yīng)的數(shù)據(jù)字典如表2-2所示:表2-2 員工基本信息表名字:員工基本信息表描述:員工基本信息表定義:員工基本信息表=員工編號+員工姓名+性別+年齡+地址+職位+部門編號部門管理信息表( depart_info )對應(yīng)的數(shù)據(jù)字典如表2-3所示:表2-3 部門管理信息表名字:部門管理信息表描述:部門管理信息表定義:部門管理信息表=部門編號+部門名稱+職位菜譜信息表( menu_info )對應(yīng)的數(shù)據(jù)字典如表2-4所示:表2-4 菜譜基本信息名字:菜譜基本信息描述:菜譜基本信息定義:菜譜基本信息=菜的編號+菜名+單價+庫存+購進地址2.4.5表的建立1. 員工基本信息表的建立圖2-4 員工基本信

59、息表的建立2. 登錄日志表的建立圖2-5 登錄日志表的建立3. 部門信息表的建立圖2-6 部門信息表的建立4. 菜譜信息表的建立圖2-7 菜譜基本信息表的建立2.4.6表與表之間的關(guān)系各表之間的關(guān)系如圖2-8所示:圖 2-8 各個表間的關(guān)系圖2.5詳細設(shè)計及實現(xiàn)登錄界面:登錄界面是有帳號,密碼一個文本框和一個密碼框,帳號和密碼存在數(shù)據(jù)庫的表格中,用戶先輸入用戶名和密碼,程序先從數(shù)據(jù)庫中核實密碼是否正確,如果正確,再核實輸入的用戶的職位是否在經(jīng)理或者經(jīng)理以上,如果是,則登錄成功,如果不是,則輸入的用戶沒有訪問權(quán)限。系統(tǒng)主界面:該主界面布局有點復(fù)雜,主要以BorderLayout,和CarderL

60、ayout布局為主。人事管理模塊:用戶用于添加、刪除、修改、查詢?nèi)耸滦畔⒌哪K。部門管理模塊:用戶用于添加、刪除、修改、查詢部門信息的模塊。菜譜管理模塊:用戶用于添加、刪除、修改、查詢菜品信息的模塊。2.5.1操作界面設(shè)計窗體功能描述 窗口默認大小為寬600,高600,窗口大小設(shè)置為可變的,可以用鼠標拉動界面,改變界面大小。文字顏色為默認,黑體,字體為默認的。登陸界面,如圖2-9圖2-9登陸界面所有的帳號和密碼都存在數(shù)據(jù)庫中,登錄成功進入管理系統(tǒng)的主界面,登錄帳號或密碼輸入錯誤會彈出相應(yīng)的提示對話框,如圖2-10所示圖2-10 登錄失敗信息提示登錄成功進入管理系統(tǒng)的主界面,管理系統(tǒng)的主界面如圖

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論