freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于java的坦克大戰(zhàn)軟件程序設(shè)計(jì)-文庫吧資料

2024-12-12 09:51本頁面
  

【正文】 遞給 EnemySprite 和 UserSprite,BattleCanvas 中創(chuàng)建坦克僅調(diào)用 createEnemy()和 createUser()實(shí)現(xiàn)。本程序設(shè)置為 6。為此,地圖必須首先載入。這是很有必要的。 地圖文件可用十六進(jìn)制的文本編輯器生成,如本程序使用的 Ultraedit。每個(gè)整數(shù)代表一種障礙物。外部文件分別命名為 level*.png,利用 MIDP 中唯一獲取外部文件為程序內(nèi)資源的getResourceAsStream()函數(shù)將地圖文件讀入程序。地圖實(shí)際即為 TiledLayer 的一個(gè)對象,可調(diào)用 setCell 設(shè)置其具體的圖象格內(nèi)容。 還需保存的變量有,游戲開始時(shí)間、結(jié)束時(shí)間(用于統(tǒng)計(jì)分?jǐn)?shù))、敵人的總數(shù)、屏幕上敵人的數(shù)量、下一個(gè)敵人需要出現(xiàn)的位置(總共允許在三個(gè)不同的位置出現(xiàn),分別位于屏幕的左、中、右方)、游戲是否已成功結(jié)束或是否已死亡 。因此,有必要在其中創(chuàng)立一個(gè)LayerManager 的對象。這兩個(gè)類均在 BattleCanvas 中建立了對象,以便進(jìn)行統(tǒng)一調(diào)度。 程序中建立了另外的兩個(gè)類,分別表述了敵人坦克和玩家坦克的功能。 本程序設(shè)置為 20毫秒。 它運(yùn)行在獨(dú)立的線程中,以恒定的頻率刷新畫面。 其中,當(dāng)選擇第一項(xiàng)時(shí)將載入正式游戲畫面 BattleCanvas 類,第二項(xiàng)將顯示幫助信息 , 第三項(xiàng)則是重新顯示 與作品和作者相關(guān)的 logo 畫面。 startChoice 繼承了 List 類,用于顯示列表選項(xiàng),使用其 append()函數(shù)可將選項(xiàng)加入到列表中。 在設(shè)置好mandlistener 后,需要調(diào)用 setCommandListener()以將按鈕事件激活 。 繼承了 mandListener 的類必須擁有 mandAction(),以決定對按鍵采取什么樣的行為。 效果如圖 32所示。但是當(dāng)顯示的畫面元素超過一屏大小時(shí),將自動(dòng) 轉(zhuǎn)換為永久狀態(tài)。Alert 對象用于顯示提示、警告等告之用戶信息的臨時(shí)閃現(xiàn)的屏幕,它可作為setCurrent的參數(shù),提前顯示在最終需要顯示的屏幕前。在 startApp()函數(shù)中 , 隨即調(diào)用了 Displable 的 setCurrent()函數(shù)將當(dāng)前屏幕設(shè)置為 startChoice。運(yùn)行畫面如圖所示。該類中擁有可以管理程序的創(chuàng)建、開始、暫停、 結(jié)束的函數(shù)。 第 三 章 程序 分析和具體實(shí)現(xiàn) 游戲進(jìn)入前的面板設(shè)計(jì)分析 每個(gè) MIDlet 程序都必須有一個(gè)主類,該類必須繼承自 MIDlet。 Thread t=new Thread(msp)。 (jm1)。 (jmi3)。 (jmil)。 //對 jmil 相應(yīng) (this)。E39。 (exit)。 (saveExit)。 (continueGame)。 jmi4 =new JMenuItem(繼續(xù)上局游戲 (S))。 19 jmi2 =new JMenuItem(退出游戲 (E))。)。 //設(shè)置快捷方式 (39。具體程序如下: //創(chuàng)建菜單及菜單選項(xiàng) jmb=new JMenuBar()。 //退出 (0)。 ()。 (=+())。 (0)。 玩家成績的記錄 任何一個(gè)游戲都會(huì)對玩家的玩耍記錄有所保存,坦克大戰(zhàn)也不例外 ,我們既需要記錄下玩家消滅的坦克數(shù)量 ,還要對游戲的進(jìn)程進(jìn)行存檔,假如玩家突然有事情需要去處理但又不想放棄該局游戲,那就必須有存檔的功能。 最后 子彈對不同障礙物將有不同的反映。敵人之間顯然,上 面 已經(jīng)提過,不需要檢測,但敵人與玩家之間應(yīng)當(dāng)可以互相消除子彈,以便在狹窄的路口中仍有存活 18 的機(jī)會(huì)。 如果來自玩家,則每一步需掃描所有的敵方坦克,檢查是否發(fā)生碰撞, 以便使擊中的坦克消 失。 在其出現(xiàn)在屏幕上的運(yùn)行周期中,每一步都需要循環(huán)檢測以下條件: 是否與某坦克發(fā)生了碰撞,即擊中了這輛坦克。 } return b。+20=et.y+20) { return true。+20=amp。=+30amp。 } if(=amp。amp。amp。amp。+20=et.y+30) { return true。+20=amp。=+20amp。 } //下一點(diǎn) if(=amp。amp。amp。amp。i++) { //取出第一個(gè)坦克 EnemyTank et=(i)。 case 3: //向左 //取出所有的敵人坦克 for(int i=0。+30=+20) { return true。+30=amp。+20=+30amp。 } 16 if(+20=amp。amp。amp。amp。+30=+30) { return true。+30=amp。+20=+20amp。 } //我的右點(diǎn) if(+20=amp。amp。amp。amp。i++) { //取出第一個(gè)坦克 EnemyTank et=(i)。 case 2: //坦克向下 //取出所有的敵人坦克 for(int i=0。+20=+20) { return true。+20=amp。+30=+30amp。 } if(+30=amp。amp。amp。amp。+20=+30) { return true。+20=amp。+30=+20amp。 } //下點(diǎn) if(+30=amp。amp。amp。amp。i++) { //取出第一個(gè)坦克 EnemyTank et=(i)。 case 1: //坦克向右 //取出所有的敵人坦克 for(int i=0。=et.y+20) { return true。=amp。+20=+30amp。 } if(+20=amp。amp。amp。amp。=et.y+30) { return true。=amp。+20=+20amp。 } if(+20=amp。amp。amp。amp。i++) { //取出第一個(gè)坦克 EnemyTank et=(i)。 switch() { case 0: //我的坦克向上 //取出所有的敵人坦克 for(int i=0。 } public void setColor(int color) { = color。 12 } public void setSpeed(int speed) { = speed。 } public void setDirect(int direct) { = direct。 } public void setY(int y) { = y。 } public void setX(int x) { = x。 =y。 //坦克的速度 int speed=1。 int color。 //坦克縱坐標(biāo) int y=0。 ()。 ()。 ()。 ()。 本次 程序中并未使用過多復(fù)雜的人工智能算法,如有時(shí)間,將可能再此方面加以完善。 為了防止坦克運(yùn)動(dòng)過程中出現(xiàn)互相重疊的事情出現(xiàn),我們必須對坦克的坐標(biāo)進(jìn)行判斷 ,坦克與坦克之間的坐標(biāo)以及邊界互相不能侵犯, 但 是如果 某坦克正從上方生成而正 好 有另一輛阻礙在 該地方生成,這將導(dǎo)致不可避免的重 疊 。 所以本次 程序 是這樣安排的 :當(dāng)碰撞到障礙物或邊界時(shí)立即轉(zhuǎn)向,但 碰到玩家坦克時(shí)需要有一個(gè)等待的時(shí) 間,這個(gè)時(shí)間由碰撞前隨機(jī)取得的在某方向上的持續(xù)行走步數(shù)決定 (程序規(guī)定坦克走一定的路程后必須轉(zhuǎn)向其他方向,不然就不一直按照之前的方向一直走下去) ,當(dāng)發(fā)生坦克間碰撞時(shí),此隨機(jī)數(shù)將在下一次循環(huán)前減少為原來的 2/3,這樣就實(shí)現(xiàn)了加快轉(zhuǎn)向的時(shí)間,避免死鎖在一個(gè)方向上靜止的停留過長的時(shí)間。 需要指出的是,當(dāng)發(fā)生阻礙不能在不變方向的情況下繼續(xù)行走時(shí),并不一定立即需要采取轉(zhuǎn)向的對策。 所以在程序中我們試用 random 函數(shù)來控制敵方坦克的方向,給出 0123 四個(gè)數(shù)字, 0代表向上運(yùn)動(dòng), 1 代表右, 2代表下, 3代表左。 己方坦克在玩家的控制下運(yùn)行,敵方坦克隨機(jī)運(yùn)行。 break。 //畫出圓形 (x+10, y+5, 10, 10)。 //畫出下面的矩形 9 (x, y+15, 30, 5, false)。 break。 // (x+5, y+10, 10, 10)。 // (x+15,y , 5, 30,false)。 break。 //畫出圓形 (x+10, y+5, 10, 10)。 //畫出下面的矩形 (x, y+15, 30, 5, false)。 break。 // (x+5, y+10, 10, 10)。 // (x+15,y , 5, 30,false)。 break。 break。 // TODO: handle exception } } } 第二章 游戲的設(shè)計(jì)思路 畫出坦克 坦克大戰(zhàn)游戲中坦克當(dāng)然得分兩類,自己的坦克和 敵人的坦克 ,在游戲中我們就將兩類坦克分成兩種顏色,以示區(qū)分。 ()。 } catch (Exception e) { 7 ()。 bw=new BufferedWriter(fw)。我們的坦克大戰(zhàn)游戲 就是利用 IO流來記錄 玩家的分?jǐn)?shù),成績的。 io 流編程實(shí)現(xiàn)菜單功能 IO 包括輸入和輸出流,輸入流指的是將數(shù)據(jù)以字符或字節(jié)形式從外部媒介比如文件、數(shù)據(jù)庫等讀取到內(nèi)存中所以也分為字符輸入流和字節(jié)輸入流。當(dāng)然我們的這個(gè)坦克大戰(zhàn)游戲的實(shí)現(xiàn)肯定離不開線程,例如己方坦克是必須要會(huì)移動(dòng)的,那么敵人坦克也要移動(dòng),子彈呢?當(dāng)然也要會(huì)移動(dòng),等等 ? 。 runnable 實(shí)現(xiàn)線程 Java界 曾流行這樣一句話:不懂線程就不要說自己會(huì) Java,可見線程對 Java的重要性是多么的大。 //對 jmil 相應(yīng) (this)。E39。 (exit)。 (saveExit)。 (continueGame)。 Logo 畫面 游戲選項(xiàng) 主程序 屏幕繪圖 本關(guān)記分統(tǒng)計(jì) 顯示 結(jié)束 顯示歷史記分表 敵方需要出坦克時(shí),生成坦克 初始化參數(shù) 死亡時(shí) 符合結(jié)束條件時(shí) 6 jmi4 =new JMenuItem(繼續(xù)上局游戲 (S))。 jmi2 =new JMenuItem(退出游戲 (E))。)。 用fill3DRect 畫出矩形, fillOval 畫出圓,drawLine 畫出線,三個(gè)矩形,一個(gè)圓及一條線就可以
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1