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
投稿
猜你喜欢
- 废话开篇:iOS与android在实现列表界面的时候是有重用机制的,目的就是减少内存开销,用时间换空间。个人感觉flutter并没有特别强调
- Memento定义:memento是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到原先保存的状态。Memento模式相
- 1.概述在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适。很多项目都会封装规定好本身项目的接口规范,所以大多数需要
- 功能函数// 图像旋转void Rotate(const cv::Mat &srcImage, cv::Mat &dstIm
- 本文实例为大家分享了C语言实现两个矩阵相乘的具体代码,供大家参考,具体内容如下程序功能:实现两个矩阵相乘的C语言程序,并将其输出代码如下:#
- 应用场景有些时候项目中会用到很多路径,并且很可能多个路径在同一个根目录下,那为了方便配置的修改,达到只修改根目录即可达到一改全改的效果,此时
- 报错翻译: compileSdkVersion android-24”需要JDK 1.8或更高版本编译。报错现象如下图:原因:st
- Spring Cache抽象-使用SpEL表达式概述在Spring Cache注解属性中(比如key,condition和unless),S
- 今天下了个新浪微博的API研究研究,目前实现了发布微博功能,包括带图片的微博。为了安全,新浪微博的API中并没有提供用微博帐号密码登录的功能
- 第一步:后端简单建个SpringBoot项目,提供一个 helloWorld接口;版本选用 2.2.6.RELEASEpackage com
- 本文实例讲述了java实现单词搜索迷宫游戏。分享给大家供大家参考。具体分析如下:我们在杂志上,经常能够看到找单词的小游戏,在一个二维表格中,
- 本文实例为大家分享了C语言自定义扫雷游戏的具体代码,供大家参考,具体内容如下实现过程对于用C语言实现扫雷游戏得实现,可将游戏过程分为两个板块
- 一般都在windows下开发的,现在部署到linux下:1,将项目达成war包(用eclipse,项目右键-->Export-->
- 概述:Flutter 标签类控件大全ChipFlutter内置了多个标签类控件,但本质上它们都是同一个控件,只不过是属性参数不同而已,在学习
- 合成聚合复用原则合成复用原则又称为组合/聚合复用原则(Composition/Aggregate Reuse Principle, CARP
- 话不多说,下面来直接看示例代码具体代码:DayOfWeek4Birthday.javapackage com.gua;import java
- 1.map遍历快速实现边距,文字自适应改变大小Container( // padding: EdgeI
- 前言:封装、继承和多态是面向对象编程的三大特征。1.封装1.1.封装概念封装就是把抽象出的数据(属性)和对数据的操作(方法)封装在一起,数据
- 方案一: 采用reflections 框架(此框架依赖com.google.guava)1、reflections框架地址:https://
- 这篇文章主要介绍了java多线程加锁以及Condition类的使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参