JAVA程序設計課程設計(論文)坦克大戰(zhàn)游戲_第1頁
JAVA程序設計課程設計(論文)坦克大戰(zhàn)游戲_第2頁
JAVA程序設計課程設計(論文)坦克大戰(zhàn)游戲_第3頁
JAVA程序設計課程設計(論文)坦克大戰(zhàn)游戲_第4頁
JAVA程序設計課程設計(論文)坦克大戰(zhàn)游戲_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、遼 寧 工 業(yè) 大 學java程序設計 課程設計(論文)題目: 坦克大戰(zhàn)游戲 院(系): 專業(yè)班級: 學 號: 學生姓名: 指導教師: 教師職稱: 起止時間: 程序設計專題(報告)任務及評語院(系):軟件學院 教研室:軟件教研室學 號學生姓名專業(yè)班級程序設計(報告)題目坦克大戰(zhàn)游戲程序設計(報告)任務程序設計專題的任務與要求:(1)掌握java編程、面向對象的基礎知識。(2)較熟練地編寫java應用程序application。(3)了解java的常用標準類庫、編程技巧、異常處理。(5)聯(lián)系已學過的內容,鞏固所學的理論,增強獨立工作能力。(6)通過設計主要使學生有一個獨立編寫程序的過程,對理論學

2、習及動手能力都有一個很大的提高。(7)通過本次設計,進一步培養(yǎng)學生熱愛專業(yè)的思想,同時對本專業(yè)綜合素質的提高起一個積極的推動作用。課程設計過程中,要嚴格遵守實踐環(huán)節(jié)的時間安排,聽從指導教師的指導。正確地完成上述內容,記錄實習日記,規(guī)范完整地撰寫出課程設計報告。指導教師評語及成績成績: 指導教師簽字: 2009 年 12 月 20 日遼 寧 工 業(yè) 大 學 課 程 設 計 說 明 書(論 文)目 錄第1章 課程設計的目的與要求11.1 課程設計目的11.2 課程設計的實驗環(huán)境11.3 課程設計的預備知識11.4 課程設計要求1第2章 課程設計內容22.1課程設計主要內容22.2概要設計22.2.

3、1自定義類說明22.3詳細設計42.4測試分析142.4.1程序運行情況142.4.2程序異常處理15第3章 課程設計總結16參考資料17第1章 課程設計的目的與要求1.1 課程設計目的java程序設計是計算機相關專業(yè)的必修專業(yè)基礎課程,其實踐性、應用性很強。實踐教學環(huán)節(jié)是必不可少的一個重要環(huán)節(jié)。本課程的程序設計專題實際是計算機相關專業(yè)學生學習完java程序設計課程后,進行的一次全面的綜合訓練,java程序設計的設計目的是加深對理論教學內容的理解和掌握,使學生較系統(tǒng)地掌握程序設計及其在網(wǎng)絡開發(fā)中的廣泛應用,基本方法及技巧,為學生綜合運用所學知識,利用軟件工程為基礎進行軟件開發(fā)、并在實踐應用方面

4、打下一定基礎。1.2 課程設計的實驗環(huán)境硬件要求能運行windows 9.x操作系統(tǒng)的微機系統(tǒng)。java程序設計語言及相應的集成開發(fā)環(huán)境,j2sdk和eclipse開發(fā)工具。1.3 課程設計的預備知識熟悉java語言及eclipse開發(fā)工具。1.4 課程設計要求按課程設計指導書提供的課題,要求學生在自行完成各個操作環(huán)節(jié),并能實現(xiàn)且達到舉一反三的目的,完成一個項目解決一類問題。要求學生能夠全面、深入理解和熟練掌握所學內容,并能夠用其分析、設計和解答類似問題;對此能夠較好地理解和掌握,能夠進行簡單分析和判斷;能編寫出具有良好風格的程序;掌握java程序設計的基本技能和面向對象的概念和方法;了解多線

