Java实现简单的飞机大战游戏(控制主飞机篇)

 更新时间:2022年05月07日 16:15:42   作者:猫奴.  
这篇文章主要为大家详细介绍了Java实现简单的飞机大战游戏,控制主飞机,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java实现简单的飞机大战游戏,控制主飞机的具体代码,供大家参考,具体内容如下

接着上一篇:Java实现简单的飞机大战游戏(敌机下落篇),首先我们需要明白,在控制一架飞机的时候,需要通过对键盘的监听。上下左右比较简单,因为是对单一按键的监听,在这里我们可以通过switch语句,通过读取键盘上每个按键的ASCII值。但是如果想要实现边飞行边发射子弹,又或者是实现斜飞怎么办?这里就需要通过对多个按键的监听。
解决的方法是:单一的方向控制我们还是使用switch语句,但是如果牵扯到2个或2个以上的按键监听,我们需要将按键设置一下标记位。即按下为真,释放为假。并且这些处理都是在switch case语句以外,就可以实现斜飞。然后再对窗体进行重绘,我们就可以看到飞机的坐标在不断的发生改变。

如以下代码所示:

public class MovePlaneListener extends KeyAdapter implements KeyListener {
    public int x, y, flag = 0;
    public JFrame frame;
    public boolean left = false, right = false, up = false, down = false;
    public Graphics g;
    public Image image;
    public int x1, y1, vy = 16;
    public Vector<Bullet> vector;
    ImageIcon icon = new ImageIcon("plane/myplane.png");
    public BulletAI ba;

    public void setmove(int x, int y, JFrame frame) {
        this.x = x;
        this.y = y;
        this.frame = frame;
    }

    public MovePlaneListener() {
        vector = new Vector<Bullet>();

    }

    public void keyPressed(KeyEvent e) {

        switch (e.getKeyCode()) {

        case 87: //W-> 上
            if (y > 0) {

                y = y - 3;
                up = true;
            }

            break;
        case 65: //A-> 左
            if (x > 0) {
                x = x - 3;
                left = true;
            }
            break;
        case 83: //S-> 下

            if (y + icon.getIconHeight() < frame.getHeight()) {
                y = y + 3;
                down = true;
            }
            break;
        case 68: //D-> 右

            if (x + icon.getIconWidth() < frame.getWidth()) {
                x = x + 3;
                right = true;
            }

            break;

        case 32: // 空格->发射子弹

            Bullet bu = new Bullet(vector, frame, x, y, vy);
            vector.add(bu);
            ba = new BulletAI(vector, frame, x, y, vy);
            if (flag == 0) {
                ba.start();
                flag = 1;
            }

            break;
        }

        if (x > 0 && y > 0 && x + icon.getIconWidth() < frame.getWidth()
                && y + icon.getIconHeight() < frame.getHeight())

        {
            if (left == true && up == true) {
                x = x - 3;
                y = y - 3;
            } else if (left == true && down == true) {
                x = x - 3;
                y = y + 3;
            } else if (right == true && up == true) {
                x = x + 3;
                y = y - 3;
            } else if (right == true && down == true) {
                x = x + 3;
                y = y + 3;
            }
        }
        // System.out.println(x + ">>>>>" + y);
        //窗体重绘
        frame.repaint();

    }

    public void keyReleased(KeyEvent e) {
        switch (e.getKeyCode()) {
        case 87: // 上
            up = false;
            break;

        case 65: // 左

            left = false;
            break;

        case 83: // 下

            down = false;
            break;

        case 68: // 右

            right = false;
            break;
        }
    }
}

之后就是关于子弹的发射,这里的处理方法和我的上一篇文章差不多,通过新建一个子弹类,每生成一个子弹后就将其添加到vector向量里,然后利用线程不断的改变子弹的坐标。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java Guava异步编程实践

    Java Guava异步编程实践

    今天咱们要聊的是Guava在异步编程中的应用,让我们搞清楚为什么要用Guava来处理异步任务,在Java的世界里,异步编程是个老话题了,但它依旧非常关键,它能让咱们的应用更高效,尤其是在处理那些耗时的I/O操作
    2023-12-12
  • IDEA中WebService生成Java代码并调用外部接口实现代码

    IDEA中WebService生成Java代码并调用外部接口实现代码

    这篇文章主要介绍了IDEA中WebService生成Java代码并调用外部接口实现,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Springboot 启动之后初始化资源的几种方法

    Springboot 启动之后初始化资源的几种方法

    在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等,本文主要介绍了Springboot 启动之后初始化资源的几种方法,感兴趣的可以了解一下
    2024-01-01
  • Spring使用注解方式处理事务

    Spring使用注解方式处理事务

    这篇文章主要为大家详细介绍了Spring使用注解方式处理事务,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Java8 Zip 压缩与解压缩的实现

    Java8 Zip 压缩与解压缩的实现

    这篇文章主要介绍了Java8 Zip 压缩与解压缩的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 为什么Spring官方推荐的@Transational还能导致生产事故

    为什么Spring官方推荐的@Transational还能导致生产事故

    在Spring中进行事务管理非常简单,只需要在方法上加上注解@Transactional,那么为什么Spring官方推荐的@Transational还能导致生产事故,本文就详细的介绍一下
    2021-11-11
  • java发送form-data请求实现文件上传的示例代码

    java发送form-data请求实现文件上传的示例代码

    最近做一个需求,需要请求第三方接口上传文件,该请求类型是form-data请求,本文就来介绍一下java发送form-data请求实现文件上传的示例代码,感兴趣的可以了解一下
    2023-12-12
  • Spring Boot + Kotlin整合MyBatis的方法教程

    Spring Boot + Kotlin整合MyBatis的方法教程

    前几天由于工作需要,便开始学习了kotlin,java基础扎实学起来也还算比较快,对于kotlin这个编程语言自然是比java有趣一些,下面这篇文章主要给大家介绍了关于Spring Boot + Kotlin整合MyBatis的方法教程,需要的朋友可以参考下。
    2018-01-01
  • java设计模式之工厂方法模式

    java设计模式之工厂方法模式

    这篇文章主要为大家详细介绍了java设计模式之工厂方法模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • 如何用Stream解决两层List属性求和问题

    如何用Stream解决两层List属性求和问题

    这篇文章主要介绍了如何用Stream解决两层List属性求和问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论