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

网友投稿 301 2022-07-31


本文实例为大家分享了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 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();

}

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 - 3http://;

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中lock和tryLock及lockInterruptibly的区别(lock.lockInterruptibly())
下一篇:SpringBoot中集成企业微信机器人实现运维报警的示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~