文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java如何实现雷霆战机

2023-07-02 08:54

关注

本篇内容主要讲解“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;    }}

到此,相信大家对“java如何实现雷霆战机”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