基于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頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 摘 要面向?qū)ο蠓椒ㄊ且环N把面向?qū)ο蟮乃枷霊?yīng)用于軟件開發(fā)過程中,指導(dǎo)開發(fā)活動的系統(tǒng)方法,它吸取了結(jié)構(gòu)化程序設(shè)計的精華,以更接近人們通常思維的方式來處理問題,是一種全新的軟件開發(fā)技術(shù)。作為一種新的的編程語言,Java很大程度推廣了面向?qū)ο蟮乃枷?。隨著計算機技術(shù)的發(fā)展,Java的強大展現(xiàn)出它不可替代的作用。Java的功能不僅體現(xiàn)在它網(wǎng)絡(luò)方面的應(yīng)用,對于應(yīng)用程序設(shè)計、游戲設(shè)計等Java都能滿足需求。本文針對Java 的具體應(yīng)用,設(shè)計了一個小游戲。根據(jù)游戲的規(guī)則,用戶將可以和計算機進行簡單對戰(zhàn)。程序?qū)崿F(xiàn)了友好的用戶交互界面,讓用戶能很好地對游戲進行操作。關(guān)鍵字:JAVA    &#

2、160; GUI    游戲 ABSTRACTThe Object-Oriented Method is a method which apllies the Object-Oriented Design to the process of the software exploiture and directs the ploy of development. It extracts the prime of the Structured Design for Computer Programmers, deals matters with afolksy fas

3、hion, which is considered to be a grand new software-develop technique.As a new programming language, Java spread the Object-Oriented Design in a certain degree. With the development of the technique of computer, the insurmountable function of JAVA is exhibited for its mightiness. Not only applies i

4、n network, JAVA also can fulfill the requirement of the Application-Design and Game-Design.In this paper, to use the idiographic application of JAVA , I design a game called . Following the regular of the game, user can play a simple revalry with computer. This programme actualizes a folksy GUI mode

5、, which will make user master game easily. Keywords: JAVA       GUI    Game目 錄一、 背景與意義- 1-二、坦克大戰(zhàn)小游戲應(yīng)用程序-2-三、 坦克大戰(zhàn)小游戲系統(tǒng)的設(shè)計-2-3.1系統(tǒng)需求分析-2-3.2系統(tǒng)開發(fā)及運行環(huán)境-2-3.3系統(tǒng)主要功能要求-3- 3.4坦克大戰(zhàn)系統(tǒng)總體結(jié)構(gòu)-3-3.5系統(tǒng)數(shù)據(jù)流圖-4-4、 設(shè)計原理及方案-4-5、 系統(tǒng)具體實現(xiàn)-6-六、詳細設(shè)計過程與算法實現(xiàn)-8-七、程序運行結(jié)果截圖-16-八、 總結(jié)-20-九、

6、 參考文獻-21-一、 背景與意義 1背景 游戲是全球最大的娛樂經(jīng)濟項目之一,已經(jīng)被命名為“第九藝術(shù)”。而由“游戲”派生出來的職業(yè),除了軟件開發(fā)外,游戲包裝宣傳推廣、攻略指導(dǎo)、網(wǎng)絡(luò)游戲管理員和職業(yè)游戲玩家等,已成為了一系列專門的崗位。面對游戲產(chǎn)業(yè)如此巨大的市場空間,國內(nèi)各大城市紛紛加大了這方面的人才培養(yǎng),中國的游戲人才培訓(xùn)已隨著游戲行業(yè)的總體發(fā)展開始逐步邁入了正軌。 雖然說中國的游戲行業(yè)開始逐步的邁入了正軌,但是現(xiàn)今,游戲人才出現(xiàn)嚴重的瓶頸時期,高校的擴招、金融危機的侵襲直接影響著我們最關(guān)心的就業(yè)問題,但是另一方面游戲人才的缺乏又直接制約著行業(yè)的發(fā)展,這就更加嚴格了對社會培訓(xùn)機構(gòu)的穩(wěn)定性和正規(guī)

