【Java教程】如何制作雷霆战机详解

所需工具:

Java

聪明的大脑

勤劳的双手

 

注意:本站只提供教程,不提供任何成品+工具+软件链接,仅限用于学习和研究,禁止商业用途,未经允许禁止转载/分享等

 

教程如下

本文实例为大家分享了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;
 	     }
 	}

 

 

标签

发表评论

评论列表(1)