Java飞机大战教程(大一课程设计)
生活随笔
收集整理的這篇文章主要介紹了
Java飞机大战教程(大一课程设计)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
? ? ? 包含知識點:窗口繪制 畫圖及雙緩沖 碰撞檢測 集合類的應用 鼠標鍵盤監聽 碰撞檢測
窗口繪制 畫圖及雙緩沖 作用:顯示游戲畫面
集合類的應用: 用來存取需要畫的元素(如飛機、敵機、子彈、飛機技能、爆炸效果等)
鼠標鍵盤監聽:主要用來對游戲的控制(如飛機的移動,游戲的開始與暫停等)
碰撞檢測:可判斷飛機與敵機,子彈等的碰撞來做進一步的處理
然后來看代碼及注釋吧
繪制窗口的代碼
public class Win extends JFrame {//建一個類繼承JFrame來畫圖Win frame ;//聲明對象frame public void lunch(){this.setSize(123,322);//設置窗口大小this.setLocationRelativeTo(null);//設置窗口為中央位置this.setTitle("設置窗口");//設置窗口標題this.setVisible(true);//使窗口顯現 }}beijinglei
stati表是游戲狀態
//游戲狀態 0未開始 1游戲運行 2暫停 3失敗 4成功 static int state=0; public void paint(Graphics g){count++;//繪制次數if(offScreenImage==null){//雙緩沖圖片為空就給圖片添加圖象offScreenImage=this.createImage(700,900);//創建雙緩沖圖片的大小}//獲得該圖片的畫布Graphics gImage=offScreenImage.getGraphics();//填充每個畫布gImage.fillRect(0,0,700,900);if(state==0){gImage.drawImage(aaa,0,0,null);//改變字體顏色gImage.setColor(Color.WHITE);//改變文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//顯示文字gImage.drawString("開始游戲",260,450);}if(state==1){objectList.removeAll(removeList);//刪除集合removeAll里的爍有元素for (Gameplane object:objectList){object.paintSet(gImage);//用畫筆畫集合中的所有元素}}if(state==3){//改變字體顏色gImage.setColor(Color.RED);//改變文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//顯示文字gImage.drawString("游戲結束",260,450);}if(state==4){gImage.drawImage(aaa,0,0,null);//畫結束時的畫面//改變字體顏色gImage.setColor(Color.GREEN);//改變文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//顯示文字gImage.drawString("游戲通關",260,450);}//繪畫爆炸效果圖 // gImage.drawImage(bbb, b0mb_x, b0mb_y, null);if(state==2){//改變字體顏色gImage.setColor(Color.WHITE);//改變文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//顯示文字gImage.drawString("游戲暫停",260,450);}//將緩沖區繪制好的圖形整個繪制到·畫布中g.drawImage(offScreenImage,0,0,null);}碰撞檢測段
/*檢測矩形是否相交之后在花括號做具體處理,如將碰撞物移除,劃爆炸等 具體在后面的代碼里會有解釋 */if(this.getRec().intersects(enemyObj.getRec())){ }public Rectangle getRec(){//先獲得對象(如和飛機、子彈等一樣大的矩形)return new Rectangle(x,y,25,25);//定義矩形大小及坐標} }鼠標鍵盤監聽主要代碼
//鍵盤按鍵添加例子this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {super.keyPressed(e);if(e.getKeyCode()==81){ if(PlaneSkill.skill==20) { planeSkill.speed=12;PlaneSkill.skill=0;objectList.add(planeSkill);}}}});AAA //返回鍵盤值e.getKeyCode() //鼠標按鍵添加例子 this.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {super.mouseClicked(e);} }); //返回鼠標按鍵值mouseClicked.getButton主類win的代碼
import javax.swing.*; import java.awt.*; import java.math.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; public class win extends JFrame {static int score=0;//所得分數int enemyCount=0;//產生的敵機數量//游戲重繪次數int count=1;//游戲狀態 0未開始 1游戲運行 2暫停 3失敗 4成功static int state=0;List<Drop> dropList=new ArrayList<>();//被刪除物體的集合List<Gameplane> removeList=new ArrayList<>();//敵方戰機集合List<EnemyObj> enemyObjs=new ArrayList<>();//技能集合List<PlaneSkill> planeSkills=new ArrayList<>();//我方子彈集合List<Gameplane> objectList=new ArrayList<>();List<BulletObj> bulletObjList=new ArrayList<>();List<BulletObj2> bulletObj2List=new ArrayList<>();//boss的子彈的集合List<BulletObj1> bulletObj1List=new ArrayList<>();//技能集合List<PlaneSkill> planeSkillList=new ArrayList<>();//bossEnemyObj1 enemyObj1=null;//飛機個體 PlaneSkill planeSkill=null;PlaneObj planeobj = new PlaneObj("D:/Plane/Plane/src/image/plane.png", 150, 400, 0, this);//游戲背景BgObj bgobj=new BgObj("D:/Plane/Plane/src/image/bg3.jpg",0,-800,2.0,this);//子彈BulletObj bulletobj=new BulletObj("D:/Plane/Plane/src/image/die04.png",planeobj.x+30,planeobj.y-40,3,this); BulletObj bulletObj1;/*在學習繪圖中,如果需要繪制一張圖片,則需要獲取這張圖片通過Toolkit進行獲取在getImage()方法中,需要填寫圖片的路徑*/Image aaa=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/bg3.jpg");//導入圖片//游戲失敗圖片Image ccc=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/bg11.webp");//定義雙緩沖圖片Image offScreenImage=null;public void lunch(){//將飛機及背景加入到集合中objectList.add(bgobj);objectList.add(planeobj);this.setTitle("飛機大戰"); //為窗口添加開始鼠標事件this.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {super.mouseClicked(e);//System.out.println(e.getButton());//鼠標左鍵為1if(e.getButton()==1&&state==0) {//e.getButton()返回的為按鍵的數值 如果游戲狀態為·0,且按下鼠標左鍵就會開始游戲state = 1;} if((e.getButton()==3)&&(state==3||state==4)) {//如果游戲失敗或游戲通關·點擊鼠標右鍵就會將游戲狀態初始化{win.score=0;//重置游戲分數】‘win.state=0;//重置游戲狀態enemyCount=0;count=0; planeobj.x=150; planeobj.y=400;planeobj.life=3;planeSkill.skill=0;Drop.num1=0;for (BulletObj bulletObj: bulletObjList )//將屏幕上的我方飛機子彈移除并移除集合{bulletObj.x=-100;removeList.add(bulletobj);}for (BulletObj1 bulletObj1: bulletObj1List )//將屏幕上的敵方飛機子彈移除并移除集合{bulletObj1.x=-100;removeList.add((enemyObj1));}for (EnemyObj enemyObj: enemyObjs )//將屏幕上的敵方飛機移除并移除集合{enemyObj.x=-100;}enemyObj1=null;//使敵方boss為空不出場bulletObj1List.clear();//清空子彈集合objectList.removeAll(removeList);//在·大集合上清除元素}} repaint();//進入畫圖方法}});//為游戲添加一個暫停事件this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {super.keyPressed(e);//空格按下if(e.getKeyCode()==32){switch (state){case 1:state=2;break;case 2:state=1;break;}}}}); // this.setLocationRelativeTo(null);//使窗口在屏幕中央位置this.setSize(700,900);//設置窗口大小this.setVisible(true);//使窗口顯現while(true){if(state==1){createObj();repaint();//調用update()清除當前顯示并再調用paint()方法}try{//使循環刷新頁面減速Thread.sleep(25);}catch (Exception e){ e.printStackTrace();}}}@Overridepublic void paint(Graphics g){count++;//繪制次數if(offScreenImage==null){//雙緩沖圖片為空就給圖片添加圖象offScreenImage=this.createImage(700,900);//創建雙緩沖圖片的大小}//獲得該圖片的畫布Graphics gImage=offScreenImage.getGraphics();//填充每個畫布gImage.fillRect(0,0,700,900);if(state==0){gImage.drawImage(aaa,0,0,null);//改變字體顏色gImage.setColor(Color.WHITE);//改變文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//顯示文字gImage.drawString("開始游戲",260,450);}if(state==1){objectList.removeAll(removeList);//刪除集合removeAll里的爍有元素for (Gameplane object:objectList){object.paintSet(gImage);//用畫筆畫集合中的所有元素}}if(state==3){//改變字體顏色gImage.setColor(Color.RED);//改變文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//顯示文字gImage.drawString("游戲結束",260,450);}if(state==4){gImage.drawImage(aaa,0,0,null);//畫結束時的畫面//改變字體顏色gImage.setColor(Color.GREEN);//改變文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//顯示文字gImage.drawString("游戲通關",260,450);}//繪畫爆炸效果圖 // gImage.drawImage(bbb, b0mb_x, b0mb_y, null);if(state==2){//改變字體顏色gImage.setColor(Color.WHITE);//改變文字格式gImage.setFont(new Font("仿宋",Font.BOLD,40));//顯示文字gImage.drawString("游戲暫停",260,450);}//將緩沖區繪制好的圖形整個繪制到·畫布中g.drawImage(offScreenImage,0,0,null);}// 裝填子彈或敵機boolean un=true;public void createObj() {if(Drop.num1>=2&&un) {objectList.remove(planeobj);planeobj = new PlaneObj("D:/Plane/Plane/src/image/plane1.png", 150, 400, 0, this);objectList.add(planeobj);un=false;}if(Drop.num1<2&&!un){objectList.remove(planeobj);planeobj = new PlaneObj("D:/Plane/Plane/src/image/plane.png", 150, 400, 0, this);objectList.add(planeobj);un=true;}if(count%400==0){dropList.add(new Drop("D:/Plane/Plane/src/image/sky.png",4,this));objectList.add(dropList.get(dropList.size()-1));}//控制子彈生成速度if (count % 8 == 0) {if(Drop.num1<2) {bulletObjList.add(new BulletObj("D:/Plane/Plane/src/image/die04.png", planeobj.x + 30, planeobj.y - 35, 8, this));objectList.add(bulletObjList.get(bulletObjList.size() - 1));}else{bulletObjList.add(new BulletObj("D:/Plane/Plane/src/image/die04.png", planeobj.x+10 , planeobj.y - 35, 8, this));objectList.add(bulletObjList.get(bulletObjList.size() - 1));bulletObj2List.add(new BulletObj2("D:/Plane/Plane/src/image/die04.png", planeobj.x+90 , planeobj.y - 35, 8, this));objectList.add(bulletObj2List.get(bulletObj2List.size() - 1));}}if (count % 15 == 0&&enemyObj1==null) {//控制敵方飛機生成int p=(int)(1+Math.random()*5);enemyObjs.add(new EnemyObj("D:/Plane/Plane/src/image/enemy0"+p+".png", 4, this));objectList.add(enemyObjs.get(enemyObjs.size() - 1));enemyCount++; // System.out.println(enemyCount);}if (PlaneSkill.skill == 20) {//技能產生planeSkill =(new PlaneSkill("D:/Plane/Plane/src/image/bomb12.png",0,700,0,this));this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {super.keyPressed(e);if(e.getKeyCode()==81){ if(PlaneSkill.skill==20) { planeSkill.speed=12;PlaneSkill.skill=0;objectList.add(planeSkill);}}}});}if (count % 24 == 0 && enemyObj1 != null&&enemyObj1.life>0){//控制boss子彈產生bulletObj1List.add(new BulletObj1("D:/Plane/Plane/src/image/bluecircleimg.png", enemyObj1.x + 111, enemyObj1.y + 206, 10, this));objectList.add(bulletObj1List.get(bulletObj1List.size() - 1));}if (enemyCount >= 80) {if(enemyObj1==null){enemyObj1 = new EnemyObj1("D:/Plane/Plane/src/image/enemy09.png", 0, 50, 3, this);objectList.add(enemyObj1);}}}public static void main(String[] args){win game=new win();game.lunch();} }所有物體圖象(飛機、敵機、boss、子彈、技能等)的父類GamePlane類
GamePlane是個抽象類主要是規定了物體圖像的相關屬性(如圖象、位置、速度、矩形大小)
import java.awt.*; public abstract class Gameplane {Image img;//游戲元素的橫坐標int x;//游戲元素的縱坐標int y;//游戲元素的寬;int width;//游戲元素的高int height;//游戲元素的速度double speed;//引入主界面win frame;//無參構造方法public Gameplane(){}//構造方法public Gameplane(String img,int x,int y,double speed,win frame){this.img=Toolkit.getDefaultToolkit().getImage(img);this.x=x;this.y=y;this.speed=speed;this.frame=frame;} //構造方法public Gameplane(String img,win frame){this.img=Toolkit.getDefaultToolkit().getImage(img);this.frame=frame;}//構造方法public Gameplane(String img,int x,int y,int width,int height,double speed){this.img=Toolkit.getDefaultToolkit().getImage(img);this.x=x;this.y=y;this.width=width;this.height=height;this.speed=speed;}//返回圖片public Image getImg(){return img;}//用img獲取圖片 public void setImg(String img){this.img=Toolkit.getDefaultToolkit().getImage(img); } //繼承元素繪制自己的方法 public abstract void paintSet(Graphics g);//獲取當前元素矩形,是為碰撞檢測而寫public abstract Rectangle getRec();}之后的游戲背景類、飛機類、敵機類、子彈類、技能類都是GamePlane的之類,對其進行實例化·
背景類:bgObj類
import java.awt.*;public class BgObj extends Gameplane {public BgObj() {super();} //構造方法public BgObj(String img, int x, int y, double speed, win frame) {super(img, x, y, speed, frame);} //畫圖方法主要是對圖像的處理public void paintSet(Graphics g) { g.drawImage(img,x,y,null);//將背景圖像畫在畫布上 y+=1;//圖象y坐標向前移動,即背景后移,由相對位置可得等于飛機在向前移動 if(y>=-10)//圖片的循環移動y=-800; /*在屏幕上顯示得分情況+*/g.setFont(new Font("仿宋",Font.BOLD,20));g.setColor(Color.green); g.drawString("得分:"+this.frame.score,10,50);} //獲取物體矩形的方法public Rectangle getRec() { return null;//背景不需要碰撞檢測所以返回值為空}}飛機類PlanObj類
import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent;public class PlaneObj extends Gameplane{int life=3;//設置飛機的生命值public PlaneObj(){super();}public PlaneObj(String img,int x,int y,double speed,win frame){this.img=Toolkit.getDefaultToolkit().getImage(img);this.x=x;this.y=y;this.speed=speed;this.frame=frame;}public PlaneObj(String img, int x, int y, int width,int height,double speed) {super(img, x, y, width,height,speed);}public void paintSet(Graphics g){g.drawImage(img,x,y,null);//畫出飛機圖片//飛機隨著鼠標的;移動this.frame.addMouseMotionListener(new MouseAdapter() {@Overridepublic void mouseMoved(MouseEvent e){//鼠標監聽事件x=e.getX()-52;//e.getX()返回值為鼠標坐標//兩個if作用為防止飛機隨鼠標移出窗口if(x<=0)x=0;if(x>580)x=600;y=e.getY()-41;//e.getY()返回值為鼠標坐標}});//在畫布上顯示飛機生命值PH以及飛機吃到的空頭數量Numg.setFont(new Font("仿宋",Font.BOLD,20));g.setColor(Color.green);g.drawString("Plane HP:"+this.life,10,130); g.drawString("Drop Num:"+Drop.num1,10,150);for (BulletObj1 bulletObj1: this.frame.bulletObj1List){//遍歷boss的每個子彈if(this.getRec().intersects(bulletObj1.getRec()))//如果boss子彈和我方飛機碰撞結果為true{bulletObj1.x=-100;//將子彈移除窗口this.frame.removeList.add(bulletObj1);//將子彈從畫布上刪除/*飛機與敵方子彈碰撞后,如果有空投空投數量減一如果空投數為零那么飛機生命減一*/if(Drop.num1>0)Drop.num1--;else life--;if(life==0)frame.state=3;} }}//獲取當前元素矩形,是為碰撞檢測而寫public Rectangle getRec(){return new Rectangle(x,y,100,80);//矩形的坐標即飛機坐標,矩形大小和飛機大小一樣}}敵機EnemyObj類
import java.math.*; import java.awt.*;public class EnemyObj extends Gameplane{int y=40;public EnemyObj(){super();}public EnemyObj(String img,double speed,win frame){this.img= Toolkit.getDefaultToolkit().getImage(img);this.speed=speed;this.frame=frame;}public void setImg(String img){this.img=Toolkit.getDefaultToolkit().getImage(img);}//繼承元素繪制自己的方法int x=(int)(Math.random()*5*100);public void paintSet(Graphics g){g.drawImage(img,x,y,null);y+=speed;if(this.getRec().intersects(this.frame.planeobj.getRec())){//檢測矩形是否相交this.x=-100;this.frame.removeList.add(this);if(Drop.num1>0)Drop.num1--;elsethis.frame.planeobj.life--;if(this.frame.planeobj.life<=0)//當飛機生名值為零是游戲狀態state變為3游戲結束this.frame.state=3;}}//獲取當前元素矩形,是為碰撞檢測而寫public Rectangle getRec(){return new Rectangle(x,y,98,70);}}子彈類
import java.awt.*;public class BulletObj extends Gameplane{public BulletObj(String img,int x,int y,double speed,win frame){this.img=Toolkit.getDefaultToolkit().getImage(img);this.x=x;this.y=y;this.speed=speed;this.frame=frame;}public void paintSet(Graphics g){ g.drawImage(img,x,y,null);//畫圖 y-=speed;//子彈移動for (EnemyObj enemyObj:this.frame.enemyObjs){//遍歷敵機if(this.getRec().intersects(enemyObj.getRec())){//檢測矩形是否相交//畫爆炸圖for(int i=1;i<=7;i++){this.img=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/explode/"+i+".gif");g.drawImage(img,this.x,this.y-30,null);}this.x=-100;enemyObj.x=-200;this.frame.score++;//分數加1if(PlaneSkill.skill<20)PlaneSkill.skill++;//技能的能量條加一/*移除子彈和敵機*/this.frame.removeList.add(enemyObj);this.frame.removeList.add(this);}}g.setFont(new Font("仿宋",Font.BOLD,30));g.setColor(Color.green);g.drawString("SPR:",10,100);if(PlaneSkill.skill==20)g.setColor(Color.RED);elseg.setColor(Color.YELLOW);System.out.println(PlaneSkill.skill);g.fillRect(80,80,PlaneSkill.skill*10,25);}//獲取當前元素矩形,是為碰撞檢測而寫public Rectangle getRec(){return new Rectangle(x,y,25,25);//定義矩形大小及坐標} }空投類(飛機吃兩個及兩個以上空頭會進入升級形態)
import java.awt.*;public class Drop extends Gameplane{int speed1=4;static int num1=0;int y=40;public Drop(){super();}public Drop(String img,double speed,win frame){this.img= Toolkit.getDefaultToolkit().getImage(img);this.speed=speed;this.frame=frame;}public void setImg(String img){this.img=Toolkit.getDefaultToolkit().getImage(img);}//繼承元素繪制自己的方法int x=(int)(Math.random()*5*100);//空投隨機產生的位置public void paintSet(Graphics g){g.drawImage(img,x,y,null);y+=speed;/*空投會左右移動,到窗口邊緣時會改變速度方向*/if(x<0)speed1=-speed1;if(x>630)speed1=-speed1; x+=speed1; //碰撞檢測if(this.getRec().intersects(this.frame.planeobj.getRec())){//檢測矩形是否相交this.x=-100;this.frame.removeList.add(this); num1++;}}//獲取當前元素矩形,是為碰撞檢測而寫public Rectangle getRec(){return new Rectangle(x,y,70,70);}}?下面的幾個類和上面寫過的幾個類相似所以就沒給注釋
技能類
public class PlaneSkill extends Gameplane {static int skill=0;Image image2;public PlaneSkill() {super();}public PlaneSkill(String img, int x, int y, double speed, win frame) {super(img, x, y, speed, frame);}public void paintSet(Graphics g) {g.drawImage(img, x, y, null); y-=speed;for ( EnemyObj enemyObj: this.frame.enemyObjs){if(this.getRec().intersects(enemyObj.getRec())) {for(int i=1;i<=7;i++){this.image2=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/explode/"+i+".gif");g.drawImage(image2,enemyObj.x+30,enemyObj.y+30,null);}enemyObj.x = -100;this.frame.removeList.add(enemyObj);if(this.y==-600)this.frame.removeList.add(this);} }}public Rectangle getRec() {return new Rectangle(x,y,700,103);} }敵方boss類
public class EnemyObj1 extends Gameplane {int life=50;Image image1;//另外聲明一個接收圖像的image1public EnemyObj1() {super();}public EnemyObj1(String img,int x,int y, double speed, win frame) {this.img = Toolkit.getDefaultToolkit().getImage(img); this.x=x; this.y=y;this.speed = speed;this.frame = frame;} int b=0; //定義表示boss血量的寬高int weight;int height=20;public void paintSet(Graphics g) {g.drawImage(img, x, y, null);if(x>=450) { speed=-speed; } if(x<0) {speed=-speed; } x+=speed; if(life<0){speed=0;y-=5 ; } for (BulletObj bulletObj:this.frame.bulletObjList){if(this.getRec().intersects(bulletObj.getRec())){for(int i=1;i<8;i++){this.image1=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/explode/"+i+".gif");g.drawImage(image1,bulletObj.x,bulletObj.y-50,null);}bulletObj.x=-100;this.frame.removeList.add(bulletObj);life--;if(life==1)b=this.frame.count;if(life<=0) {if(this.frame.count-b>120)this.frame.state = 4;}} }for (BulletObj2 bulletObj:this.frame.bulletObj2List){if(this.getRec().intersects(bulletObj.getRec())){for(int i=1;i<8;i++){this.image1=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/explode/"+i+".gif");g.drawImage(image1,bulletObj.x,bulletObj.y-50,null);}bulletObj.x=-100;this.frame.removeList.add(bulletObj);life--;if(life==1)b=this.frame.count;if(life<=0) {if(this.frame.count-b>120)this.frame.state = 4;}}} weight=life*5;g.setFont(new Font("仿宋",Font.BOLD,30));g.setColor(Color.GREEN); g.drawString("boss HP",150,50);g.setColor(Color.green);g.fillRect(300,30,weight,height);}//獲取當前元素矩形,是為碰撞檢測而寫public Rectangle getRec() {return new Rectangle(x, y, 248, 200);}敵方子彈類
import java.awt.*; public class BulletObj1 extends Gameplane{public BulletObj1(String img,int x,int y,double speed,win frame){this.img= Toolkit.getDefaultToolkit().getImage(img);this.x=x;this.y=y;this.speed=speed;this.frame=frame;}public void paintSet(Graphics g){g.drawImage(img,x,y,null);y+=speed;}//獲取當前元素矩形,是為碰撞檢測而寫public Rectangle getRec(){return new Rectangle(x,y,25,25);} }飛機升級后新加的子彈類2
import java.awt.*; public class BulletObj2 extends Gameplane {public BulletObj2(String img,int x,int y,double speed,win frame){this.img= Toolkit.getDefaultToolkit().getImage(img);this.x=x;this.y=y;this.speed=speed;this.frame=frame;}public void paintSet(Graphics g){g.drawImage(img,x,y,null);//畫圖y-=speed;//子彈移動for (EnemyObj enemyObj:this.frame.enemyObjs){if(this.getRec().intersects(enemyObj.getRec())){//檢測子彈2與敵機的矩形是否相交for(int i=1;i<=7;i++){this.img=Toolkit.getDefaultToolkit().getImage("D:/Plane/Plane/src/image/explode/"+i+".gif");g.drawImage(img,this.x,this.y-30,null);}this.x=-100;enemyObj.x=-200;this.frame.score++;this.frame.removeList.add(enemyObj);this.frame.removeList.add(this);}}}//獲取當前元素矩形,是為碰撞檢測而寫public Rectangle getRec(){return new Rectangle(x,y,25,25);//定義矩形大小及坐標} }到此代碼部分就寫完了
成品展示
總結
以上是生活随笔為你收集整理的Java飞机大战教程(大一课程设计)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python文件输入符_python文件
- 下一篇: 计算机信息管理相关课题论文,计算机信息管