7、性的要求。在我國,游戲人才培養(yǎng)體系還未健全,部分開設(shè)了相關(guān)專業(yè)的高校,游由于理論和實踐的脫離無法完全滿足網(wǎng)游公司對人才的需求。 所以,就中國目前的市場分析來看,加強游戲產(chǎn)業(yè)必須在多渠道人才培養(yǎng)體系上加快突破,盡快建立起多渠道人才培養(yǎng)體系,來滿足社會對游戲人才的需求。 坦克大戰(zhàn)(Battle City)是1985年日本南夢宮Namco游戲公司在任天堂FC(FamilyComputer)平臺上,推出的一款多方位平面射擊游戲。游戲以坦克戰(zhàn)斗及保衛(wèi)基地為主題。大部分80后的青年人曾經(jīng)都玩過這款FC平臺上的經(jīng)典游戲,F(xiàn)C平臺上的坦克大戰(zhàn)只能兩個人協(xié)同作戰(zhàn)。本系統(tǒng)運用Java這個跨平臺的編程語言

8、,在PC上重新實現(xiàn)這一款經(jīng)典游戲,探究曾經(jīng)這一款經(jīng)典游戲的大概設(shè)計與實現(xiàn),并且加入坦克八個方向的行走,多人的局域網(wǎng)對戰(zhàn)模式,使游戲的玩法更豐富。2 課程設(shè)計內(nèi)容坦克大戰(zhàn)游戲是一種動作電子游戲的名稱。坦克大戰(zhàn)游戲是一種動作電子游戲的名稱。玩家操作一輛己方坦克,消滅屏幕中不斷出現(xiàn)敵方坦克。己方坦克有血量限制,被敵方坦克的炮彈擊中會減少血量,當(dāng)血量為0時,任務(wù)失敗。(1)基本的游戲操作用戶可以通過鍵盤來操作自己的坦克,盡量不讓敵方坦克的炮彈擊中自己(2)計分,記時功能用戶在游戲的過程中,系統(tǒng)將記錄游戲的成績二、坦克大戰(zhàn)小游戲應(yīng)用程序 2.1 坦克大戰(zhàn)小游戲應(yīng)用程序概述此程序設(shè)計是一個小游戲(坦克大戰(zhàn)

9、)的實現(xiàn),主要運用了用戶圖形界面,程序接口和基本函數(shù)繪制來實現(xiàn),事件監(jiān)聽(包括鼠標(biāo)事件,鍵盤事件,響應(yīng)時間)也是這個程序的特色??傊?,本游戲在用戶界面的可操作性、游戲的美觀度、計分計時存儲結(jié)果方便都基本完善,有一定的可玩性。 2.1.1 坦克大戰(zhàn)小游戲系統(tǒng)任務(wù)及目的此小程序是為群眾閑暇消遣之用,玩家在進入游戲后按游戲規(guī)則擊毀敵方坦克獲得相應(yīng)的分數(shù),進入下一關(guān),直到全部過關(guān)。 2.2 主要特色系統(tǒng)介紹 玩家在使用此程序時更加能體驗到樂趣。當(dāng)玩家死亡以后,可以原地復(fù)活是本游戲的特色,可以激發(fā)玩家的游戲興趣。 2.3小結(jié) 雖然游戲在功能和界面上不能算的上很棒,但是麻雀雖小,五臟俱全,游戲具備了坦克大

10、戰(zhàn)這個經(jīng)典游戲鎖應(yīng)該具有的基本雛形。通過這一章,我們對這個游戲應(yīng)該有了比較宏觀的了解,我們將在這一基礎(chǔ)上探究游戲更完美的改變。三 坦克大戰(zhàn)小游戲系統(tǒng)的設(shè)計這一章是坦克大戰(zhàn)游戲系統(tǒng)的設(shè)計,從系統(tǒng)需求分析開始,介紹開發(fā)環(huán)境和用到的開發(fā)工具,系統(tǒng)主要的功能設(shè)計,系統(tǒng)的數(shù)據(jù)流程圖。3.1 系統(tǒng)需求分析坦克大戰(zhàn)的設(shè)計目標(biāo)為:(1)實現(xiàn)坦克大戰(zhàn)游戲功能,用鍵盤控制坦克(2)實現(xiàn)游戲難度和游戲模型的選擇,通過本關(guān)后可以選擇進入下一關(guān)。(3)加強游戲可玩性。3.2 系統(tǒng)開發(fā)及運行環(huán)境硬件平臺:CPU:INTEL-I5。 內(nèi)存:1024MB以上。軟件平臺:操作系統(tǒng):Windows XP。 數(shù)據(jù)庫:TXT文檔。開

