Java打飞机小游戏代码
时间: 2023-11-10 15:05:48 浏览: 143
UstbQQServer,java小游戏源码,java打飞机
以下是一个简单的 Java 打飞机小游戏的代码,仅供参考。
```java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PlaneGame extends JPanel implements KeyListener, Runnable {
private static final long serialVersionUID = 1L;
// 飞机图片
private Image planeImg;
// 子弹图片
private Image bulletImg;
// 敌机图片
private Image enemyImg;
// 背景图片
private Image bgImg;
// 飞机的初始位置
private int planeX = 250;
private int planeY = 500;
// 子弹列表
private ArrayList<Bullet> bullets = new ArrayList<Bullet>();
// 敌机列表
private ArrayList<Enemy> enemies = new ArrayList<Enemy>();
// 分数
private int score = 0;
// 游戏是否结束
private boolean gameOver = false;
public PlaneGame() {
// 加载图片资源
planeImg = Toolkit.getDefaultToolkit().getImage("plane.png");
bulletImg = Toolkit.getDefaultToolkit().getImage("bullet.png");
enemyImg = Toolkit.getDefaultToolkit().getImage("enemy.png");
bgImg = Toolkit.getDefaultToolkit().getImage("bg.jpg");
// 添加键盘监听器
this.addKeyListener(this);
// 设置焦点
this.setFocusable(true);
}
public void paint(Graphics g) {
// 绘制背景
g.drawImage(bgImg, 0, 0, null);
// 绘制飞机
g.drawImage(planeImg, planeX, planeY, null);
// 绘制子弹
for (Bullet bullet : bullets) {
g.drawImage(bulletImg, bullet.getX(), bullet.getY(), null);
}
// 绘制敌机
for (Enemy enemy : enemies) {
g.drawImage(enemyImg, enemy.getX(), enemy.getY(), null);
}
// 绘制分数
g.setColor(Color.WHITE);
g.drawString("Score: " + score, 10, 20);
// 绘制游戏结束提示
if (gameOver) {
g.drawString("Game Over!", 250, 250);
}
}
public void keyPressed(KeyEvent e) {
// 按下空格键发射子弹
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
Bullet bullet = new Bullet(planeX + 25, planeY - 20);
bullets.add(bullet);
}
// 移动飞机
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
planeX -= 10;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
planeX += 10;
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
public void run() {
while (!gameOver) {
try {
// 生成敌机
Random random = new Random();
if (random.nextInt(10) > 8) {
Enemy enemy = new Enemy(random.nextInt(500), 0);
enemies.add(enemy);
}
// 移动子弹
for (Bullet bullet : bullets) {
bullet.move();
}
// 移动敌机
for (Enemy enemy : enemies) {
enemy.move();
}
// 判断子弹是否击中敌机
for (Bullet bullet : bullets) {
for (Enemy enemy : enemies) {
if (bullet.hit(enemy)) {
score += 10;
bullets.remove(bullet);
enemies.remove(enemy);
}
}
}
// 判断敌机是否撞击飞机
for (Enemy enemy : enemies) {
if (enemy.hit(planeX, planeY)) {
gameOver = true;
}
}
// 重绘
repaint();
// 线程休眠
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("飞机大战");
PlaneGame game = new PlaneGame();
frame.add(game);
frame.setSize(600, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
new Thread(game).start();
}
}
class Bullet {
private int x;
private int y;
public Bullet(int x, int y) {
this.x = x;
this.y = y;
}
public void move() {
y -= 5;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public boolean hit(Enemy enemy) {
if (x > enemy.getX() && x < enemy.getX() + 50 && y > enemy.getY() && y < enemy.getY() + 50) {
return true;
}
return false;
}
}
class Enemy {
private int x;
private int y;
public Enemy(int x, int y) {
this.x = x;
this.y = y;
}
public void move() {
y += 2;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public boolean hit(int planeX, int planeY) {
if (planeX > x && planeX < x + 50 && planeY > y && planeY < y + 50) {
return true;
}
return false;
}
}
```
在运行代码之前,请确保有以下图片文件:
- plane.png
- bullet.png
- enemy.png
- bg.jpg
将这些图片文件放在与代码相同的目录下。
阅读全文