坦克大战游戏程序java
时间: 2023-06-22 15:18:56 浏览: 148
好的,我可以提供一些参考代码,帮助您实现一个简单的坦克大战游戏程序。
首先,您需要创建一个 Tank 类,表示游戏中的坦克。这个类需要有属性包括坦克的位置、方向、速度等等,以及方法包括移动、开火等等。以下是 Tank 类的代码示例:
```java
import java.awt.*;
public class Tank {
private int x, y; // 坦克位置
private int speed; // 坦克速度
private int direction; // 坦克方向
private Color color; // 坦克颜色
public Tank(int x, int y, int speed, int direction, Color color) {
this.x = x;
this.y = y;
this.speed = speed;
this.direction = direction;
this.color = color;
}
public void draw(Graphics g) { // 绘制坦克
g.setColor(color);
g.fillRect(x, y, 30, 30);
// 根据方向绘制炮筒
g.setColor(Color.BLACK);
if (direction == 0) { // 上
g.fillRect(x + 10, y, 10, 10);
} else if (direction == 1) { // 右
g.fillRect(x + 20, y + 10, 10, 10);
} else if (direction == 2) { // 下
g.fillRect(x + 10, y + 20, 10, 10);
} else { // 左
g.fillRect(x, y + 10, 10, 10);
}
}
public void move() { // 移动坦克
if (direction == 0) { // 上
y -= speed;
} else if (direction == 1) { // 右
x += speed;
} else if (direction == 2) { // 下
y += speed;
} else { // 左
x -= speed;
}
}
public Bullet fire() { // 发射子弹
int bulletX = x + 15;
int bulletY = y + 15;
return new Bullet(bulletX, bulletY, direction);
}
}
```
接下来,您需要创建一个 Bullet 类,表示坦克发射的子弹。这个类需要有属性包括子弹的位置、方向等等,以及方法包括移动等等。以下是 Bullet 类的代码示例:
```java
import java.awt.*;
public class Bullet {
private int x, y; // 子弹位置
private int speed; // 子弹速度
private int direction; // 子弹方向
public Bullet(int x, int y, int direction) {
this.x = x;
this.y = y;
this.speed = 5;
this.direction = direction;
}
public void draw(Graphics g) { // 绘制子弹
g.setColor(Color.RED);
g.fillRect(x, y, 5, 5);
}
public void move() { // 移动子弹
if (direction == 0) { // 上
y -= speed;
} else if (direction == 1) { // 右
x += speed;
} else if (direction == 2) { // 下
y += speed;
} else { // 左
x -= speed;
}
}
}
```
最后,您需要创建一个继承自 JFrame 的 TankWar 类,表示整个游戏的界面和逻辑。在这个类中,您需要创建坦克和子弹的实例,并实现键盘监听器,以便响应玩家的控制。以下是 TankWar 类的代码示例:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;
public class TankWar extends JFrame implements KeyListener {
private Tank myTank; // 玩家坦克
private List<Bullet> bullets; // 子弹列表
public TankWar() {
myTank = new Tank(100, 100, 5, 2, Color.BLUE); // 创建玩家坦克
bullets = new ArrayList<>(); // 创建子弹列表
this.setSize(800, 600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.addKeyListener(this);
}
public void paint(Graphics g) {
super.paint(g);
myTank.draw(g); // 绘制玩家坦克
// 绘制子弹
for (Bullet bullet : bullets) {
bullet.draw(g);
}
}
public static void main(String[] args) {
new TankWar();
}
@Override
public void keyPressed(KeyEvent e) { // 键盘按下事件
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_UP) { // 上键
myTank.direction = 0;
myTank.move();
} else if (keyCode == KeyEvent.VK_RIGHT) { // 右键
myTank.direction = 1;
myTank.move();
} else if (keyCode == KeyEvent.VK_DOWN) { // 下键
myTank.direction = 2;
myTank.move();
} else if (keyCode == KeyEvent.VK_LEFT) { // 左键
myTank.direction = 3;
myTank.move();
} else if (keyCode == KeyEvent.VK_SPACE) { // 空格键
bullets.add(myTank.fire());
}
repaint();
}
@Override
public void keyTyped(KeyEvent e) { }
@Override
public void keyReleased(KeyEvent e) { }
}
```
这些代码只是一个简单的示例,您可以根据自己的需求进行修改和扩展。希望这些代码能对您有所帮助!
阅读全文