用java代码写一个飞机大战
时间: 2023-12-29 20:19:31 浏览: 86
好的,以下是一个简单的飞机大战的Java代码:
```java
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class PlaneWar extends JFrame {
private int frameWidth = 400;
private int frameHeight = 650;
private int score = 0; // 得分
private BufferedImage background; // 背景图片
private BufferedImage bulletImage; // 子弹图片
private BufferedImage enemyImage; // 敌机图片
private BufferedImage heroImage; // 英雄机图片
private MyPanel myPanel; // 游戏面板
public static void main(String[] args) {
new PlaneWar();
}
public PlaneWar() {
try {
background = ImageIO.read(new File("background.png"));
bulletImage = ImageIO.read(new File("bullet.png"));
enemyImage = ImageIO.read(new File("enemy.png"));
heroImage = ImageIO.read(new File("hero.png"));
} catch (IOException e) {
e.printStackTrace();
}
myPanel = new MyPanel();
this.add(myPanel);
this.setTitle("Plane War");
this.setSize(frameWidth, frameHeight);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
class MyPanel extends JPanel implements Runnable {
private int heroX = 160; // 英雄机的横坐标
private int heroY = 500; // 英雄机的纵坐标
private int bulletX = -10; // 子弹的横坐标
private int bulletY = -10; // 子弹的纵坐标
private int enemyX = (int) (Math.random() * 300); // 敌机的横坐标
private int enemyY = 0; // 敌机的纵坐标
private int enemySpeed = 1; // 敌机的速度
private boolean isHit = false; // 是否击中敌机
private boolean isOver = false; // 是否结束游戏
public MyPanel() {
this.setFocusable(true);
this.requestFocusInWindow();
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
if (heroX >= 10) {
heroX -= 10;
}
break;
case KeyEvent.VK_RIGHT:
if (heroX <= 310) {
heroX += 10;
}
break;
case KeyEvent.VK_SPACE:
if (bulletY <= 0) {
bulletX = heroX + 30;
bulletY = heroY - 20;
}
break;
}
}
});
}
public void paint(Graphics g) {
g.drawImage(background, 0, 0, null);
if (!isOver) {
g.drawImage(heroImage, heroX, heroY, null);
if (bulletY > 0) {
g.drawImage(bulletImage, bulletX, bulletY, null);
bulletY -= 10;
}
if (!isHit) {
g.drawImage(enemyImage, enemyX, enemyY, null);
enemyY += enemySpeed;
if (enemyY > 650) {
enemyX = (int) (Math.random() * 300);
enemyY = 0;
}
}
if (bulletX >= enemyX && bulletX <= enemyX + 50 && bulletY >= enemyY && bulletY <= enemyY + 50) {
score += 10;
isHit = true;
enemySpeed += 1;
}
if (enemyY >= heroY - 50 && enemyY <= heroY + 50 && enemyX >= heroX - 50 && enemyX <= heroX + 50) {
isOver = true;
}
g.setColor(Color.WHITE);
g.drawString("Score: " + score, 10, 20);
} else {
g.setColor(Color.RED);
g.setFont(new Font("Arial", Font.BOLD, 30));
g.drawString("Game Over!", 120, 300);
}
}
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.repaint();
}
}
}
}
```
这个游戏中,玩家可以通过方向键控制英雄机的移动,按下空格键发射子弹。敌机从上方飞来,玩家需要尽可能地击落敌机并躲避敌机的攻击。游戏结束条件是敌机与英雄机相撞。
阅读全文
相关推荐