11、發(fā)工具包:JDK Version1.6.2。最佳分辨率:800 X 6003.3 系統(tǒng)主要功能要求本系統(tǒng)為了實現(xiàn)游戲坦克大戰(zhàn)。主要實現(xiàn)如下功能: 系統(tǒng)界面美觀大方舒適; 實現(xiàn)游戲一些基礎(chǔ)信息的保存和讀?。?畫面流暢,具有可玩性 沒有較大的游戲BUG; 顯示游戲者的游戲時間和積分; 系統(tǒng)最大限度地實現(xiàn)了易維護性和易操作性; 系統(tǒng)運行穩(wěn)定、安全可靠; 玩家死亡以后如不想從新開始可以繼續(xù)游戲。3.4 坦克大戰(zhàn)系統(tǒng)總體結(jié)構(gòu)坦克大戰(zhàn)游戲是基于基本的軟件和普通硬件基礎(chǔ)上的傳統(tǒng)優(yōu)秀游戲,一個游戲應(yīng)該包括以下幾大功能,如圖: 游戲開始 圖(1) 總體結(jié)構(gòu)3.5 系統(tǒng)數(shù)據(jù)流圖游戲信息的流向,即系統(tǒng)數(shù)據(jù)流圖如圖2

12、.3所示 圖(2) 系統(tǒng)數(shù)據(jù)流圖四、設(shè)計原理及方案 本系統(tǒng)的坦克大戰(zhàn)是基于Java語言設(shè)計開發(fā)的,具有高超的人工智能,精美的圖形處理,支持單機運行和網(wǎng)絡(luò)對戰(zhàn)的坦克射擊游戲。比之前網(wǎng)絡(luò)上實現(xiàn)的游戲更加方便,快捷,智能。游戲基本玩法較簡單,游戲可一人電腦作戰(zhàn),每次電腦方有坦克10輛,游戲以消滅全部敵方坦克過關(guān)為目的。在這過程中,坦克有機會得到血塊來添加生命值,從而變得更加強大,也能利用各種有利地形來阻擊敵人。游戲設(shè)置了墻面,電腦方坦克不能穿越墻面射擊玩家坦克,而玩家坦克可隨意穿越墻面打擊電腦方坦克,這一游戲特權(quán)。還有給玩家坦克設(shè)置超級炮彈,當(dāng)電腦方坦克數(shù)量過多時,玩家坦克可以發(fā)射超級炮彈打擊敵方。

13、 主要新增的功能簡單羅列如下:4.1屏幕左上方顯示游戲狀態(tài),當(dāng)玩家方坦克數(shù)全為零時則游戲結(jié)束;4.2一般坦克只可在空地中或草叢中行走,不可通過墻面等障礙物;4.3游戲中打壞敵方坦克后,可能會在隨機位置隨機出現(xiàn)血塊獎勵,坦克經(jīng)過該位置可獲得相應(yīng)加生命值獎勵;4.4玩家坦克的游戲資格和電腦坦克不同。 4.5工作流程圖:程序開始連接服務(wù)器連接成功?YN新線程刷屏(間接調(diào)用paint)延遲25ms初始化游戲元素根據(jù)游戲元素的屬性,對其經(jīng)行操作和繪出其圖形Paint方法戰(zhàn)斗結(jié)束?Y鍵盤監(jiān)聽器判斷按下的是那個鍵改變相應(yīng)游戲元素的屬性 圖(3) 工作流程圖五、系統(tǒng)具體實現(xiàn)界面是系統(tǒng)和玩家之間最直接的交互界面

