




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上基于java坦克大戰(zhàn)課程設(shè)計(jì)報(bào)告摘 要隨著計(jì)算機(jī)的普及以及對(duì)電子游戲的認(rèn)識(shí),電子游戲已被越來(lái)越多的人選作放松、娛樂(lè)的休閑方式;電子游戲既不需要專門購(gòu)買游戲器材,也不需要寬闊的游戲場(chǎng)地,只需要一臺(tái)能獨(dú)立完成任務(wù)的計(jì)算機(jī)即可,它可以是人們工作、學(xué)習(xí)時(shí)用的計(jì)算機(jī),并不需要另行配置,這比起傳統(tǒng)休閑游戲即省錢又省事。局域網(wǎng)游戲更是可以將現(xiàn)實(shí)空間中零散的計(jì)算機(jī),組織起來(lái),使其在邏輯空間中集中起來(lái),使游戲的組織、開展變得輕松。如此輕松而又安逸的休閑方式,使得越來(lái)越多的人嘗試,甚至已經(jīng)將電子游戲作為主要休閑方式,既然有如此多的人使用,那其中必然存在巨大的商機(jī),即使人們不愿意為一個(gè)小小
2、的休閑游戲花費(fèi)金錢,但在游戲中添加廣告、游戲相關(guān)服務(wù)也包藏了巨大的財(cái)富;當(dāng)然電子游戲的制作如今已是空前的火爆,大大小小的游戲公司橫空出世,都想在電子游戲制作這個(gè)行業(yè)里占據(jù)一席之地,而一款成功的電子游戲需要精心的策劃、分析、設(shè)計(jì),只有這樣才能獲得游戲中包藏的財(cái)富,以及做出一款真正能夠讓玩家?jiàn)蕵?lè)、放松的游戲,而不是騙取玩家錢財(cái)?shù)墓ぞ?。關(guān)鍵字: 局域網(wǎng);電子游戲;坦克大戰(zhàn);目 錄專心-專注-專業(yè)1、 系統(tǒng)分析可行性分析技術(shù)可行性軟件使用swing、GUI、Socket、面向?qū)ο笤O(shè)計(jì)等技術(shù)實(shí)現(xiàn),這些技術(shù)均已是非常成熟的技術(shù),之前已有相當(dāng)多使用這些技術(shù)的成功案例,故現(xiàn)使用這些技術(shù)是可行的。經(jīng)濟(jì)可行性本軟
3、件為免費(fèi)軟件,將免費(fèi)提供軟件的下載、運(yùn)行和維護(hù)服務(wù),軟件暫無(wú)收入,待公布之后隨著使用者越來(lái)越多,將添加相應(yīng)的廣告、服務(wù),從而增加收入,若使用者寥寥無(wú)幾,將再次分析是否重新策劃軟件或者放棄開發(fā),以減少損失。需求分析通過(guò)反復(fù)研究以及市場(chǎng)調(diào)查,得知游戲須具有以下功能:q 需要有圖形游戲界面,讓用戶能看到游戲給出的反饋q 有人機(jī)交互功能,使用戶能操作指定的游戲元素q 不同隊(duì)伍的坦克,須顯示不同外觀,已分辨敵我q 坦克能夠開火,攻擊敵方,但不能攻擊隊(duì)友q 需要有不可被子彈穿透的墻,且墻有可摧毀和不可摧毀兩種q 坦克有生命值,并非被擊中一次就會(huì)爆炸q 坦克爆炸后將產(chǎn)生道具,拾到道具的坦克可加滿生命值q 游
4、戲須提供網(wǎng)絡(luò)支持,即局域網(wǎng)聯(lián)網(wǎng)對(duì)戰(zhàn)q 玩家在游戲中可以發(fā)言,即群聊功能q 須在玩家之間設(shè)立房主,掌管游戲何時(shí)開始q 游戲結(jié)束時(shí)須判斷哪一隊(duì)勝利q 游戲結(jié)束后可重新開始q 游戲的操作、進(jìn)度等須提供相應(yīng)說(shuō)明,以告知玩家2、 概要設(shè)計(jì)工作流程圖程序開始連接服務(wù)器連接成功?YN新線程刷屏(間接調(diào)用paint)延遲25ms初始化游戲元素根據(jù)游戲元素的屬性,對(duì)其經(jīng)行操作和繪出其圖形Paint方法戰(zhàn)斗結(jié)束?Y鍵盤監(jiān)聽(tīng)器判斷按下的是那個(gè)鍵改變相應(yīng)游戲元素的屬性項(xiàng)目規(guī)劃本游戲是一個(gè)典型的局域網(wǎng)對(duì)戰(zhàn)游戲,應(yīng)具有如下結(jié)構(gòu):q 游戲主窗口游戲的一切效果、進(jìn)度、消息等都將由游戲主窗口展示q 網(wǎng)絡(luò)管理負(fù)責(zé)發(fā)送、接收網(wǎng)絡(luò)數(shù)
5、據(jù),以及如何處理這些數(shù)據(jù)q 封裝的游戲元素游戲元素包括:坦克、子彈、爆炸效果、墻、道具等游戲必須的元素開發(fā)及運(yùn)行環(huán)境開發(fā)時(shí)硬件環(huán)境q CPU:Inter P7350q 顯卡:NVIDIA GeForce 9600M GSq 內(nèi)存:威剛2G/DDR2-667q 顯示器:三星液晶15.4寸/分辨率:1280X800開發(fā)時(shí)軟件環(huán)境q 操作系統(tǒng):Windows7q JDK:1.5.0q IDE:Eclipse3.4.0運(yùn)行時(shí)硬件環(huán)境q CPU:Inter E5200q 顯卡:NVIDIA GeForce 7300 GSq 內(nèi)存:金士頓2G/DDR2-667運(yùn)行時(shí)軟件環(huán)境q 操作系統(tǒng):Windows X
6、pq JRE:1.6.0q 顯示器:三星液晶19寸/分辨率:1440X9003、 詳細(xì)設(shè)計(jì)與算法實(shí)現(xiàn)游戲主窗口游戲主窗口是人機(jī)交互的窗口,對(duì)玩家而言,他們只和游戲主窗口打交道,并不關(guān)心游戲內(nèi)部是如何實(shí)現(xiàn)的,所以游戲主窗口部分最重要的便是游戲數(shù)據(jù)的輸入、輸出。在程序中須創(chuàng)建一個(gè)類TankClient,繼承自Frame來(lái)創(chuàng)建一個(gè)窗口。游戲數(shù)據(jù)的輸入游戲中坦克需要能往上、下、左、右四個(gè)方向運(yùn)動(dòng),故須設(shè)立4個(gè)按鍵,使其能操作坦克,另須設(shè)一個(gè)鍵控制坦克開火。為方便操作,本游戲設(shè)置WSAD分別表示上下左右,小鍵盤數(shù)字鍵4,表示開火。具體實(shí)現(xiàn)為,為窗口添加KeyListener(鍵盤監(jiān)聽(tīng)器),監(jiān)聽(tīng)鍵盤的按下
7、和抬起。在TankClient類中添加內(nèi)部的適配器類,由于不需要其它類訪問(wèn),將其設(shè)計(jì)為private的,以保證面向?qū)ο笤O(shè)計(jì)的封裝性。代碼如下:/* * 移動(dòng)按鍵鍵盤監(jiān)聽(tīng)器 */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
8、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
9、vent.VK_D:myTank.keyUpToDir(Direction.R);break;case KeyEvent.VK_S:myTank.keyUpToDir(Direction.D);break;/* * 開火按鍵鍵盤監(jiān)聽(tīng)器 */private class FireKeyL extends KeyAdapter public void keyReleased(KeyEvent e) switch (e.getKeyCode() case KeyEvent.VK_NUMPAD4:myTank.fire();new TankFireMsg().send();break;游戲數(shù)據(jù)的輸出玩家
10、需要從游戲輸出數(shù)據(jù)中獲得游戲信息,如坦克在往上行駛、坦克發(fā)了顆子彈、坦克爆炸等,這些均需要通過(guò)游戲數(shù)據(jù)的輸出來(lái)告知玩家。由于TankClient繼承自Frame,F(xiàn)rame類中的方法paint,可以在窗口中繪制圖形,即滿足了游戲需要圖形界面的需求;另有方法repaint可以刷新窗口,以及時(shí)提供游戲信息,故須創(chuàng)建線程,不斷地刷新窗口,來(lái)獲取最新的游戲信息。代碼如下:public void paint(Graphice g) for (int i = 0; i < allGE.size(); i+) int allGEOldSize = allGE.size();GameElement ge
11、 = 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();/* * 刷屏線程,負(fù)責(zé)畫面的刷新以及游戲時(shí)間的推進(jìn) */private class MyTh implements Runnable public void run() while (tr
12、ue) repaint();try Thread.sleep(25); catch (InterruptedException e) e.printStackTrace();為使游戲主窗口效率更高、更容易被引用,且游戲主窗口只有一個(gè),故TankClient類使用單例模式來(lái)設(shè)計(jì):private static final TankClient tc = new TankClient();private TankClient() .public static TankClient getTc() return tc;網(wǎng)絡(luò)管理游戲需要對(duì)局域網(wǎng)對(duì)戰(zhàn)的支持,所以需要對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行管理,使游戲能有條不紊地運(yùn)
13、行,網(wǎng)絡(luò)管理部分主要負(fù)責(zé)輸入游戲數(shù)據(jù)后發(fā)往其它游戲客戶端,以及接收其它客戶端發(fā)來(lái)的游戲數(shù)據(jù)。需要發(fā)送的游戲數(shù)據(jù)有:坦克創(chuàng)建消息(TankCreateMsg)、坦克開火消息(TankFireMsg)等客戶端游戲數(shù)據(jù)的收發(fā)由于每個(gè)游戲消息都有共同的特性,即發(fā)送、接受,故將其抽象出一個(gè)父類Msg,所有的消息類都繼承自Msg類。public abstract class Msg public static final TankClient tc = TankClient.getTc();public static final int TANK_CREATE_MSG = 1;public static
14、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_MSG = 8;public
15、 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);在需要向每個(gè)游戲客戶端發(fā)送游戲消息時(shí)只需實(shí)例化一個(gè)相應(yīng)的對(duì)象,在調(diào)用send方法即可,接收時(shí)調(diào)用receive方法。服務(wù)器端游戲數(shù)據(jù)的收發(fā)服務(wù)器端的設(shè)計(jì),只需將所有接收到的包轉(zhuǎn)發(fā)給所有游戲客戶端即可。接收:public class UDPThread implement
16、s 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.sendToEveryone(ds, dp)
17、; 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, por
18、t);ds.send(dp); catch (IOException e) e.printStackTrace();封裝的游戲元素將游戲元素(坦克、子彈、墻等)封裝成一個(gè)一個(gè)的類,將大大地降低游戲設(shè)計(jì)、實(shí)現(xiàn)難度,且符合面向?qū)ο蟮脑O(shè)計(jì)方法。由于這些游戲元素都有一些相同的屬性、方法,故將其抽象為父類GameElement。public abstract class GameElement /* * 持有游戲主窗口的引用 */public static final TankClient tc = TankClient.getTc();/* * 元素的坐標(biāo) */public Rectangle rec
19、t;/* * 元素的類型(隊(duì)伍) */public GameElementKind kind = GameElementKind.DEMON;/* * 由游戲主窗口自動(dòng)調(diào)用,將決定該元素的在游戲中的表現(xiàn)形式 */public abstract void draw(Graphics g);程序中共有如下游戲元素:q Blast:爆炸效果q Bullet:子彈q ChatWord:群聊的內(nèi)容q Tank:坦克q Wall:墻4、 測(cè)試測(cè)試環(huán)境測(cè)試時(shí)硬件環(huán)境q CPU:Inter E5200q 顯卡:NVIDIA GeForce 7300 GSq 內(nèi)存:金士頓2G/DDR2-667測(cè)試時(shí)軟件環(huán)境q 操作系統(tǒng):Windows Xpq JRE:1.6.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度終止雙方在線教育平臺(tái)合作協(xié)議
- 二零二五年度海底油氣管道水平定向鉆施工合作協(xié)議
- 二零二五年度全球市場(chǎng)傭金分成合作協(xié)議
- 2025年合作貨運(yùn)從業(yè)資格證科目一考試答案
- 公司領(lǐng)導(dǎo)發(fā)言稿范文
- 銀行職員續(xù)訂勞動(dòng)合同
- 2024年雙方離婚協(xié)議
- 申請(qǐng)采購(gòu)辦公用品的通知
- 基于物聯(lián)網(wǎng)的智能家庭環(huán)境監(jiān)測(cè)系統(tǒng)操作指南
- 2025年1月福建省普通高中學(xué)業(yè)水平合格性考試地理試題仿真模擬卷02(解析版)
- DeepSeek人工智能語(yǔ)言模型探索AI世界科普課件
- 《青春期心理健康指導(dǎo)》課件
- 第18講 等腰三角形 課件中考數(shù)學(xué)復(fù)習(xí)
- 社會(huì)階層與教育選擇行為分析-深度研究
- 2025年內(nèi)蒙古呼和浩特市屬國(guó)企業(yè)紀(jì)檢監(jiān)察機(jī)構(gòu)招聘工作人員80人高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 社會(huì)工作行政(第三版)課件匯 時(shí)立榮 第6-11章 項(xiàng)目管理- 社會(huì)工作行政的挑戰(zhàn)、變革與數(shù)字化發(fā)展
- 全過(guò)程工程咨詢文件管理標(biāo)準(zhǔn)
- 模特?cái)z影及肖像使用合同協(xié)議范本
- 2025年湘潭醫(yī)衛(wèi)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 《預(yù)制高強(qiáng)混凝土風(fēng)電塔筒生產(chǎn)技術(shù)規(guī)程》文本附編制說(shuō)明
- 2025福建福州地鐵集團(tuán)限公司運(yùn)營(yíng)分公司校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
評(píng)論
0/150
提交評(píng)論