版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
四川師范大學(xué)成都學(xué)院本科畢業(yè)設(shè)計(jì)[1]。關(guān)于EclipseEclipse是跨平臺(tái)的自由與集成的開發(fā)環(huán)境。起初主要用于Java語言的開發(fā),但目前也有人利用插件將它用作其他計(jì)算機(jī)語言比如C++和Python的開發(fā)工具。Eclipse的原身僅是一個(gè)框架平臺(tái),但是越來越多插件的支持讓Eclipse擁有其他功能相對(duì)穩(wěn)定的IDE軟件很難擁有靈活性。所以現(xiàn)在,許多程序員將Eclipse作為框架開發(fā)屬于自己的IDE。Eclipse最初由OTI及IBM兩家公司的IDE產(chǎn)品開發(fā)團(tuán)隊(duì)共同開發(fā)。IBM提供了最初的Eclipse代碼基礎(chǔ),包括Platform、JDT和PDE?,F(xiàn)在由IBM帶領(lǐng),圍繞關(guān)于它的項(xiàng)目已發(fā)展成了一個(gè)龐大的Eclipse聯(lián)盟,現(xiàn)目前有百余家軟件公司和大量程序開發(fā)員參與到此項(xiàng)目中,其中包括Borland、RationalSoftware、RedHat及Sybase等。Eclipse是一個(gè)開發(fā)源碼項(xiàng)目,它其實(shí)是VisualAgeforJava的替代品,其界面與以前的VisualAgeforJava差不多,但因?yàn)槠溟_源,每個(gè)人都可以免費(fèi)獲取,以便程序開發(fā)人員在此源碼的基礎(chǔ)上進(jìn)行創(chuàng)意修改開發(fā)出自己需要的產(chǎn)品,所以越來越多的開發(fā)公司和團(tuán)隊(duì)選擇它。最近包括Oracle等許多大型程序開發(fā)公司相繼研究該項(xiàng)目,經(jīng)過一段時(shí)間的開發(fā)研究,他們一致認(rèn)為Eclipse將來會(huì)形成可以進(jìn)行多種語言開發(fā)的IDE集合體,使用者只需下載各種語言的插件即可。
系統(tǒng)分析可行性分析本款游戲的設(shè)計(jì)和開發(fā)是在C++語言開發(fā)的傳統(tǒng)坦克游戲基礎(chǔ)上進(jìn)行改編,要實(shí)現(xiàn)它的相應(yīng)基本功能。分析研究傳統(tǒng)坦克游戲得知,本款游戲要實(shí)現(xiàn)的功能主要主窗口的實(shí)現(xiàn)以及相應(yīng)功能按鍵的功能實(shí)現(xiàn),畫出坦克,可以控制鍵盤讓坦克移動(dòng),可以發(fā)射子彈,坦克被子彈擊中消失并產(chǎn)生爆炸效果,防止坦克重疊運(yùn)動(dòng)等。研究課題設(shè)計(jì)要求得知,需要實(shí)現(xiàn)局域網(wǎng)聯(lián)網(wǎng)功能。在選擇開發(fā)語言的時(shí)候,需要考慮到開發(fā)目標(biāo)。然而本次設(shè)計(jì)的目的完全可以由Java語言來實(shí)現(xiàn)。因?yàn)镴ava語言具有面向?qū)ο蟮奶匦裕梢院芎玫膶⒂螒蛑懈鱾€(gè)元素進(jìn)行封裝管理,降低開發(fā)難度。游戲運(yùn)行過程不是單一過程,是多態(tài)同時(shí)進(jìn)行,然而Java具有多線程的特性,這樣恰恰滿足了開發(fā)的需要,所以選擇Java語言進(jìn)行開發(fā)是不二的選擇。在玩家進(jìn)行娛樂的時(shí)候,美觀的界面是必不可少的,為了增強(qiáng)觀賞性,可能在設(shè)計(jì)過程中需要從外部載入圖片。玩家坦克可以通過監(jiān)聽玩家鍵盤響應(yīng)事件控制。對(duì)于敵方坦克,在設(shè)計(jì)游戲過程中要考慮到不能同時(shí)出現(xiàn)太多,還能讓敵方坦克自主進(jìn)行移動(dòng)和向目標(biāo)開火。以此同時(shí),因?yàn)閿撤教箍耸亲灾麟S機(jī)移動(dòng),需要考慮到坦克與坦克之間不能相互重疊和穿越,也不能同時(shí)做同意動(dòng)作。那么利用Java語言的多線程能保證坦克有序運(yùn)行。與傳統(tǒng)單機(jī)坦克游戲不同,本款游戲需要實(shí)現(xiàn)局域網(wǎng)通信。然而通Java語言中有套接字Socket實(shí)現(xiàn)通信功能。綜合以上分析可以得出,利用Java語言的各種優(yōu)越特性能夠?qū)崿F(xiàn)本次設(shè)計(jì)的總體要求,也能實(shí)現(xiàn)相應(yīng)功能。游戲規(guī)則和系統(tǒng)功能介紹在本款游戲中,玩家坦克受玩家鍵盤向東南西北方向移動(dòng),并由玩家控制開火鍵對(duì)目標(biāo)進(jìn)行打擊,玩家雙方坦克免受對(duì)方火力攻擊。敵方坦克隨機(jī)運(yùn)動(dòng),并發(fā)射子彈。游戲中,坦克和子彈能夠擊毀普通磚墻,但不能擊穿鋼墻,坦克能夠穿越草叢不能穿越河流,子彈能夠穿越河流和草叢。游戲過程中,玩家除了保證自己免受傷害同時(shí)也要保障基地安全,玩家消滅敵方閃爍坦克可以獲得額外輔助道具,兩玩家在游戲過程中可以聊天,也可以請(qǐng)求暫停。每個(gè)關(guān)卡設(shè)置二十個(gè)敵方坦克,當(dāng)坦克完全被消滅后,進(jìn)入下一關(guān)卡,當(dāng)玩家基地被毀或雙方玩家生命耗盡,游戲結(jié)束,玩家可以選擇重玩,但需要雙方做出一致選擇。
總體設(shè)計(jì)程序運(yùn)行流程本游戲程序運(yùn)行需要玩家雙方在局域網(wǎng)內(nèi)建立通信,也可在同一電腦上建立通信,但只能操作一個(gè)玩家。具體運(yùn)行流程如圖3.1-1所示:開始開始服務(wù)器建立主機(jī)建立成功客服端連接主機(jī)運(yùn)行服務(wù)器運(yùn)行客服端連接成功游戲結(jié)束載入游戲結(jié)束重玩游戲否是否是是否圖3.1-1程序運(yùn)行流程如圖總體構(gòu)架本游戲在設(shè)計(jì)過程中,為了降低設(shè)計(jì)難度,將整個(gè)程序按模塊進(jìn)行單獨(dú)編寫,包括主類、通信類、坦克類、子彈類、墻類、輔助類、服務(wù)器類、客服端類、敵人坦克類、關(guān)卡類以及時(shí)鐘類。各個(gè)類和實(shí)現(xiàn)的功能表如表3.2-1所示:表3.2-1各個(gè)類和實(shí)現(xiàn)的功能表類實(shí)現(xiàn)功能主類實(shí)現(xiàn)游戲窗口的顯示提供公共接口通信類實(shí)現(xiàn)玩家間建立游戲使玩家間可以進(jìn)行信息交流坦克類添加坦克圖片控制坦克移動(dòng)讓坦克可以發(fā)出子彈讓玩家坦克死亡后重置使坦克不能穿墻和其他坦克使坦克可以穿草叢不能穿河子彈類畫出子彈控制子彈讓普通子彈可以擊毀普通磚墻不能擊毀鋼墻讓子彈可以穿越草叢和河流墻類添加磚墻圖片添加鋼墻圖片添加草叢圖片添加河流圖片顯示圖片輔助類添加輔助圖片敵方閃爍坦克陣亡后隨機(jī)顯示輔助圖片玩家獲得輔助圖片后得到相應(yīng)輔助功能服務(wù)器類建立主機(jī)控制游戲進(jìn)程客服端類輸入主機(jī)IP連接主機(jī)控制游戲進(jìn)程關(guān)卡類添加墻類圖片并進(jìn)行排版編輯顯示添加圖片時(shí)鐘類刷新線程對(duì)玩家事件進(jìn)行監(jiān)聽控制游戲運(yùn)行與休眠程序模塊本游戲程序由多個(gè)模塊同時(shí)運(yùn)行而實(shí)現(xiàn),也體現(xiàn)了Java語言的優(yōu)越性。通過各個(gè)模塊的相互調(diào)用,它能完成游戲顯示,通信建立,控制進(jìn)程等一系列操作,使游戲規(guī)范化,易于操作。主體模塊主體模塊首先構(gòu)建接口,因?yàn)镴ava不支持多繼承性,即一個(gè)類只能有一個(gè)父類。單繼承性使得Java簡(jiǎn)單,易于管理程序。為了克服單繼承的缺點(diǎn),Java使用了接口,一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。使用關(guān)鍵字interface來定義一個(gè)接口。接口的定義和類的定義很相似,分為接口的聲明和接口體。其次是畫出游戲面板和游戲窗口的顯示,在游戲窗口中添加了幾個(gè)功能按鍵,主要進(jìn)行聯(lián)機(jī)操作,游戲進(jìn)程操作等。游戲過程中,游戲版面顯示當(dāng)前關(guān)卡數(shù),敵人剩余數(shù),玩家生命數(shù)以及玩家獲得的分?jǐn)?shù)。通信模塊通信模塊通過Java語言中套接字Socket編寫通信類,針對(duì)游戲中客戶端和服務(wù)器的聯(lián)機(jī)功能的實(shí)現(xiàn),它的通信過程是基于TCP/IP協(xié)議中傳輸層接口socket實(shí)現(xiàn)。通過通信模塊玩家可以進(jìn)行信息傳遞以便協(xié)同作戰(zhàn),為本游戲添加樂趣。坦克模塊坦克模塊部分主要由玩家坦克和敵人坦克組成,敵方坦克隨機(jī)出現(xiàn),并隨機(jī)移動(dòng),玩家通過鍵盤操作來控制坦克的移動(dòng)和對(duì)敵方坦克進(jìn)行攻擊。玩家坦克可以對(duì)敵方閃爍坦克進(jìn)行攻擊,并得到額外輔助道具,獲得道具后玩家坦克具備相應(yīng)功能。敵方坦克由游戲窗口上方按照左中右依次出現(xiàn),敵方在移動(dòng)過程中隨機(jī)發(fā)出子彈,如遇見障礙則隨機(jī)改變運(yùn)動(dòng)方向。玩家在第一關(guān)卡時(shí),最多同時(shí)出現(xiàn)三輛敵方坦克,隨著游戲的進(jìn)行敵方坦克數(shù)量隨之增加且敵方坦克運(yùn)動(dòng)速度加快,和經(jīng)典單機(jī)坦克游戲十分相似,將玩家?guī)胪昊貞洝W訌椖K在該模塊中,初始玩家一次只能發(fā)射一顆子彈,且只對(duì)敵方坦克和普通磚墻有效,當(dāng)子彈消失后才能接著發(fā)射。子彈擊毀時(shí)出現(xiàn)爆炸效果,玩家子彈和敵方坦克發(fā)出的子彈可以撞毀,敵方坦克向四個(gè)方向隨機(jī)移動(dòng)并發(fā)射子彈。游戲工程中玩家獲得相應(yīng)輔助道具后,子彈速度加快且可以進(jìn)行連續(xù)射擊。墻模塊墻模塊是由四個(gè)類共同組成,包括磚墻、鋼墻、草叢和河流。通過這四個(gè)類的組合,編輯成游戲地圖。游戲地圖中,玩家基地周圍是由磚墻包圍,在墻模塊中,磚墻是最基本的組成,玩家或敵方坦克都能將其摧毀,鋼墻只有玩家獲得特殊輔助后才能摧毀,玩家和敵方發(fā)出的子彈都能穿越草叢和河流。關(guān)卡模塊為了增加游戲的趣味性,游戲中設(shè)計(jì)了九個(gè)循環(huán)關(guān)卡。在游戲過程中,玩家雙方各有3條生命,當(dāng)玩家雙方均把生命耗盡時(shí),通關(guān)失敗,只有雙方選擇重玩時(shí)才重新開始游戲。在關(guān)卡進(jìn)行時(shí),任一玩家可以選擇暫停游戲,在每個(gè)關(guān)卡中設(shè)置了玩家基地,當(dāng)玩家基地被毀,則通關(guān)失敗。每個(gè)關(guān)卡設(shè)計(jì)20輛敵方坦克,當(dāng)敵方坦克均被消滅,游戲自動(dòng)進(jìn)入下一關(guān)卡。游戲玩家具體游戲流程如圖4.6-1所示:載入游戲載入游戲開始失敗重玩結(jié)束進(jìn)入下一關(guān)是否否是圖4.6-1玩家游戲流程圖程序?qū)崿F(xiàn)游戲窗口界面設(shè)計(jì)游戲窗口使用Frame類,F(xiàn)rame類是Container類的間接子類。當(dāng)需要一個(gè)窗口時(shí),可使用Frame或其子類創(chuàng)建一個(gè)對(duì)象。窗口也是一個(gè)容器,可以向窗口添加組件。該游戲界面包括文本輸入框和按鈕,因?yàn)榉?wù)器端和客戶端窗口相似,以下提供客服端游戲窗口設(shè)計(jì)代碼:publicclassServerViewextendsJFrame{ publicdrawingPanelmainPanel; publicJButtoncreateServer,exit,pauseAndResume,help,hiddenButton; publicJTextFieldmessageField; publicJButtonsendMessage; publicServerControlercontroler; publicServerModelmodel; publicServerView(){ super("基于Java的坦克網(wǎng)戰(zhàn)游戲"); try{ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); }catch(Exceptione){} getContentPane().setLayout(null); mainPanel=newdrawingPanel(); mainPanel.setLayout(null); mainPanel.setBounds(0,22,679,605); mainPanel.setBackground(newColor(128,64,128)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(150,130,640,590); setVisible(true); setResizable(false); model=newServerModel(this); controler=newServerControler(this,model); /* *添加按鍵和文本框并實(shí)現(xiàn)相應(yīng)功能 */messageField=newJTextField(); messageField.setBounds(0,519,560,22); messageField.setEnabled(false); sendMessage=newJButton("發(fā)送"); sendMessage.setBounds(570,518,62,24); sendMessage.setFocusable(false); mainPanel.add(messageField); mainPanel.add(sendMessage); getContentPane().add(mainPanel); mainPanel.setFocusable(true); createServer=newJButton("建立主機(jī)"); createServer.setBounds(0,0,120,22); getContentPane().add(createServer); createServer.setFocusable(false); pauseAndResume=newJButton("暫停/繼續(xù)"); pauseAndResume.setBounds(120,0,120,22); getContentPane().add(pauseAndResume); pauseAndResume.setFocusable(false); help=newJButton("幫助"); help.setBounds(240,0,120,22); getContentPane().add(help); help.setFocusable(false); exit=newJButton("退出"); exit.setBounds(360,0,120,22); getContentPane().add(exit); exit.setFocusable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(150,130,640,590); setVisible(true); setResizable(false); model=newServerModel(this); controler=newServerControler(this,model); } publicstaticvoidmain(String[]args){ newServerView(); }}游戲運(yùn)行界面使用JPanel創(chuàng)建一個(gè)面板,再向這個(gè)面板添加組件。主要分為游戲界面和玩家信息界面,如圖5.1-1所示:游戲按鍵和文本框區(qū)域游戲按鍵和文本框區(qū)域玩家得分玩家生命游戲界面游戲進(jìn)度聊天信息編寫區(qū)域圖5.1-1游戲運(yùn)行界面圖游戲界面顯示游戲?qū)崟r(shí)畫面,玩家信息界面主要顯示玩家生命值,玩家得分情況,關(guān)卡進(jìn)讀,和剩余敵方坦克數(shù)量。部分代碼如下:publicclassdrawingPanelextendsJPanel{ publicImageoffScreenImage; publicString[]messageQueue; publicActor[]drawingList; publicbooleangameStarted; publicintgreen,red,blue; publicintP1Life,P2Life,P1Score,P2Score,EnemyLeft,LevelIndex; publicImageP1Image,P2Image;游戲控制這款游戲設(shè)計(jì)過程中,主要使用鍵盤進(jìn)行操作,為了讓玩家對(duì)坦克進(jìn)行有效操作,游戲程序窗口添加KeyListener(鍵盤監(jiān)聽器)。事件源描述事件對(duì)象中事件的性質(zhì)。玩家的每個(gè)操作將產(chǎn)生一個(gè)事件源對(duì)應(yīng)一個(gè)或多個(gè)事件監(jiān)聽器,當(dāng)發(fā)生事件就將調(diào)用相關(guān)事件監(jiān)聽器。此后事件源便將該事件對(duì)象發(fā)送給相應(yīng)監(jiān)聽器接口類的方法,監(jiān)聽器接口則會(huì)接收到相應(yīng)的事件信息。此時(shí)監(jiān)聽器開始分析事件對(duì)象并找出事件內(nèi)容,然后作出相應(yīng)反應(yīng)。在java.awt.event包中定義的接口可以用來創(chuàng)建監(jiān)聽器。只有在事件發(fā)生時(shí),監(jiān)視器定義的方法才會(huì)被事件源所調(diào)用。有興趣接收事件的任何監(jiān)聽器類都必須實(shí)現(xiàn)監(jiān)聽器接口。代碼如下:/* *移動(dòng)按鍵鍵盤監(jiān)聽器 */temp.addKeyListener(newKeyAdapter(){ publicvoidkeyPressed(KeyEvente){ if(model.P1!=null){ if(e.getKeyCode()==KeyEvent.VK_UP){ model.P1.moveUp=true; model.P1.moveDown=false; model.P1.moveLeft=false; model.P1.moveRight=false; } if(e.getKeyCode()==KeyEvent.VK_DOWN){ model.P1.moveDown=true; model.P1.moveUp=false; model.P1.moveLeft=false; model.P1.moveRight=false; } if(e.getKeyCode()==KeyEvent.VK_LEFT){ model.P1.moveLeft=true; model.P1.moveUp=false; model.P1.moveDown=false; model.P1.moveRight=false; } if(e.getKeyCode()==KeyEvent.VK_RIGHT){ model.P1.moveLeft=false; model.P1.moveUp=false; model.P1.moveDown=false; model.P1.moveRight=true; }游戲網(wǎng)絡(luò)通信在JAVA語言中,利用TCP通信,通常有一個(gè)明確的服務(wù)器端(Server端),一個(gè)或多個(gè)客戶端(Client端)。分別使用ServerSocket類建立一個(gè)服務(wù)器端標(biāo)識(shí),負(fù)責(zé)監(jiān)聽客戶端的連接請(qǐng)求。使用Socket類建立服務(wù)器端與客戶端一對(duì)通信實(shí)體標(biāo)識(shí)。套接字通常由三個(gè)部分構(gòu)成:在計(jì)算機(jī)進(jìn)程之間利用TCP/IP進(jìn)行通信時(shí),需要通過IP地址來定位通信雙方的計(jì)算機(jī),通過TCP/UDP來明確通信軟件所采用的通信協(xié)議,通過端口號(hào)來確定通信軟件進(jìn)程。所以,通信協(xié)議、網(wǎng)絡(luò)地址和端口號(hào)三個(gè)部分組合在一起可確定通信實(shí)體,表達(dá)方法為: SOCKET=(TCP/UDP,IPAddress,Port)本游戲程序通過套接字實(shí)現(xiàn)了服務(wù)器端主機(jī)建立后響應(yīng)客戶端的連接請(qǐng)求,在游戲進(jìn)行時(shí),獲得對(duì)方玩家實(shí)時(shí)畫面,任意一方暫?;蚶^續(xù)游戲,以及聯(lián)機(jī)成功后玩家雙方的信息傳遞等功能,具體代碼如下:/**服務(wù)器建立主機(jī)*/ publicvoidcreateServer(){ addMessage("正在建立主機(jī)(端口4321)"); try{ serverSocket=newServerSocket(4321); serverCreated=true;}catch(Exceptione){ addMessage("無法建立主機(jī),請(qǐng)確認(rèn)端口4321沒有被別的程序使用"); System.out.println(e); t.stop(); return;}/**客戶端連接主機(jī)*/ publicvoidconnectServer(){ addMessage("正在連接主機(jī)"); try{ serverIP=view.IPfield.getText(); InetAddressaddr=InetAddress.getByName(serverIP); clientSocket=newSocket(addr,4321); serverConnected=true; addMessage("已成功連接到主機(jī),開始載入游戲");以上就是游戲中玩家建立主機(jī)和連接主機(jī)的實(shí)現(xiàn)過程。在本款游戲中,玩家建立通信后還可以進(jìn)行信息共享和消息傳遞功能。代碼如下:if(perInstruction.substring(0,1).equals("m")){ gameModel.addMessage("主機(jī)端玩家說:"+perInstruction.substring(1,perInstruction.length())); }以上是玩家游戲過程中聊天通信實(shí)現(xiàn)的部分代碼。if(perInstruction.substring(0,1).equals("x")){ inttemp=Integer.parseInt(perInstruction.substring(1,2)); if(temp==0){ if(gameModel.gamePaused){ gameModel.addMessage("主機(jī)端玩家取消了暫停"); gameModel.gamePaused=false; } }else{ if(!gameModel.gamePaused){ gameModel.addMessage("主機(jī)端玩家暫停了游戲"); gameModel.gamePaused=true; }以上是玩家在游戲過程中對(duì)游戲進(jìn)程的信息共享功能部分代碼。游戲元素本款游戲在設(shè)計(jì)時(shí)避免了圖形繪制的麻煩,更多的采用了直接引入外部圖片來作為游戲中的元素,如坦克和游戲墻。這大大的減少了游戲設(shè)計(jì)時(shí)的繁瑣更多的節(jié)省時(shí)間。坦克在游戲設(shè)計(jì)過程中,游戲中坦克采用載入已經(jīng)排好順序的外部圖片的方式來實(shí)現(xiàn),如圖5.4.1-1所示:圖5.4.1-1在實(shí)現(xiàn)坦克向四個(gè)方向移動(dòng)時(shí),采用的是朝向不同的四張圖片。在游戲過程中,玩家坦克如果獲得輔助道具,坦克將具備輔助功能,如穿墻和連發(fā)子彈等。游戲開始時(shí),玩家坦克有免疫攻擊時(shí)間,玩家坦克朝上,只具備初級(jí)攻擊力,通過以下代碼實(shí)現(xiàn):direction=UP; status=1; health=1; numberOfBullet=1; InvulnerableTime=150; if(type.equals("1P")){ xPos=198; yPos=498; border=newRectangle(xPos-size,yPos-size,25,25); xVPos=xPos;yVPos=yPos; for(inti=0;i<4;i++) textures[i]=gameModel.textures[54+i]; }else{ xPos=323; yPos=498; border=newRectangle(xPos-size,yPos-size,25,25); xVPos=xPos;yVPos=yPos; for(inti=0;i<4;i++) textures[i]=gameModel.textures[72+i]; } }在游戲過程中,玩家獲得相應(yīng)輔助后會(huì)有戰(zhàn)力提升,根據(jù)坦克攻擊力大小,載入不同的坦克圖片,提升畫面效果,部分代碼如下:inttextureIndex=0; if(type.equals("1P")){ if(status==1) textureIndex=54+direction; elseif(status==2) textureIndex=58+direction; elseif(status==3) textureIndex=62+direction; else textureIndex=66+direction; }else{ if(status==1) textureIndex=72+direction; elseif(status==2) textureIndex=76+direction; elseif(status==3) textureIndex=80+direction; else textureIndex=84+direction; }游戲中敵方坦克有不同類型,在游戲過程中,敵方坦克將由左中右三個(gè)方向同時(shí)出現(xiàn),在移動(dòng)過程中會(huì)發(fā)射子彈,當(dāng)遇見阻擋時(shí)會(huì)隨機(jī)改變運(yùn)動(dòng)方向,其部分代碼如下:interval=(int)(Math.random()*200); direction=(int)(Math.random()*4); numberOfBullet=1; xVPos=xPos; yVPos=yPos; border=newRectangle(xPos-size,yPos-size,25,25);以上是敵方坦克的共同屬性,不同坦克具備不同特性,如運(yùn)動(dòng)速度、抗擊子彈能力、消滅后會(huì)產(chǎn)生輔助道具等,代碼如下:if(type==1){ firePosibility=0.95; speed=2; textures=newImage[8]; for(inti=0;i<8;i++) textures[i]=gameModel.textures[38+i]; }elseif(type==2){ firePosibility=0.95; speed=4; textures=newImage[8]; for(inti=0;i<8;i++) textures[i]=gameModel.textures[2+i]; }elseif(type==3){ firePosibility=0.9; speed=2; textures=newImage[8]; for(inti=0;i<8;i++) textures[i]=gameModel.textures[10+i]; }else{ firePosibility=0.95; health=3; speed=2; textures=newImage[20]; for(inti=0;i<20;i++) textures[i]=gameModel.textures[18+i]; }游戲墻游戲墻和坦克設(shè)計(jì)如出一轍,主要是通過引入外部編序圖片實(shí)現(xiàn)。游戲墻由四個(gè)類實(shí)現(xiàn),分別是wall.java、steelwall.java、river.java和grass.java。其中前三者是直接載入圖片,grass.java則是采用Java語言的繪圖功能實(shí)現(xiàn)。游戲中每個(gè)關(guān)卡設(shè)置由游戲墻模塊編輯而成,不同的墻具有不同的性質(zhì),如圖5.4.2-1所示:圖5.4.2游戲中子彈和爆炸效果在本款游戲設(shè)計(jì)過程中,游戲中子彈和爆炸效果均是采用Java語言中publicvoiddraw(Graphicsg)畫出。子彈在發(fā)射過后,實(shí)現(xiàn)判斷是否擊毀,擊毀則產(chǎn)生爆炸效果。部分代碼如下:/**畫出子彈*/ publicvoiddraw(Graphicsg){ g.setColor(Color.lightGray); if(direction==0||direction==1) g.fillRect(border.x+1,border.y+1,3,9); if(direction==2||direction==3) g.fillRect(border.x+1,border.y+1,9,3); }/**畫出爆炸效果*/ publicvoiddraw(Graphicsg){ g.setColor(Color.red); g.fillOval(xPos-outer,yPos-outer,2*outer,2*outer); g.setColor(Color.orange); g.fillOval(xPos-middle,yPos-middle,2*middle,2*middle); g.setColor(Color.yellow); g.fillOval(xPos-inner,yPos-inner,2*inner,2*inner); }/**檢測(cè)子彈是否與邊界發(fā)生碰撞*/ if(!ersects(map)){ gameModel.removeActor(this); notifiyOwner(); makeBomb(); writeToOutputLine(); return; }游戲整體實(shí)現(xiàn)效果本游戲設(shè)計(jì)的實(shí)現(xiàn)由32個(gè)類組成,一共編寫4000余行代碼,外部引用89張圖片。為了降低游戲設(shè)計(jì)、實(shí)現(xiàn)難度,把游戲元素:坦克、子彈、墻等封裝成單獨(dú)的類。在游戲設(shè)計(jì)時(shí)考慮到新玩家不熟悉操作規(guī)則,特此在游戲窗口添加幫助按鈕,玩家單擊幫助按鈕則對(duì)游戲規(guī)則進(jìn)行顯示說明。游戲窗口設(shè)置暫停/停止按鈕來控制程序進(jìn)程。運(yùn)行程序時(shí),玩家輸入對(duì)方玩家IP地址即可實(shí)現(xiàn)聯(lián)機(jī),聯(lián)機(jī)成功后程序自動(dòng)導(dǎo)入游戲,玩家通過鍵盤方向鍵控制坦克移動(dòng),S鍵實(shí)現(xiàn)開火。程序運(yùn)行時(shí),玩家可以
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版醫(yī)藥企業(yè)藥品市場(chǎng)營銷推廣合同范本3篇
- 醫(yī)院通信光纜敷設(shè)合同
- 智能教育清運(yùn)施工合同
- 沿海公路擴(kuò)建項(xiàng)目合同
- 包裝加工工程安裝施工承包合同
- 電力工程委托策劃合同模板
- 家具制造招投標(biāo)注意事項(xiàng)
- 2025版能源行業(yè)勞動(dòng)合同安全生產(chǎn)與應(yīng)急管理合同3篇
- 2024年物流園區(qū)停車場(chǎng)運(yùn)營管理承包合同范本3篇
- 2024年牙科醫(yī)療器械公司與制造商關(guān)于義齒加工的合同
- 藥學(xué)專業(yè)論文3000字藥學(xué)畢業(yè)論文(6篇)
- 光伏發(fā)電工程施工技術(shù)方案
- 一年級(jí)看圖寫話集錦省公開課獲獎(jiǎng)?wù)n件說課比賽一等獎(jiǎng)?wù)n件
- 化療后胃腸道反應(yīng)護(hù)理
- 天津市武清區(qū)2024-2025學(xué)年九年級(jí)上學(xué)期11月期中物理試題(無答案)
- 山西省2024-2025學(xué)年九年級(jí)上學(xué)期11月期中考試化學(xué)試題
- 商業(yè)街招商運(yùn)營年終總結(jié)
- 2023屆安徽省馬鞍山市高三第一次教學(xué)質(zhì)量監(jiān)測(cè)(一模)理綜生物試題(原卷版)
- 充電樁租賃協(xié)議模板
- 家庭年度盤點(diǎn)模板
- 四川新農(nóng)村建設(shè)農(nóng)房設(shè)計(jì)方案圖集川東北部分
評(píng)論
0/150
提交評(píng)論