Java实现简单的飞机大战游戏(控制主飞机篇)
作者:猫奴. 时间:2023-11-14 13:52:56
本文实例为大家分享了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
标签:java,飞机大战
0
投稿
猜你喜欢
关于Struts2文件上传与自定义拦截器
2021-10-31 12:52:44
Spring Security实现两周内自动登录"记住我"功能
2021-12-15 17:59:22
java简单工厂模式入门
2022-12-03 04:35:24
C#实现文本转语音功能
2021-07-07 20:20:54
WCF和Remoting之间的消息传输
2023-04-15 01:01:20
@Configuration与@Component作为配置类的区别详解
2023-03-09 19:50:15
java 对数和指数计算方式
2022-08-27 16:50:07
MyBatis全局映射文件实现原理解析
2021-06-21 17:01:29
BeanDefinitionRegistryPostProcessor如何动态注册Bean到Spring
2023-11-24 12:56:16
java使用Feign实现声明式Restful风格调用
2023-01-22 08:18:05
Java Web开发之基于Session的购物商店实现方法
2023-06-09 20:46:35
Android SQLite数据库增删改查操作的案例分析
2022-06-06 02:55:03
基于ThreadLocal 的用法及内存泄露(内存溢出)
2023-11-23 20:22:28
C#面向对象的23种设计模式介绍
2023-01-23 18:02:50
java ArrayList和Vector的区别详解
2023-03-08 14:47:05
详解基于MVC的数据查询模块进行模糊查询
2022-02-13 19:26:49
java基础的详细了解第三天
2023-10-05 23:47:04
深入理解Java中的final关键字_动力节点Java学院整理
2022-05-05 23:18:24
再谈异常处理try catch finally
2021-11-12 11:17:31
Android开发性能优化总结
2021-11-05 14:03:59