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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于java的坦克大戰(zhàn)軟件程序設(shè)計(jì)-在線瀏覽

2025-02-06 09:51本頁面
  

【正文】 //畫出我的坦克 (到時(shí)再封裝成一個(gè)函數(shù) ) 8 // (x, y, 5, 30,false)。 // (x+5,y+5 , 10, 20,false)。 // (x+10, y+15, x+10, y)。 case 1: //炮筒向右 //畫出上面矩形 (x, y, 30, 5,false)。 //畫出中間的矩形 (x+5, y+5, 20, 10, false)。 //畫出線 (x+15, y+10, x+30, y+10)。 case 2: //向下 //畫出我的坦克 (到時(shí)再封裝成一個(gè)函數(shù) ) // (x, y, 5, 30,false)。 // (x+5,y+5 , 10, 20,false)。 // (x+10, y+15, x+10, y+30)。 case 3: //向左 //畫出上面矩形 (x, y, 30, 5,false)。 //畫出中間的矩形 (x+5, y+5, 20, 10, false)。 //畫出線 (x+15, y+10, x, y+10)。 } } 坦克的控制和敵方的智能運(yùn)行 坦克分為兩種 , 己方坦克和 敵方坦克 。 敵方坦克由于需要具有一定的智能性,以便對玩家攻擊,使之具有一定的可玩性。并且 敵人 可以自動(dòng)行走 自如,但是應(yīng)當(dāng)在以下適當(dāng)?shù)那闆r下轉(zhuǎn)向:第一 是 坦克 是否超出界面的邊界, 第二 是 坦克 是否與地圖障礙物發(fā)生了碰撞 , 第三 是 坦克 是否與用戶坦克發(fā)生了碰撞。如果一 定發(fā)生轉(zhuǎn)向,試想,當(dāng) 敵方碰到玩家時(shí),如果它立即轉(zhuǎn)向,將不會(huì)對玩家發(fā)射射向他的子彈,就不構(gòu)成任何威脅,當(dāng)然,也不能永遠(yuǎn)不轉(zhuǎn)向。 另外,坦克的轉(zhuǎn)后具 體方向都由隨機(jī)數(shù)決定。這是允許的,但需要對他們標(biāo)注狀態(tài),即當(dāng)坦克剛出現(xiàn)時(shí)暫時(shí)允許重合,一旦在某個(gè)時(shí)間他們脫離了重合狀態(tài),就不能在允許重合,如果不設(shè)置這樣的判斷,剛出現(xiàn)的坦克將會(huì)因?yàn)槭艿阶枞肋h(yuǎn)不能前進(jìn),坦克將混成一團(tuán)。 具體實(shí)現(xiàn)程序如下 : 1: //鍵按下處理 a 表示向左 s 表示 下 w 表示向上 d 表示右 10 public void keyPressed(KeyEvent arg0) { // TODO Autogenerated method stub if(()==) { //設(shè)置我的坦克的方向 (0)。 }else if(()==) { //向右 (1)。 }else if(()==) { //向下 (2)。 }else if(()==) { //向左 (3)。 } 2: class Tank { //表示坦克的橫坐標(biāo) int x=0。 //坦克方向 //0 表示上 1 表示 右 2表示下 3表示左 int direct=0。 11 boolean isLive=true。 public Tank(int x,int y) { =x。 } public int getX() { return x。 } public int getY() { return y。 } public int getDirect() { return direct。 } public int getSpeed() { return speed。 } public int getColor() { return color。 } } 3: //判斷是否碰到了別的敵人坦克 public boolean isTouchOtherEnemy() { boolean b=false。i()。 //如果不是自己 if(et!=this) { //如果敵人的方向是向下或者向上 if(==0||==2) { //左點(diǎn) 13 if(=amp。=+20amp。=amp。=+30) { return true。amp。amp。amp。 } } if(==3||==1) { if(=amp。=+30amp。=amp。=+20) { return true。amp。amp。amp。 } } } } break。i()。 //如果不是自己 14 if(et!=this) { //如果敵人的方向是向下或者向上 if(==0||==2) { //上點(diǎn) if(+30=amp。+30=+20amp。=amp。=et.y+30) { return true。amp。amp。amp。 } } if(==3||==1) { if(+30=amp。+30=+30amp。=amp。=et.y+20) { return true。amp。amp。amp。 } } } } 15 break。i()。 //如果不是自己 if(et!=this) { //如果敵人的方向是向下或者向上 if(==0||==2) { //我的左點(diǎn) if(=amp。=+20amp。+30=amp。+30=et.y+30) { return true。amp。amp。amp。 } } if(==3||==1) { if(=amp。=+30amp。+30=amp。+30=et.y+20) { return true。amp。amp。amp。 } } } } break。i()。 //如果不是自己 if(et!=this) { //如果敵人的方向是向下或者向上 if(==0||==2) { //我的上一點(diǎn) if(=amp。=+20amp。=amp。=+30) { return true。amp。amp。amp。 } 17 } if(==3||==1) { //上一點(diǎn) if(=amp。=+30amp。=amp。=+20) { return true。amp。amp。amp。 } } } } break。 } 子彈的運(yùn)行和控制 每一個(gè)坦克都有他自己的一顆子彈,這顆子彈在任何一輛坦克被畫出 時(shí)就一直存在,直至此坦克生命結(jié)束 時(shí)也隨著結(jié)束 , 它是一個(gè)繼承了 Runnable 類的 可運(yùn)行單獨(dú)線程的對象。 子彈的擊中又 分為兩種情況,如果此子彈來自于敵方,將只檢測玩家坦克,因?yàn)閿撤街g的子彈必須允許可以透明的穿過,以保證不會(huì)在敵人之間發(fā)生子彈的消減。 其次,子彈之間需要檢測是否碰撞。 玩家的子彈需要在每一步檢測所有敵人的子彈的運(yùn)行狀態(tài)。對磚墻將有能力將其擊毀, 使之在畫面上消失;對水泥鋼筋將不能發(fā)生作用,子彈也不能通過; 對于河流,坦克不可以通過,但子彈可以;對于草叢,子彈和坦克都可以通過。具體程序如下: else if(().equals(exit)) { //用戶點(diǎn)擊了退出系統(tǒng)的菜單 //保存擊毀敵人數(shù)量 . ()。 }//對存盤退出做處理 else if(().equals(saveExit)) { (111)。 //工作 Recorder rd=new Recorder()。 //保存擊毀敵人的數(shù)量和敵人的坐標(biāo) ()。 游戲面板與菜單的 設(shè)計(jì) 一個(gè)基本的游戲必須要有自己的運(yùn)行菜單,最起碼的功能要有 開始新游戲 ,退出游戲 , 存盤退出游戲 , 繼續(xù)上局游戲 。 jm1 =new JMenu(游戲 (G))。G39。 jmil =new JMenuItem(開始新游戲 (N))。 jmi3 =new JMenuItem(存盤退出游戲 (C))。 //注冊監(jiān)聽 (this)。 //注冊監(jiān)聽 (this)。 (this)。 (39。)。 (newgame)。 (jmi2)。 (jmi4)。 msp=new MyStartPanel()。 ()。它控制著整 20 個(gè)程序的運(yùn)行,并且可以通過相應(yīng)函數(shù)從程序描述 文件中獲取相關(guān)的信息。 游戲運(yùn)行 時(shí),首先載入畫面的不是游戲運(yùn)行狀態(tài),而是提供選項(xiàng),當(dāng)再次選擇 開始新游戲 時(shí)才正式運(yùn)行。 因此,在 TankMain 的構(gòu)造函數(shù)中分配了 StartChoice 類,即選項(xiàng)畫面的內(nèi)存空間 。在顯示高級用戶界面前,建造了一個(gè) Alert 類。 當(dāng)將 FOREVER作為 Alert的參數(shù)時(shí),將永久顯示,直到用戶點(diǎn)擊相應(yīng)按鈕 手動(dòng)結(jié)束。在此,由于貼在 Alert 上的圖片大小超出了其范圍,故已成為永久狀態(tài)。 startChoice 繼承了接口 mandListener, 這樣,就可以使用高級界面的Command 按鈕。即按鈕事件觸發(fā)后需執(zhí)行的函數(shù)。 鍵盤事件中,可用 getCommandType()返回的 Command 類型來確定選擇的是什么按鈕。 getSelectIndex()可檢測到選擇的項(xiàng)目的序號,序號從 0開始遞增。 21 主游戲 邏輯 及其涉及到的若干類 BattleCanvas 主管著所有類之間的協(xié)調(diào),決定何時(shí)死亡,何時(shí)分配新的敵人,及控制 敵人出現(xiàn)處的閃光圖標(biāo)、游戲結(jié)束后的動(dòng)態(tài) Gameover 字樣。 刷新速度需大于 30/秒才能使畫面顯示因人眼的暫時(shí)停留效應(yīng)流暢運(yùn)行。 其主邏輯如圖 44所示。它們分別為: EnemySprite 和 UserSprite。 BattleCanvas 包括了 LayerManager,這樣所有靜態(tài)和動(dòng)態(tài)的圖象都不需要手動(dòng)刷新,只需要在 LayerManager 中加入所有的需控制的元素,再統(tǒng)一由 LayerManager 刷新即可。 其他,如 Sprite 類的 gameover 字樣、記分統(tǒng)計(jì)畫面也都需在此主邏輯中建立相應(yīng)對象。 構(gòu)造函數(shù)中,需初始化地圖。 地圖由外部文件讀入。在創(chuàng)建了 InputStream 類的map 對象后,使用 read()函數(shù)可將流中的下一個(gè)字節(jié)讀出,并返回此字節(jié)代表的整數(shù)。 用二維循環(huán)將讀出的每個(gè)整數(shù),通
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1