14、,界面的友好性體現(xiàn)了程序設(shè)計的質(zhì)量,界面是否便捷易懂也是程序所基本的要求。5.1界面設(shè)計5.1.1 用戶登錄界面圖 圖(4) 用戶登錄界面圖5.1.2 游戲主界面圖(5) 進入游戲后的界面5.2程序設(shè)計及調(diào)試運行 編寫12個CLASS文件,裝入一個包中,各個模塊的程序代碼都完成后,進行編譯連接運行,經(jīng)過反復(fù)調(diào)試,找出錯誤和不足,以達到游戲所需的基本功能和基本界面。這個過程比較繁瑣,我們參考網(wǎng)絡(luò)上現(xiàn)有的資源,并加以改進,對各個模塊仔細分析備注并進行調(diào)試,做到程序簡潔易懂,可讀性好。盡量避免因代碼不完善而導(dǎo)致的游戲運行中可能出現(xiàn)的錯誤。5.2.1自動計血量 游戲的自動計血量功能是非常有必要的,可以

15、讓玩家很直觀地看到自己所玩的剩余血量。下面是自動計血量功能的部分關(guān)鍵代碼: private class BloodBar public void draw(Graphics g) Color c = g.getColor(); g.setColor(Color.RED); g.drawRect(x, y-10, WIDTH, 10); int w = WIDTH * life/100; g.fillRect(x, y-10, w, 10); g.setColor(c); 5.2.2對坦克方向的控制 通過上下左右四個鍵,可以控制坦克向八個方向靈活的移動void localDirection()

16、if(bL && !bU && !bR && !bD) dir = Direction.L; else if(bL && bU && !bR && !bD) dir = Direction.LU; else if(bL && !bU && !bR && bD) dir = Direction.LD; else if(!bL && bU && !bR && !bD) dir = Direction.U; e

17、lse if(!bL && !bU && !bR && bD) dir = Direction.D; else if(!bL && !bU && bR && bD) dir = Direction.RD; else if(!bL && bU && bR && !bD) dir = Direction.RU; else if(!bL && !bU && bR && !bD) dir = Direction.

18、R; else dir = Direction.STOP; 六、詳細設(shè)計過程與算法實現(xiàn)6.1游戲主窗口游戲主窗口是人機交互的窗口,對玩家而言,他們只和游戲主窗口打交道,并不關(guān)心游戲內(nèi)部是如何實現(xiàn)的,所以游戲主窗口部分最重要的便是游戲數(shù)據(jù)的輸入、輸出。在程序中須創(chuàng)建一個類TankClient,繼承自Frame來創(chuàng)建一個窗口。6.2游戲數(shù)據(jù)的輸入 游戲中坦克需要能往上、下、左、右四個方向運動,故須設(shè)立4個按鍵,使其能作坦克,另須設(shè)一個鍵控制坦克開火。為方便操作,本游戲設(shè)置WSAD分別表示上下左右,小鍵盤數(shù)字鍵4,表示開火。 具體實現(xiàn)為,為窗口添加KeyListener(鍵盤監(jiān)聽器),監(jiān)聽鍵盤的按下

