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

Psyche ·
更新时间:2024-09-21
· 817 次阅读

本文实例为大家分享了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 飞机大战

需要 登录 后方可回复, 如果你还没有账号请 注册新账号