5、程、安全和網(wǎng)絡等編程技術。同時培養(yǎng)學生進行分析問題、解決問題的能力;培養(yǎng)學生進行設計分析、設計方法、設計操作與測試、設計過程的觀察、理解和歸納能力的提高。第2章 課程設計內容2.1課程設計主要內容坦克大戰(zhàn)游戲是在eclipse環(huán)境下編程的游戲,其中包括對主戰(zhàn)坦克的編寫、坦克的初始位置的編寫、坦克的移動方向的編寫、坦克的速度的編寫、坦克的子彈速度的編寫、敵軍的子彈速度的編寫、設置游戲難度的編寫、子彈的編寫、敵軍坦克的編寫、構造函數(shù)的編寫,初始化敵軍坦克的位置和狀態(tài)的編寫、鍵盤控制坦克的移動的編寫、發(fā)彈的編寫、判斷是否被擊中的編寫、判斷是否擊中敵軍的編寫等。通過上下左右鍵進行對坦克的移動,通過空格

6、發(fā)射子彈,其它坦克可以隨機移動。構造主窗口中所需要的類,并將坦克加到窗口中,實現(xiàn)坦克的四個方向的移動并創(chuàng)建炮彈類,并讓屏幕中的坦克能發(fā)射炮彈,讓坦克可以朝對方開火,并將對方擊斃。2.2概要設計2.2.1自定義類說明(1)hstank2 類是一個自定義的異常類,其繼承的父類為jframe,沒有具備實現(xiàn)類的接口。用此類定義了坦克大戰(zhàn)的版本為坦克大戰(zhàn)(版本1.0)。其具體定義如下:public class hstank2 extends jframe hstank2(string title) public static void main(string args) hstank2 h = new

