import java.awt.Color;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import javax.swing.*;
public class GameFrame extends JFrame {
public static boolean isGameOver = false;
public static final int SPEED = 6;
JPanel panel = new JPanel();
JLabel tank = new JLabel(new ImageIcon("4.png"));
int[] pos = new int[]{0,0, 1,0, 2,0, 3,0, 4,0, 5,0, 6,0, 7,0, 8,0, 9,0, 10,0, 0,1, 0,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 0,9, 0,10, 0,11, 0,12, 1,12, 2,12, 3,12, 4,12, 5,12, 6,12, 7,12, 8,12, 9,12, 10,12, 10,1, 10,2, 10,3, 10,4, 10,5, 10,6, 10,7, 10,8, 10,9, 10,10, 10,11, 10,12, 1,3, 2,3, 3,3, 4,3, 5,3, 6,3, 5,8, 6,8, 7,8, 8,8, 9,8, 10,8 ,11,8 };
JLabel[] walls = new JLabel[pos.length/2];
//记录上一次的方向按键(坦克的方向)
int lastKeyCode = KeyEvent.VK_UP;
//记录上一次发射子弹的时间
long lastShootTime = 0;
//记录动画
boolean aniFlag = true;
ImageIcon[] tankIcons = new ImageIcon[]{new ImageIcon("0.png"), new ImageIcon("1.png"), new ImageIcon("2.png"), new ImageIcon("3.png"), new ImageIcon("4.png"), new ImageIcon("5.png"), new ImageIcon("6.png"), new ImageIcon("7.png")};
JLabel[] enemies = new JLabel[8];
public GameFrame() {
this.setTitle("坦克大战欢迎您");
this.setIconImage(Toolkit.getDefaultToolkit().createImage("2.png"));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(200, 60, 535, 650);
this.setContentPane(panel);
panel.setLayout(null);
panel.setBackground(Color.black);
panel.add(tank);
tank.setBounds(240, 480, 48, 48);
for (int i = 0; i < walls.length; i++) {
walls[i] = new JLabel(new ImageIcon("wall.png"));
panel.add(walls[i]);
walls[i].setBounds(pos[i * 2] * 48, pos[i * 2 + 1] * 48, 48 , 48);
}
for (int i = 0; i < enemies.length; i++) {
enemies[i] = new JLabel(new ImageIcon("enemy.png"));
panel.add(enemies[i]);
enemies[i].setBounds((i+1) * 48, 48, 48 , 48);
EnemyThread et = new EnemyThread(enemies[i], this);
et.start();
}
this.setVisible(true);
this.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void keyPressed(KeyEvent e) {
int xSpeed = 0, ySpeed = 0;
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT :
lastKeyCode = e.getKeyCode();
if (tank.getX() - SPEED >= 0) {
xSpeed = -SPEED;
tank.setIcon(tankIcons[aniFlag?2:3]);
aniFlag=!aniFlag;
}
break;
case KeyEvent.VK_RIGHT :
lastKeyCode = e.getKeyCode();
if (tank.getX() + tank.getWidth() + SPEED<=panel.getWidth()) {
xSpeed = SPEED;
tank.setIcon(tankIcons[aniFlag?6:7]);
aniFlag=!aniFlag;
}
break;
case KeyEvent.VK_UP :
lastKeyCode = e.getKeyCode();
if (tank.getY() - SPEED>=0) {
ySpeed = -SPEED;
tank.setIcon(tankIcons[aniFlag?4:5]);
aniFlag=!aniFlag;
}
break;
case KeyEvent.VK_DOWN :
lastKeyCode = e.getKeyCode();
if (tank.getY() + tank.getHeight() + SPEED<=panel.getHeight()) {
ySpeed = SPEED;
tank.setIcon(tankIcons[aniFlag?0:1]);
aniFlag=!aniFlag;
}
break;
case KeyEvent.VK_SPACE :
if (System.currentTimeMillis() - lastShootTime < 1000) return;
lastShootTime = System.currentTimeMillis();
JLabel bullet = new JLabel();
panel.add(bullet);
switch (lastKeyCode) {
case KeyEvent.VK_LEFT:
bullet.setIcon(new ImageIcon("bulletLeft.png"));
bullet.setBounds(tank.getX() - 16, tank.getY() + 16, 16, 16);
break;
case KeyEvent.VK_RIGHT:
bullet.setIcon(new ImageIcon("bulletRight.png"));
bullet.setBounds(tank.getX() + tank.getWidth(), tank.getY() + 16, 16, 16);
break;
case KeyEvent.VK_UP:
bullet.setIcon(new ImageIcon("bulletUp.png"));
bullet.setBounds(tank.getX() + 16, tank.getY() - 16, 16, 16);
break;
case KeyEvent.VK_DOWN:
bullet.setIcon(new ImageIcon("bulletDown.png"));
bullet.setBounds(tank.getX() + 16, tank.getY() + tank.getHeight(), 16, 16);
break;
}
BulletThread thread = new BulletThread(bullet, GameFrame.this, lastKeyCode);
thread.start();
break;
default:
return;
}
tank.setBounds(tank.getX() + xSpeed, tank.getY() + ySpeed, tank.getWidth(), tank.getHeight());
//判断坦克是否撞墙
for (int i = 0; i < walls.length; i++) {
if (!walls[i].isVisible()) continue;
if (tank.getBounds().intersects(walls[i].getBounds())) {
tank.setBounds(tank.getX() - xSpeed, tank.getY() - ySpeed, tank.getWidth(), tank.getHeight());
}
}
}
});
}
public static void main(String[] args) {
new GameFrame();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Java 坦克大战 源代码 (127个子文件)
EnemyThread.class 4KB
GameFrame$1.class 3KB
GameFrame.class 3KB
BulletThread.class 2KB
EnemyBulletThread.class 2KB
Boom1Thread.class 1KB
Boom2Thread.class 1KB
.classpath 301B
GameFrame.java 5KB
EnemyThread.java 4KB
BulletThread.java 2KB
EnemyBulletThread.java 2KB
Boom2Thread.java 654B
Boom1Thread.java 654B
explosion2-63.png 32KB
explosion2-62.png 32KB
explosion2-61.png 31KB
explosion2-64.png 31KB
explosion2-60.png 30KB
explosion2-59.png 30KB
explosion2-58.png 29KB
explosion2-57.png 28KB
explosion1-14.png 27KB
explosion1-13.png 27KB
explosion2-56.png 27KB
explosion2-55.png 26KB
explosion2-65.png 26KB
explosion2-54.png 25KB
explosion1-12.png 25KB
explosion2-53.png 24KB
explosion2-52.png 23KB
explosion1-11.png 22KB
explosion2-51.png 22KB
explosion2-50.png 21KB
explosion2-49.png 20KB
explosion2-48.png 20KB
explosion1-10.png 19KB
explosion2-47.png 19KB
explosion2-46.png 18KB
explosion2-45.png 17KB
explosion1-9.png 17KB
explosion2-44.png 16KB
explosion1-15.png 16KB
explosion2-43.png 15KB
explosion2-42.png 15KB
explosion2-41.png 14KB
explosion1-8.png 14KB
explosion2-40.png 13KB
explosion2-39.png 13KB
explosion2-38.png 12KB
explosion2-37.png 11KB
explosion1-7.png 11KB
explosion2-36.png 11KB
explosion2-66.png 11KB
explosion2-35.png 10KB
explosion2-34.png 10KB
explosion2-33.png 9KB
explosion2-32.png 9KB
explosion1-6.png 9KB
explosion2-31.png 8KB
explosion2-30.png 8KB
explosion2-29.png 8KB
explosion2-28.png 7KB
explosion2-27.png 7KB
explosion2-67.png 6KB
explosion2-26.png 6KB
explosion1-5.png 6KB
explosion2-25.png 6KB
explosion2-24.png 6KB
explosion2-23.png 5KB
explosion2-22.png 5KB
wall.png 5KB
explosion2-21.png 5KB
explosion1-4.png 5KB
explosion2-20.png 4KB
explosion2-19.png 4KB
explosion2-18.png 4KB
explosion2-17.png 4KB
explosion1-3.png 3KB
explosion2-16.png 3KB
explosion2-15.png 3KB
explosion2-14.png 3KB
explosion2-13.png 3KB
explosion2-12.png 2KB
explosion1-2.png 2KB
explosion2-11.png 2KB
explosion2-10.png 2KB
explosion2-68.png 2KB
explosion2-9.png 2KB
explosion2-8.png 2KB
explosion2-7.png 2KB
explosion1-1.png 1KB
explosion2-6.png 1KB
0.png 1KB
4.png 1KB
enemy0.png 1KB
enemy4.png 1KB
5.png 1KB
enemy1.png 1KB
enemy5.png 1KB
共 127 条
- 1
- 2
资源评论
damaidoubean
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功