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向量里,然后利用线程不断的改变子弹的坐标。

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

相关文章

  • SpringBoot YAML语法基础详细整理

    SpringBoot YAML语法基础详细整理

    YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • 浅谈JVM之类的加载链接和初始化

    浅谈JVM之类的加载链接和初始化

    有了java class文件之后,为了让class文件转换成为JVM可以真正运行的结构,需要经历加载,链接和初始化的过程。这三个过程是怎么工作的呢?在本文中你将会找到答案。
    2021-06-06
  • SpringBoot项目打包三方JAR的示例代码

    SpringBoot项目打包三方JAR的示例代码

    本篇文章主要介绍了SpringBoot项目打包三方JAR的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • java数据库连接、查询、更新等

    java数据库连接、查询、更新等

    这篇文章主要介绍了java数据库连接、查询、更新等,需要的朋友可以参考下
    2018-05-05
  • Java日常练习题,每天进步一点点(14)

    Java日常练习题,每天进步一点点(14)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • 聊聊SpringCloud中的Ribbon进行服务调用的问题

    聊聊SpringCloud中的Ribbon进行服务调用的问题

    SpringCloud-Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。本文给大家介绍SpringCloud中的Ribbon进行服务调用的问题,感兴趣的朋友跟随小编一起看看吧
    2022-01-01
  • SpringBoot集成SpringMVC的方法示例

    SpringBoot集成SpringMVC的方法示例

    这篇文章主要介绍了SpringBoot集成SpringMVC的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • mybatis框架入门学习教程

    mybatis框架入门学习教程

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。这篇文章主要介绍了mybatis框架入门学习教程,需要的朋友可以参考下
    2017-02-02
  • springboot访问静态资源遇到的坑及解决

    springboot访问静态资源遇到的坑及解决

    这篇文章主要介绍了springboot访问静态资源遇到的坑及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 如何解决springboot启动的时候required a bean of type 'XXX' not be问题

    如何解决springboot启动的时候required a bean of ty

    Spring Boot启动失败,提示缺少`UserDao`类型的Bean,解决方案一:为`UserDao`接口添加`@Mapper`注解,重新启动;解决方案二:使用`@MapperScan`注解扫描Mapper接口所在的包
    2024-12-12

最新评论