<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了java實現飛機大戰遊戲的具體程式碼,供大家參考,具體內容如下
MyPanel類
package P; import java.awt.Font; import java.awt.Graphics; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.util.ArrayList; import java.util.List; import javax.sql.RowSetInternal; import javax.swing.ImageIcon; import javax.swing.JPanel; //xx.2 //建立面板類,繼承面板,實現移動監聽事件 public class MyPanel extends JPanel implements MouseMotionListener { //private ImageIcon bjImage = new ImageIcon("img/bj.png"); //英雄機圖片 private ImageIcon heroImage = new ImageIcon("img/頭.png"); //顯示logo //private ImageIcon logoImage = new ImageIcon("img/頭.png"); //英雄機的寬高 private int width = heroImage.getIconWidth(); private int height = heroImage.getIconHeight(); //英雄機的座標 private int x=180; private int y=880; //建立一個敵機的集合,用於展示多個敵機 List<Enemy> enemys = new ArrayList<>(); //儲存子彈集合 List<Bullet> bullets = new ArrayList<>(); //儲存爆炸物件集合 List<Bomb> bombs = new ArrayList<>(); //儲存英雄機爆炸集合 List<HeroDead> heroDeads = new ArrayList<>(); private int number;//統計當前得分 private int m;//統計剩餘血條量 // MyPanel jp = new MyPanel() { // { // setBackground(Color.gray);// 設定面板背景顏色 // } public MyPanel() { //在構造方法中準備10個敵機 for(int i=0;i<10;i++){ enemys.add(new Enemy()); } } @Override public void paint(Graphics g) { //用於繪製圖片區域 super.paint(g); //在視窗左側展示打飛機得分 //設定字型: 引數1:字型家族, 引數2:字型樣式:加粗 引數3:字型大小 g.setFont(new Font("宋體", Font.BOLD, 30)); g.drawString("當前得分:"+number, 5, 30); g.drawString("髮量(萬根):"+(5-m), 5, 80); //g.drawImage(null, x, y, getBackground(), getFocusCycleRootAncestor()); //繪製英雄機圖片 引數1,圖片 引數2和3:座標 g.drawImage(heroImage.getImage(), x, y, null); //g.drawImage(logoImage.getImage(), 19, 22, null); //在繪圖中顯示10輛敵機 for(int i=0;i<enemys.size();i++){ Enemy enemy = enemys.get(i); //獲取敵機物件 enemy.drawImage(g); //然後分別展示 } //展示子彈集合的圖片 for (int i = 0; i < bullets.size(); i++) { Bullet bullet = bullets.get(i); //取出子彈物件 bullet.drawImage(g); } //展示爆炸集合的圖片 for(int i=0;i<bombs.size();i++){ Bomb bomb = bombs.get(i); bomb.drawImage(g); } //展示英雄機的銷燬圖片 for(int i=0;i<heroDeads.size();i++){ HeroDead heroDead = heroDeads.get(i); heroDead.drawImage(g); } } @Override public void mouseDragged(MouseEvent e) { //System.out.println("滑鼠移動並拖拽觸發"); //滑鼠拖拽時,需要將英雄機也帶著移動(只需改變x軸和y軸) x = e.getX()-width/2; //英雄機的移動,隨著滑鼠觸發移動的 y = e.getY()-height/2; //滑鼠指定到英雄機中間位置 repaint(); //重新繪製圖片 } @Override public void mouseMoved(MouseEvent e) { //System.out.println("滑鼠移動的觸發.."); //滑鼠移動時,需要將英雄機也帶著移動(只需改變x軸和y軸) x = e.getX()-width/2; //英雄機的移動,隨著滑鼠觸發移動的 y = e.getY()-height/2; //滑鼠指定到英雄機中間位置 repaint(); //重新繪製圖片 } //L-4. 建立子彈類Bullet,操作與敵機類類似 public void init() { //定義一個標記,迴圈了自定義的次數後,才去新增,這樣子彈數量會變少 int flag = 0; while(true) { //迴圈地跑,模擬依次移動的效果 flag++; // if(flag==50) { //控制子彈數量 bullets.add(new Bullet(x+width/2, y)); //就是從英雄級的x,y軸位置發射子彈的 flag=0; //又回到0,依次計算15次 //System.out.println("子彈數量:"+ bullets.size()); } //展示子彈,讓子彈飛起來 for(int i=0;i<bullets.size();i++) { Bullet bullet = bullets.get(i); //取出物件 if(i%2!=0)//設定子彈左右發射 bullet.move(); else bullet.move1();//移動子彈位置 //如果子彈移動到y軸為0,則移除掉 if(bullet.getY()<0){ bullets.remove(bullet); //移除子彈物件 } } //xx.3. //敵機迴圈移動.. for(int i=0;i<enemys.size();i++) { Enemy en = enemys.get(i); en.move(); //迴圈地移動每一架敵機y軸位置 //超出螢幕範圍後,需要移除,並重新新增一個物件 if(en.getY()>GameMain.HEIGHT) { //int count1=enemys.size(); enemys.remove(en); //移除物件 enemys.add(new Enemy()); //重新再建立物件 } //L 3-4 //在敵機的迴圈中,再繼續迴圈子彈; 需要判斷是否有子彈和敵機重疊了, //則移除敵機物件,重新新增,移除子彈;如果有則新增爆炸物件 for(int j=0;j<bullets.size();j++){ Bullet bu = bullets.get(j); if(isHit(en,bu)){ //碰撞的判斷 enemys.remove(en); //移除敵機,並重新new一個 enemys.add(new Enemy()); bullets.remove(bu); //移除子彈 //新增的爆炸位置和敵機位置一致 bombs.add(new Bomb(en.getX(), en.getY())); number += 10; //爆炸後,累加得分 } } //zz-6 //判斷英雄機與敵機的碰撞(英雄機的消亡) if(isHit(en)){ System.out.println("進入英雄機爆炸..."); //敵機的物件移除 enemys.remove(en); //英雄機爆炸圖片位置應該與英雄機重疊 heroDeads.add(new HeroDead(x, y)); for(m=0;m<=heroDeads.size();m++) { while(heroDeads.size()==5) { return; } } //遊戲結束,跳出死迴圈 } } //L-5 //將爆炸的所有物件,過一段時間則幹掉 for(int i=0;i<bombs.size();i++){ Bomb bomb = bombs.get(i); bomb.move(); //計算次數,統一回圈多少次後,再幹掉 if(bomb.getCount()>6){ bombs.remove(bomb); //在迴圈的一定範圍後,可以移除爆炸了 } } //xx.2 //每次的移動都需要停頓一下 try { Thread.sleep(6); //單位:毫秒 睡眠6毫秒 } catch (InterruptedException e) { e.printStackTrace(); } repaint(); //重新繪製圖片 } } //zz-6 //英雄機與敵機的碰撞 private boolean isHit(Enemy en) { //英雄機的碰撞區域 Rectangle rect = new Rectangle(x, y, width, height); //碰撞點的位置,是在敵機的中心點 Point point = new Point(en.getX()+en.getWidth()/2, en.getY()+en.getHeight()/2); return rect.contains(point); } //L-5 private boolean isHit(Enemy en, Bullet bu) { //填充敵機的碰撞區域 Rectangle rect = new Rectangle(en.getX(), en.getY(), en.getWidth(), en.getHeight()); //將子彈的位置設定在中間 Point point = new Point(bu.getX()+bu.getWidth()/2, bu.getY()+bu.getHeight()/2); //如果位置有重疊,返回true return rect.contains(point); } }
HeroDead類
package P; import java.awt.Graphics; import javax.swing.ImageIcon; public class HeroDead { private ImageIcon heroImage = new ImageIcon("img/爆炸.gif"); private int width = heroImage.getIconWidth(); private int height = heroImage.getIconHeight(); private int x; private int y; public ImageIcon getHeroImage() { return heroImage; } public void setHeroImage(ImageIcon heroImage) { this.heroImage = heroImage; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public HeroDead(int x,int y){ this.x=x; this.y=y; } public void drawImage(Graphics g) { g.drawImage(heroImage.getImage(), x, y, null); } }
GameMain類
package P; import java.awt.Color; import javax.swing.BorderFactory; import javax.swing.JFrame; //遊戲入口類 public class GameMain { static final int WIDTH = 860; //設定靜態常數,作為狀態值使用 static final int HEIGHT = 660; public static void main(String[] args) { JFrame jFrame = new JFrame(); //範例化頂級視窗類 jFrame.setSize(WIDTH, HEIGHT); //設定寬高畫素 jFrame.setTitle("小禿頭歷險記"); //設定標題 jFrame.setLocationRelativeTo(null); //設定居中效果 //JFrame.EXIT_ON_CLOSE: 狀態值 3 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //關閉視窗的同時,把程式關閉 //在視窗中,加入面板 MyPanel pl = new MyPanel(); pl.setBackground(Color.pink); pl.setBorder(BorderFactory.createLineBorder(Color.cyan, 3)); jFrame.add(pl); //新增面板元件 jFrame.addMouseMotionListener(pl); //新增滑鼠移動事件 jFrame.setVisible(true); //使視窗視覺化 pl.init(); //在面板中迴圈將元件跑起來 } }
Enemy類
package P; import java.awt.Graphics; import java.util.Random; import javax.swing.ImageIcon; //建立敵機類 public class Enemy { //建立敵機圖片,寬高,座標等屬性 private ImageIcon enemyImage = new ImageIcon("img/錯誤.png"); private int width = enemyImage.getIconWidth(); private int height = enemyImage.getIconHeight(); private int x; private int y; public ImageIcon getEnemyImage() { return enemyImage; } public void setEnemyImage(ImageIcon enemyImage) { this.enemyImage = enemyImage; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public Enemy(){ //建立隨機類,在視窗寬高範圍內隨機 Random random = new Random(); //隨機出來的敵機位置可以顯示一半圖片 x = random.nextInt(GameMain.WIDTH-width/2); y = -random.nextInt(GameMain.HEIGHT-height/2); //初始敵機位置為負數 } public void drawImage(Graphics g) { //繪製敵機圖片 g.drawImage(enemyImage.getImage(), x, y, null); } public void move() { y +=2; //控制y軸速度 } }
Bullet類
package P; import java.awt.Graphics; import javax.swing.ImageIcon; //建立子彈類 public class Bullet { //建立屬性,子彈圖片,寬高,位置 private ImageIcon bulletImage = new ImageIcon("img/aaa.gif"); private int width = bulletImage.getIconWidth(); private int height = bulletImage.getIconHeight(); private int x; private int y; public ImageIcon getBulletImage() { return bulletImage; } public void setBulletImage(ImageIcon bulletImage) { this.bulletImage = bulletImage; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public Bullet(int x,int y) { //x,y軸位置從外面傳入(等於英雄級的位置) this.x = x; this.y = y; } public void drawImage(Graphics g) { g.drawImage(bulletImage.getImage(), x, y, null); } public void move() { x-=1; y -= 2; //讓子彈y軸從下往上遞減 } public void move1() { x+=1; y -= 2; //讓子彈y軸從下往上遞減 } }
爆炸類bomb類
package P; import java.awt.Graphics; import javax.swing.ImageIcon; //建立爆炸的實體了 public class Bomb { //爆炸的圖片,寬高,位置屬性 private ImageIcon bombImage=new ImageIcon("img/zz.png"); private int width = bombImage.getIconWidth(); private int height = bombImage.getIconHeight(); private int x; private int y; private int count; //記錄多少次數後爆炸 public ImageIcon getBombImage() { return bombImage; } public void setBombImage(ImageIcon bombImage) { this.bombImage = bombImage; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public Bomb(int x,int y){ this.x = x; this.y = y; } public void drawImage(Graphics g) { g.drawImage(bombImage.getImage(), x, y, null); } public void move() { count++; } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45