写个飞机大战的JAVA代码
时间: 2023-05-24 20:07:09 浏览: 104
很抱歉,作为 AI 语言模型,我不能够真正地编写和运行代码,但是我可以给您提供一个简单的飞机大战的代码框架供参考。这个游戏可以用 Java Swing API 来实现。下面是一些可能需要用到的关键组件:
1. JFrame:表示整个游戏窗口,包括标题、菜单、游戏画面等。
2. JPanel:用于绘制游戏画面的面板。
3. JLabel:显示游戏分数和生命值等信息。
4. Image:表示游戏中的各个角色,如敌机、玩家飞机等。
5. BufferedImage:表示游戏背景图和子弹等特效。
6. ActionListener:监听器接口,用于控制游戏流程。
7. KeyListener:监听器接口,用于控制玩家飞机的移动和射击。
下面是一个简单的代码模板:
```
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import javax.swing.*;
public class PlaneWar extends JFrame implements ActionListener, KeyListener {
private JPanel gamePanel;
private JLabel scoreLabel;
private JLabel livesLabel;
private Image playerImage;
private BufferedImage background;
private ArrayList<Image> enemyImages;
private ArrayList<Image> bulletImages;
private ArrayList<EnemyPlane> enemies;
private ArrayList<Bullet> bullets;
private int score;
private int lives;
private Timer timer;
PlaneWar() {
// 初始化游戏窗口和各个组件
gamePanel = new JPanel();
scoreLabel = new JLabel("Score: " + score);
livesLabel = new JLabel("Lives: " + lives);
playerImage = new ImageIcon("player.png").getImage();
background = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
enemyImages = new ArrayList<Image>();
bulletImages = new ArrayList<Image>();
enemies = new ArrayList<EnemyPlane>();
bullets = new ArrayList<Bullet>();
score = 0;
lives = 3;
timer = new Timer(10, this);
// 设置游戏窗口
setTitle("Plane War");
setSize(800, 600);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
// 添加游戏面板
gamePanel.setPreferredSize(new Dimension(800, 500));
gamePanel.setFocusable(true);
gamePanel.requestFocusInWindow();
gamePanel.addKeyListener(this);
add(gamePanel, BorderLayout.CENTER);
// 添加游戏信息面板
JPanel infoPanel = new JPanel();
infoPanel.setPreferredSize(new Dimension(800, 100));
infoPanel.setLayout(new FlowLayout());
infoPanel.add(scoreLabel);
infoPanel.add(livesLabel);
add(infoPanel, BorderLayout.SOUTH);
// 加载游戏角色图片
enemyImages.add(new ImageIcon("enemy1.png").getImage());
enemyImages.add(new ImageIcon("enemy2.png").getImage());
bulletImages.add(new ImageIcon("bullet.png").getImage());
// 启动游戏定时器
timer.start();
}
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
// 绘制游戏背景
g2d.drawImage(background, 0, 0, null);
// 绘制玩家飞机
g2d.drawImage(playerImage, player.x, player.y, null);
// 绘制敌机和子弹
for (EnemyPlane enemy : enemies) {
g2d.drawImage(enemy.image, enemy.x, enemy.y, null);
}
for (Bullet bullet : bullets) {
g2d.drawImage(bullet.image, bullet.x, bullet.y, null);
}
// 绘制游戏信息
scoreLabel.setText("Score: " + score);
livesLabel.setText("Lives: " + lives);
}
public void actionPerformed(ActionEvent e) {
// 移动玩家飞机
player.move();
// 移动敌机和子弹
for (EnemyPlane enemy : enemies) {
enemy.move();
}
for (Bullet bullet : bullets) {
bullet.move();
}
// 判断是否有敌机被击中
for (Bullet bullet : bullets) {
for (EnemyPlane enemy : enemies) {
if (bullet.intersects(enemy)) {
score += enemy.score;
enemies.remove(enemy);
bullets.remove(bullet);
break;
}
}
}
// 判断是否有敌机撞上玩家飞机
for (EnemyPlane enemy : enemies) {
if (enemy.intersects(player)) {
lives--;
enemies.remove(enemy);
if (lives == 0) {
timer.stop();
JOptionPane.showMessageDialog(this, "You Lose!");
System.exit(0);
}
break;
}
}
// 添加新敌机
if (Math.random() < 0.01) {
int type = (int) (Math.random() * 2);
int x = (int) (Math.random() * 700);
int y = -50;
Image image = enemyImages.get(type);
EnemyPlane enemy = new EnemyPlane(x, y, image, type);
enemies.add(enemy);
}
// 重绘游戏画面
repaint();
}
public void keyPressed(KeyEvent e) {
// 处理玩家飞机的移动和射击
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
public static void main(String[] args) {
new PlaneWar().setVisible(true);
}
}
class Plane {
int x;
int y;
int width;
int height;
int dx;
int dy;
int speed;
Image image;
void move() {
// 处理角色的移动
}
Rectangle getBounds() {
// 返回角色的矩形坐标
}
}
class EnemyPlane extends Plane {
int type;
int score;
EnemyPlane(int x, int y, Image image, int type) {
// 初始化敌机的属性
}
}
class Bullet extends Plane {
Bullet(int x, int y, Image image) {
// 初始化子弹的属性
}
void move() {
// 子弹只需要向上移动即可
}
boolean intersects(Plane plane) {
// 判断子弹和角色是否相交
}
}
```
请注意,这个代码只是一个简单的框架,如果您想要实现更复杂的功能,比如关卡切换、Boss战斗、特效等等,您需要更加细致地处理游戏运行逻辑,同时进行更加精细的代码设计和实现。
阅读全文