软件编程
位置:首页>> 软件编程>> java编程>> Java实现简单的飞机大战游戏(控制主飞机篇)

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

作者:猫奴.  发布时间:2023-11-14 13:52:56 

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

来源:https://blog.csdn.net/weixin_42331530/article/details/89393890

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com