java實現(xiàn)雷霆戰(zhàn)機
本文實例為大家分享了java實現(xiàn)雷霆戰(zhàn)機的具體代碼,供大家參考,具體內(nèi)容如下
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; ? ? ? ? //創(chuàng)建英雄機 ? ? ? ? heroPlane =new HeroPlane(); ? ? ? ? heroPlane.start(); ? ? ? ? //設(shè)置窗體的寬高 ? ? ? ? this.setSize(450, 730); ? ? ? ? //標(biāo)題 ? ? ? ? this.setTitle("雷霆戰(zhàn)機"); ? ? ? ? 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(); ? ? ? ? ? //產(chǎn)生敵機的線程 ? ? ? ? new Thread(new Runnable() { ? ? ? ? ? ? //創(chuàng)建隨機數(shù)的對象 ? ? ? ? ? ? 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(); ? ? ? } ? ? // ? ? ? ?*在窗口上畫,內(nèi)容,paint這 個畫筆的方法在窗口初始化的時候會默認(rèn)的執(zhí)行 // ? ? ? ?@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); ? ? ? ? ? ? //畫戰(zhàn)斗機 ? ? ? ? ? ? bi.drawImage(heroPlane.img, heroPlane.x,heroPlane.y, heroPlane.width,heroPlane.heigth,null); ? ? ? ? ? ? //飛機發(fā)射炮彈 ? ? ? ? ? ? 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(); ? ? ? //定義方向鍵的標(biāo)志 ? ? 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; ? ? //子彈的坐標(biāo),大小速度 ? ? 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在水中,人家已經(jīng)提供了 ? ? ? ? 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 { ? ? //在面板上的坐標(biāo) ? ? int x, y; ? ? int width= 50,height = 50; ? ? ? //定義飛機默認(rèn)速度 ? ? 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; ? ? } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Date jpa 獲取最新一條數(shù)據(jù)的實例代碼
這篇文章主要介紹了Spring Date jpa 獲取最新一條數(shù)據(jù)的實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10Spring Boot結(jié)合ECharts案例演示示例
本文主要主要介紹了Spring Boot結(jié)合ECharts案例演示示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06Java整型數(shù)與網(wǎng)絡(luò)字節(jié)序byte[]數(shù)組轉(zhuǎn)換關(guān)系詳解
這篇文章主要介紹了Java整型數(shù)與網(wǎng)絡(luò)字節(jié)序byte[]數(shù)組轉(zhuǎn)換關(guān)系,結(jié)合實例形式歸納整理了java整型數(shù)和網(wǎng)絡(luò)字節(jié)序的byte[]之間轉(zhuǎn)換的各種情況,需要的朋友可以參考下2017-08-08IntelliJ IDEA同步代碼時版本沖突而產(chǎn)生出的incoming partial文件問題的解決辦法
今天小編就為大家分享一篇關(guān)于IntelliJ IDEA同步代碼時版本沖突而產(chǎn)生出的incoming partial文件問題的解決辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10mybatis-plus的自動填充時間的問題(添加到數(shù)據(jù)庫的時間比當(dāng)前時間多4個小時)
這篇文章主要介紹了mybatis-plus的自動填充時間的問題(添加到數(shù)據(jù)庫的時間比當(dāng)前時間多4個小時),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09springboot-rabbitmq-reply?消息直接回復(fù)模式詳情
這篇文章主要介紹了springboot-rabbitmq-reply消息直接回復(fù)模式詳情,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-09-09