7、hstank2(坦克大戰(zhàn)(版本1.0) ;h.setvisible(true) ;(2)mytank類是用來定義主戰(zhàn)坦克的類,其繼承父類為jpanel,然后定義坦克的初始位置以及坦克的移動方向,讓坦克朝四個方向運動起來,在類mytank中啟用多線程機制,讓系統(tǒng)不斷的進行重畫。其中定義成員變量具體如下:int tankspeed定義成員變量來表示坦克的速度int tankbullet定義成員變量來表示子彈速度int tankfbullet定義成員變量來表示敵軍的子彈速度int shengming定義成員變量來顯示坦克的生命int nandu定義成員變量來設置游戲難度int num定義成員變量來表

8、示敵軍坦克數(shù)量 接下來是構造函數(shù),初始化敵軍坦克的位置和狀態(tài),其具體情況如下:mytank() for (int i = 0; inum; i+) xfi = (int) (math.random() * 560) ;yfi = (int) (math.random() * 560) ;(3)在mytank類當中添加按鍵的方法,鍵盤控制坦克的移動和發(fā)彈中,用public公共類創(chuàng)建keypressed方法,當中添加x,y,dy,dx等屬性以及常量和構造方法,讓主戰(zhàn)坦克打出炮彈。在mytank類當中增加對空格鍵的處理,使每按下空格鍵的時候,坦克打出一發(fā)炮彈。為了解決坦克停下來也能開火的問題給坦克加

9、一炮筒,根據(jù)炮筒方向和位置設定子彈的方向和位置并new出來,然后返回。每次move之后根據(jù)mytank的新方向確定炮筒的方向。為了能夠打出多發(fā)炮彈,使用容器填裝多發(fā)炮彈,每當抬起空格鍵的時候就往容器中加入新的炮彈。其中創(chuàng)建keypressed方法如下:public void keypressed(keyevent e) color + ;if(e.getkeycode() = keyevent.vk_up) op = 1 ;y = y - tankspeed ;dy = dy - tankspeed ;(4)成員變量表如下:表1成員變量表名稱成員變量描述tankspeed坦克的速度tankbu

10、llet坦克的子彈速度shengming生命nandu設置游戲難度num敵軍坦克數(shù)量keypressed鍵盤控制2.3詳細設計編寫坦克大戰(zhàn)的代碼如下:import java.awt.* ; import javax.swing.* ; import java.awt.event.*; import java.util.eventlistener; public class hstank2 extends jframe hstank2(string title) this.settitle(title) ; this.setsize(608 , 630) ; this.setlocation(3

11、00 , 100) ; this.setbackground(color.white) ; mytank mp = new mytank() ; this.add(mp) ; this.addkeylistener(mp) ; new thread(mp).start() ; public static void main(string args) hstank2 h = new hstank2(坦克大戰(zhàn)(版本1.0) ; h.setvisible(true) ; /主戰(zhàn)坦克 class mytank extends jpanel implements keylistener , runnab

12、le int x = 280, y = 280 ;/坦克的初始位置 int op = 1 ;/坦克的移動方向 int color = 0 ; int tankspeed = 8 ;/坦克的速度 int tankbullet = 8 ;/坦克的子彈速度 int tankfbullet = 4 ;/敵軍的子彈速度 int shengming = 100 ;/生命 int fenshu = 0 ; int nandu = 5 ; /設置游戲難度 /子彈 int dx = 295 , dy = 295 ; int dx1 = 295 , dy1 = -10 ; int dx2 = 600 , dy2

13、= 295 ; int dx3 = 295 , dy3 = 600 ; int dx4 = -10 , dy4 = 295 ; /敵軍坦克 int num = 10 ;/敵軍坦克數(shù)量,不能修改 int xf = new intnum ; int yf = new intnum ; int opf = new intnum ; int dxf = new intnum ; int dyf = new intnum ; int dxf1 = new intnum ; int dyf1 = new intnum ; int dxf2 = new intnum ; int dyf2 = new int

14、num ; int dxf3 = new intnum ; int dyf3 = new intnum ; int dxf4 = new intnum ; int dyf4 = new intnum ; /構造函數(shù),初始化敵軍坦克的位置和狀態(tài) mytank() for (int i = 0; inum; i+) xfi = (int) (math.random() * 560) ; yfi = (int) (math.random() * 560) ; dxfi = xfi + 15 ; dyfi = yfi + 15 ; for (int i = 0; inum; i+) dxf1i = 2

15、95 ; dyf1i = -10 ; dxf2i = 600 ; dyf2i = 295 ; dxf3i = 295 ; dyf3i = 600 ; dxf4i = -10 ; dyf4i = 295 ; /鍵盤控制坦克的移動,發(fā)彈 public void keypressed(keyevent e) color + ; if(e.getkeycode() = keyevent.vk_up) op = 1 ; y = y - tankspeed ; dy = dy - tankspeed ; if(y = 560) x = x - tankspeed ; dx = dx - tankspeed

16、 ; if(e.getkeycode() = keyevent.vk_down) op = 3 ; y = y + tankspeed ; dy = dy + tankspeed ; if(y = 560) y = y - tankspeed ; dy = dy - tankspeed ; if(e.getkeycode() = keyevent.vk_left) op = 4 ; x = x - tankspeed ; dx = dx - tankspeed ; if(x = 0) x = x + tankspeed ; dx = dx + tankspeed ; if(e.getkeyco

17、de() = keyevent.vk_space) if(op = 1) dx1 = dx ; dy1 = dy ; if(op = 2) dx2 = dx ; dy2 = dy ; if(op = 3) dx3 = dx ; dy3 = dy ; if(op = 4) dx4 = dx ; dy4 = dy ; this.repaint() ; public void keyreleased(keyevent e) public void run() for (int a = 0; a60000; a+) dy1 = dy1 - tankbullet ; dx2 = dx2 + tankbu

18、llet ; dy3 = dy3 + tankbullet ; dx4 = dx4 - tankbullet ; for (int i = 0; inum; i+) dyf1i = dyf1i - tankfbullet ; dxf2i = dxf2i + tankfbullet ; dyf3i = dyf3i + tankfbullet ; dxf4i = dxf4i - tankfbullet ; /判斷是否被擊中 for (int i = 0; inum; i+) if(dyf1iy +8 & dxf1i-x-10 & dxf1i-xx+2 &dxf2i-10 & dyf2i - y y

19、+2 & dyf3i-10& dxf3i-xx+8 &dxf4i-10 & dyf4i - y 40 ) system.out.println (被4擊中) ; dxf4i = dxfi ; dyf4i = dyfi ; shengming = shengming - nandu ; /判斷是否擊中敵軍 for (int i = 0; inum; i+) if(dy1yfi +8 & dx1-xfi-10 & dx1-xfixfi+2 &dx2-10 & dy2 - yfi yfi+2 & dy3-10& dx3-xfixfi+8 &dx4-10 & dy4 - yfi 40 ) system

20、.out.println (4擊中) ; fenshu = fenshu + 100 ; xfi = (int)(math.random() * 560 ); yfi = (int)(math.random() * 560 ); dxfi = xfi + 15 ; dyfi = yfi + 15 ; public void paint(graphics g) super.paint(g) ; this.setbackground(color.white) ; g.setcolor(color.red) ; g.drawstring(生命: , 10 , 20 ) ; g.fillrect(50

21、 , 10 , shengming * 5 , 10) ; g.drawrect(50 , 10 , 500 , 10) ; g.drawstring(得分: + fenshu , 10 , 40) ; if(op = 1) g.setcolor(color.red) ; g.fillrect(x , y , 40 , 40) ; switch (color % 6) case 0: g.setcolor(color.blue) ; break; case 1: g.setcolor(color.yellow) ; break; case 2: g.setcolor(color.red) ;

22、break; case 3: g.setcolor(color.orange) ; break; case 4: g.setcolor(color.green) ; break; case 5: g.setcolor(color.black) ; break; g.filloval(x - 5 , y - 5 , 10 , 10) ; g.filloval(x - 5 , y + 5 , 10 , 10) ; g.filloval(x - 5 , y + 15 , 10 , 10) ; g.filloval(x - 5 , y + 25 , 10 , 10) ; g.filloval(x -

23、5 , y + 35 , 10 , 10) ; g.filloval(x + 35 , y - 5 , 10 , 10) ; g.filloval(x + 35 , y + 5 , 10 , 10) ; g.filloval(x + 35 , y + 15 , 10 , 10) ; g.filloval(x + 35 , y + 25 , 10 , 10) ; g.filloval(x + 35 , y + 35 , 10 , 10) ;g.setcolor(color.black) ; g.fillrect(x + 15 , y - 20 , 10 , 40) ; switch (color

24、 % 20) case 0: g.setcolor(color.white) ; break; case 1: g.setcolor(color.white) ; break; case 2: g.setcolor(color.white) ; break; case 3: g.setcolor(color.white) ; break; case 4: g.setcolor(color.white) ; break; case 5: g.setcolor(color.white) ; break; case 6: g.setcolor(color.white) ; break; case 7

25、: g.setcolor(color.white) ; break; case 8: g.setcolor(color.white) ; break; case 9: g.setcolor(color.white) ; break; case 10: g.setcolor(color.black) ; break; case 11: g.setcolor(color.black) ; break; case 12: g.setcolor(color.black) ; break; case 13: g.setcolor(color.black) ; break; case 14: g.setc

26、olor(color.black) ; break; case 15: g.setcolor(color.black) ; break; case 16: g.setcolor(color.black) ; break; case 17: g.setcolor(color.black) ; break; case 18: g.setcolor(color.black) ; break; case 19: g.setcolor(color.black) ; break; g.filloval(x + 5 , y + 30 , 10 , 10) ; g.filloval(x + 25 , y +

27、30 , 10 , 10) ; if(op = 2) g.setcolor(color.green) ; g.fillrect(x , y , 40 , 40) ; switch (color % 6) case 0: g.setcolor(color.blue) ; break; case 1: g.setcolor(color.yellow) ; break; case 2: g.setcolor(color.red) ; break; case 3: g.setcolor(color.orange) ; break; case 4: g.setcolor(color.green) ; b

28、reak; case 5: g.setcolor(color.black) ; break; g.filloval(x - 5 , y - 5 , 10 , 10) ; g.filloval(x + 5 , y - 5 , 10 , 10) ; g.filloval(x + 15 , y - 5 , 10 , 10) ; g.filloval(x + 25 , y - 5 , 10 , 10) ; g.filloval(x + 35 , y - 5 , 10 , 10) ; g.filloval(x - 5 , y+35 , 10 , 10) ; g.filloval(x + 5 , y+35

29、 , 10 , 10) ; g.filloval(x + 15 , y+35 , 10 , 10) ; g.filloval(x + 25 , y+35 , 10 , 10) ; g.filloval(x + 35 , y+35 , 10 , 10) ; g.setcolor(color.black) ; g.fillrect(x + 20 , y + 15 , 40 , 10) ; switch (color % 20) case 0: g.setcolor(color.white) ; break; case 1: g.setcolor(color.white) ; break; case

30、 2: g.setcolor(color.white) ; break; case 3: g.setcolor(color.white) ; break; case 4: g.setcolor(color.white) ; break; case 5: g.setcolor(color.white) ; break; case 6: g.setcolor(color.white) ; break; case 7: g.setcolor(color.white) ; break; case 8: g.setcolor(color.white) ; break; case 9: g.setcolo

31、r(color.white) ; break; case 10: g.setcolor(color.black) ; break; case 11: g.setcolor(color.black) ; break; case 12: g.setcolor(color.black) ; break; case 13: g.setcolor(color.black) ; break; case 14: g.setcolor(color.black) ; break; case 15: g.setcolor(color.black) ; break; case 16: g.setcolor(colo

32、r.black) ; break; case 17: g.setcolor(color.black) ; break; case 18: g.setcolor(color.black) ; break; case 19: g.setcolor(color.black) ; break; switch (color % 6) case 0: g.setcolor(color.blue) ; break; case 1: g.setcolor(color.yellow) ; break; case 2: g.setcolor(color.red) ; break; g.filloval(x , y

33、 + 5 , 10 , 10) ; g.filloval(x , y + 25 , 10 , 10) ; if(op = 3) g.setcolor(color.blue) ; g.fillrect(x , y , 40 , 40) ; g.filloval(x - 5 , y - 5 , 10 , 10) ; g.filloval(x - 5 , y + 5 , 10 , 10) ; g.filloval(x - 5 , y + 15 , 10 , 10) ; g.filloval(x - 5 , y + 25 , 10 , 10) ; g.filloval(x - 5 , y + 35 ,

34、 10 , 10) ; g.filloval(x + 35 , y - 5 , 10 , 10) ; g.filloval(x + 35 , y + 5 , 10 , 10) ; g.filloval(x + 35 , y + 15 , 10 , 10) ; g.filloval(x + 35 , y + 25 , 10 , 10) ; g.filloval(x + 35 , y + 35 , 10 , 10) ; g.setcolor(color.black) ; g.fillrect(x + 15 , y + 20 , 10 , 40) ; 2.4測試分析2.4.1程序運行情況編譯完相關的

35、代碼后,在eclipse中運行,會顯示出如下效果圖,通過上下左右鍵來移動坦克并躲避子彈,通過按空格來發(fā)射子彈,其中還可以顯示所剩的生命值,具體效果如下圖顯示:圖2.1坦克大戰(zhàn)運行時效果圖如下是此游戲結束時的效果圖:圖2.2坦克大戰(zhàn)結束時效果圖2.5.2程序異常處理此程序不涉及異常處理。第3章 課程設計總結 在internet流行的今天,對傳統(tǒng)的計算模型提出了新的挑戰(zhàn)。由于java語言具有能獨立于平臺而運行、面向對象、可對動態(tài)畫面進行設計與操作、堅固性等特點,又具有多線程、內置校驗器用來防止病毒入侵等功能,所以用來在internet上研制與開發(fā)軟件時,特別受到用戶的歡迎?,F(xiàn)在,許許多多的原c+程序員已經(jīng)轉向了java編程,同時java程序的應用也由簡單的applet(一種小應用程序)逐步向大型

溫馨提示

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

評論

0/150

提交評論