您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
飞机小游戏是一种经典的2D射击游戏,玩家通过控制飞机躲避敌机并发射子弹消灭敌人。本文将介绍如何使用Java语言实现一个简单的飞机小游戏。我们将使用Java的Swing库来创建图形用户界面(GUI),并通过多线程技术实现游戏的动态效果。
首先,我们需要创建一个游戏窗口,使用JFrame
类来实现。
import javax.swing.JFrame;
public class GameWindow extends JFrame {
public GameWindow() {
setTitle("飞机小游戏");
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
}
public static void main(String[] args) {
GameWindow window = new GameWindow();
window.setVisible(true);
}
}
接下来,我们创建一个JPanel
作为游戏的主面板,并在其中绘制游戏元素。
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class GamePanel extends JPanel implements KeyListener {
private PlayerPlane playerPlane;
public GamePanel() {
playerPlane = new PlayerPlane(400, 500);
addKeyListener(this);
setFocusable(true);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
playerPlane.draw(g);
}
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {
playerPlane.move(e.getKeyCode());
repaint();
}
@Override
public void keyReleased(KeyEvent e) {}
}
玩家飞机类负责飞机的绘制和移动。
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
public class PlayerPlane {
private int x, y;
private Image image;
public PlayerPlane(int x, int y) {
this.x = x;
this.y = y;
image = new ImageIcon("player_plane.png").getImage();
}
public void draw(Graphics g) {
g.drawImage(image, x, y, null);
}
public void move(int keyCode) {
switch (keyCode) {
case KeyEvent.VK_LEFT:
x -= 5;
break;
case KeyEvent.VK_RIGHT:
x += 5;
break;
case KeyEvent.VK_UP:
y -= 5;
break;
case KeyEvent.VK_DOWN:
y += 5;
break;
}
}
}
接下来,我们需要添加敌机和子弹的逻辑。敌机从屏幕上方随机出现,并向下移动。玩家飞机可以发射子弹,子弹向上移动并检测是否击中敌机。
import java.util.ArrayList;
import java.util.List;
public class GamePanel extends JPanel implements KeyListener, Runnable {
private PlayerPlane playerPlane;
private List<EnemyPlane> enemyPlanes;
private List<Bullet> bullets;
private Thread gameThread;
public GamePanel() {
playerPlane = new PlayerPlane(400, 500);
enemyPlanes = new ArrayList<>();
bullets = new ArrayList<>();
addKeyListener(this);
setFocusable(true);
gameThread = new Thread(this);
gameThread.start();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
playerPlane.draw(g);
for (EnemyPlane enemy : enemyPlanes) {
enemy.draw(g);
}
for (Bullet bullet : bullets) {
bullet.draw(g);
}
}
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {
playerPlane.move(e.getKeyCode());
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
bullets.add(new Bullet(playerPlane.getX() + 25, playerPlane.getY()));
}
repaint();
}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void run() {
while (true) {
// 生成敌机
if (Math.random() < 0.02) {
enemyPlanes.add(new EnemyPlane((int) (Math.random() * 800), 0));
}
// 移动敌机
for (EnemyPlane enemy : enemyPlanes) {
enemy.move();
}
// 移动子弹
for (Bullet bullet : bullets) {
bullet.move();
}
// 检测碰撞
checkCollisions();
repaint();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void checkCollisions() {
// 检测子弹与敌机的碰撞
for (Bullet bullet : bullets) {
for (EnemyPlane enemy : enemyPlanes) {
if (bullet.getX() > enemy.getX() && bullet.getX() < enemy.getX() + 50 &&
bullet.getY() > enemy.getY() && bullet.getY() < enemy.getY() + 50) {
enemyPlanes.remove(enemy);
bullets.remove(bullet);
break;
}
}
}
// 检测玩家飞机与敌机的碰撞
for (EnemyPlane enemy : enemyPlanes) {
if (playerPlane.getX() > enemy.getX() && playerPlane.getX() < enemy.getX() + 50 &&
playerPlane.getY() > enemy.getY() && playerPlane.getY() < enemy.getY() + 50) {
// 游戏结束
System.exit(0);
}
}
}
}
敌机和子弹类分别负责敌机和子弹的绘制和移动。
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
public class EnemyPlane {
private int x, y;
private Image image;
public EnemyPlane(int x, int y) {
this.x = x;
this.y = y;
image = new ImageIcon("enemy_plane.png").getImage();
}
public void draw(Graphics g) {
g.drawImage(image, x, y, null);
}
public void move() {
y += 3;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
public class Bullet {
private int x, y;
private Image image;
public Bullet(int x, int y) {
this.x = x;
this.y = y;
image = new ImageIcon("bullet.png").getImage();
}
public void draw(Graphics g) {
g.drawImage(image, x, y, null);
}
public void move() {
y -= 5;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
通过以上步骤,我们实现了一个简单的飞机小游戏。玩家可以通过键盘控制飞机的移动,并发射子弹消灭敌机。游戏通过多线程技术实现了动态效果,并检测了子弹与敌机、玩家飞机与敌机的碰撞。
这个游戏还可以进一步扩展,例如增加更多的敌机类型、添加背景音乐、实现计分系统等。希望本文能够帮助你理解如何使用Java实现一个简单的2D游戏。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。