<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了java實現雷霆戰機的具體程式碼,供大家參考,具體內容如下
GameFame.java
package cn. tx; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.util.Random; import java.util.Vector; class GameFrame extends JFrame { HeroPlane heroPlane; //定義子彈的集合 Vector<Bullet> bullets = new Vector<>(); //敵機集合 Vector<EnemyPlane> enemys = new Vector<>(); GameFrame frame; public GameFrame () { frame = this; //建立英雄機 heroPlane =new HeroPlane(); heroPlane.start(); //設定表單的寬高 this.setSize(450, 730); //標題 this.setTitle("雷霆戰機"); this.setResizable(false); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); //視窗可見 this.setVisible(true); new Thread(new Runnable() { @Override public void run() { while (true) { repaint(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); //產生敵機的執行緒 new Thread(new Runnable() { //建立亂數的物件 Random r = new Random(); @Override public void run() { while (true){ //啟動敵機 EnemyPlane enemyPlane = new EnemyPlane(r.nextInt(500), 0, frame); enemyPlane.start(); //新增敵機的時候,讓x軸隨機 enemys.add(enemyPlane); try{ Thread.sleep(500); } catch (InterruptedException e){ e.printStackTrace(); } } } }).start(); } // *在視窗上畫,內容,paint這 個畫筆的方法在視窗初始化的時候會預設的執行 // @param g public void paint (Graphics g) { //System.out.println("繪製畫板"); //兩背景 BufferedImage image = (BufferedImage) this.createImage(this.getSize().width, this.getSize().height); //高效快取的畫筆 Graphics bi = image.getGraphics(); //畫背景 bi.drawImage(new ImageIcon("img/MAP02_01.png").getImage(),0,0,null); //畫戰鬥機 bi.drawImage(heroPlane.img, heroPlane.x,heroPlane.y, heroPlane.width,heroPlane.heigth,null); //飛機發射炮彈 for (int i = 0; i < bullets.size(); i++) { System.out.println(bullets); Bullet bullet = bullets.get(i); if(bullet.y > 0) bi.drawImage(bullet.image, bullet.x,bullet.y -= bullet.speed, bullet.width,bullet.height, null); else bullets.remove(bullet); } //畫敵機 for (int i = 0; i < enemys.size(); i++) { System.out.println(enemys); EnemyPlane ep = enemys.get(i); if(ep.y < 730 ) bi.drawImage(ep.img, ep.x,ep.y += ep.speed, ep.width,ep.heigth,null); else enemys.remove(ep); } //生效 g.drawImage(image,0,0,null); } public static void main (String[]args){ GameFrame frame = new GameFrame(); Player player = new Player(frame); frame.addKeyListener(player); } }
HeroPlane
package cn.tx; import javax.swing.*; import java.awt.*; public class HeroPlane extends Thread{ //英雄機在畫板上的位置 int x=200, y=600; int width = 50, heigth = 50; //飛機的速度 int speed = 10; Image img = new ImageIcon("img/10011.png").getImage(); //定義方向鍵的標誌 boolean up,down,left,right; public HeroPlane() { } public HeroPlane(int x, int y, int width, int heigth, Image img) { this.x = x; this.y = y; this.width = width; this.heigth = heigth; } @Override public void run() { while (true){ if (up){ y -= speed; } if (down){ y += speed; } if (left){ x -= speed; } if (right){ x += speed; } try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } }
Player
package cn.tx; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; //定義一個玩家 public class Player extends KeyAdapter { GameFrame frame; HeroPlane heroPlane; public Player(GameFrame frame) { this.frame=frame; } public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); //38、40、37、39 switch (keyCode){ case 38: frame.heroPlane.up = true; break; case 40: frame. heroPlane.down = true; break; case 37: frame. heroPlane.left = true; break; case 39: frame. heroPlane.right = true; break; case 66: addBullut(); break; } } @Override public void keyReleased(KeyEvent e) { int keyCode = e.getKeyCode(); //38、40、37、39 switch (keyCode){ case 38: frame.heroPlane.up = false; break; case 40: frame. heroPlane.down = false; break; case 37: frame. heroPlane.left = false; break; case 39: frame. heroPlane.right = false; break; } } public void addBullut(){ frame.bullets.add(new Bullet( frame.heroPlane.x+5, frame.heroPlane.y - 20)); } }
EnemyPlane
package cn.tx; import javax.swing.*; import java.awt.*; public class EnemyPlane extends Thread { public GameFrame gf; //子彈的座標,大小速度 public int x, y; public int width = 50; public int heigth = 50; public int speed = 2; public Image img = new ImageIcon("img/10021.png").getImage(); public EnemyPlane(int x, int y, GameFrame gf) { super(); this.x = x; this.y = y; this.gf = gf; } public EnemyPlane(int x, int y, int width, int heigth, GameFrame gf) { super(); this.x = x; this.y = y; this.width = width; this.heigth = heigth; this.gf = gf; } //瑪麗飛翔的邏輯;移動的邏輯都在這裡。 public void run() { while (true) { //向左走 if (hit()) { System.out.println("hit................"); this.speed = 0; this.img = new ImageIcon("img/300350.png").getImage(); try { this.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } gf.enemys.remove(this); break; } if (this.y >= 760) { break; } try { this.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } //檢測碰撞 public boolean hit() { // swing在水中,人家已經提供了 Rectangle myrect = new Rectangle(this.x, this.y, this.width, this.heigth); Rectangle rect = null; for (int i = 0; 1 < gf.bullets.size(); i++) { Bullet bullet = gf.bullets.get(i); System.out.println("test hit"); rect = new Rectangle(bullet.x, bullet.y - 1, bullet.width, bullet.height); //碰撞檢測 if (myrect.intersects(rect)) { return true; } } return false; } @Override public String toString() { return "EnemyPlane{" + "x=" + x + ", y=" + y + ", width=" + width + ", height=" + heigth + '}'; } }
Bullet
package cn.tx; import javax.swing.*; import java.awt.*; public class Bullet { //在面板上的座標 int x, y; int width= 50,height = 50; //定義飛機預設速度 int speed = 5; Image image = new ImageIcon("img/30022.png").getImage(); public Bullet(int x, int y) { this.x = x; this.y = y; } public Bullet(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援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