19、和抬起。在TankClient類中添加內(nèi)部的適配器類,由于不需要其它類訪問,將其設(shè)計為private的,以保證面向?qū)ο笤O(shè)計的封裝性。代碼如下:/* * 移動按鍵鍵盤監(jiān)聽器 */private class MoveKeyL extends KeyAdapter public void keyPressed(KeyEvent e) switch (e.getKeyCode() case KeyEvent.VK_A:myTank.keyDownToDir(Direction.L);break;case KeyEvent.VK_W:myTank.keyDownToDir(Direction.U);br

20、eak;case KeyEvent.VK_D:myTank.keyDownToDir(Direction.R);break;case KeyEvent.VK_S:myTank.keyDownToDir(Direction.D);break;public void keyReleased(KeyEvent e) switch (e.getKeyCode() case KeyEvent.VK_A:myTank.keyUpToDir(Direction.L);break;case KeyEvent.VK_W:myTank.keyUpToDir(Direction.U);break;case KeyE

21、vent.VK_D:myTank.keyUpToDir(Direction.R);break;case KeyEvent.VK_S:myTank.keyUpToDir(Direction.D);break;/* * 開火按鍵鍵盤監(jiān)聽器 */private class FireKeyL extends KeyAdapter public void keyReleased(KeyEvent e) switch (e.getKeyCode() case KeyEvent.VK_NUMPAD4:myTank.fire();new TankFireMsg().send();break;6.3游戲數(shù)據(jù)的輸

22、出 玩家需要從游戲輸出數(shù)據(jù)中獲得游戲信息,如坦克在往上行駛、坦克發(fā)了顆子彈、坦克爆炸等,這些均需要通過游戲數(shù)據(jù)的輸出來告知玩家。 由于TankClient繼承自Frame,F(xiàn)rame類中的方法paint,可以在窗口中繪制圖形,即滿足了游戲需要圖形界面的需求;另有方法repaint可以刷新窗口,以及時提供游戲信息,故須創(chuàng)建線程,不斷地刷新窗口,來獲取最新的游戲信息。代碼如下:public void paint(Graphice g) for (int i = 0; i < allGE.size(); i+) int allGEOldSize = allGE.size();GameEleme

23、nt ge = allGE.get(i);if (ge instanceof Moveable) Moveable moveable = (Moveable) ge;moveable.move();ge.draw(g);/* * 如果容器數(shù)量減少,則減少相應(yīng)的遍歷索引i */if (0 < allGEOldSize - allGE.size() i -= allGEOldSize - allGE.size();/* * 刷屏線程,負責(zé)畫面的刷新以及游戲時間的推進 */private class MyTh implements Runnable public void run() whil

24、e (true) repaint();try Thread.sleep(25); catch (InterruptedException e) e.printStackTrace(); 為使游戲主窗口效率更高、更容易被引用,且游戲主窗口只有一個,故TankClient類使用單例模式來設(shè)計:private static final TankClient tc = new TankClient();private TankClient() .public static TankClient getTc() return tc;6.4網(wǎng)絡(luò)管理 游戲需要對局域網(wǎng)對戰(zhàn)的支持,所以需要對網(wǎng)絡(luò)數(shù)據(jù)進行管理,

25、使游戲能有條不紊地運行,網(wǎng)絡(luò)管理部分主要負責(zé)輸入游戲數(shù)據(jù)后發(fā)往其它游戲客戶端,以及接收其它客戶端發(fā)來的游戲數(shù)據(jù)。需要發(fā)送的游戲數(shù)據(jù)有:坦克創(chuàng)建消息(TankCreateMsg)、坦克開火消息(TankFireMsg)等6.5客戶端游戲數(shù)據(jù)的收發(fā) 由于每個游戲消息都有共同的特性,即發(fā)送、接受,故將其抽象出一個父類Msg,所有的消息類都繼承自Msg類。public abstract class Msg public static final TankClient tc = TankClient.getTc();public static final int TANK_CREATE_MSG = 1;

26、public static final int TANK_CHANGEDIR_MSG = 2;public static final int TANK_CALIBRATION_MSG = 3;public static final int TANK_FIRE_MSG = 4;public static final int CHAT_WORD_MSG = 5;public static final int TANK_READY_MSG = 6;public static final int GAME_START_MSG = 7;public static final int GAME_OVER_

27、MSG = 8;public static final int GAME_EXIT_MSG = 9;public static final int GAME_CHANGEMASTER_MSG = 10;public abstract void send();public abstract void receive(DataInputStream dis); 在需要向每個游戲客戶端發(fā)送游戲消息時只需實例化一個相應(yīng)的對象,在調(diào)用send方法即可,接收時調(diào)用receive方法。6.6服務(wù)器端游戲數(shù)據(jù)的收發(fā) 服務(wù)器端的設(shè)計,只需將所有接收到的包轉(zhuǎn)發(fā)給所有游戲客戶端即可。接收:public class

28、UDPThread implements Runnable public void run() byte buf = new byte1024;DatagramSocket ds = null;try ds = new DatagramSocket(ServerMain.SERVER_UDP_PORT); catch (SocketException e) e.printStackTrace();while(true)DatagramPacket dp = new DatagramPacket(buf, buf.length);try ds.receive(dp);ServerMain.sen

29、dToEveryone(ds, dp); catch (IOException e) e.printStackTrace();轉(zhuǎn)發(fā):public static void sendToEveryone(DatagramSocket ds, DatagramPacket dp)for (int i = 0; i < ServerMain.clients.size(); i+) try Client c = ServerMain.clients.get(i);String IP = c.IP;int port = c.udpPort;dp.setSocketAddress(new InetSocketAddress(IP, port);ds.send(dp); catch (IOException e) e.printStackTrace();6.7封裝的游戲元

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論