package com.mashibing.tank;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;
/**
* @date 2020/4/17 - 9:27
*/
public class TankFrame extends Frame {
Tank myTank = new Tank(200, 400, Dir.DOWN,Group.GOOD,this);
List<Bullet> bullets = new ArrayList<>();
List<Tank> tanks = new ArrayList<>();
List<Explode> explodes = new ArrayList<>();
static final int GAME_WIDTH = 1080, GAME_HEIGHT = 735;
public TankFrame() {
// 窗口可见
this.setVisible(true);
//窗口大小
this.setSize(GAME_WIDTH, GAME_HEIGHT);
//窗口是否可以改变大小
this.setResizable(false);
this.setTitle(" trank war....");
// 添加键盘监听处理类
this.addKeyListener(new MyKeyListener());
// 添加窗口监听
this.addWindowListener(new WindowAdapter() {
@Override // 点红叉 关闭窗口
public void windowClosing(WindowEvent e) {
System.exit(0);// 系统退出
}
});
}
Image offScreenImage = null;
@Override // 双缓存 取消屏幕闪烁
public void update(Graphics g) {
if (offScreenImage == null) { // 图片定义到内存里面,画完了才一次性刷新到屏幕
offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT);
}
Graphics gOffScreen = offScreenImage.getGraphics();
Color c = gOffScreen.getColor();
gOffScreen.setColor(Color.BLACK);
gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);
gOffScreen.setColor(c);
paint(gOffScreen); // 调用paint方法把坦克和子弹画到内存里
g.drawImage(offScreenImage, 0, 0, null); // 最后调用系统画笔 把内存中的图片一次性画出来
}
// 如何画
@Override
public void paint(Graphics g) {
Color c = g.getColor();
g.setColor(Color.WHITE);
g.drawString("子弹的数量:" + bullets.size(), 10, 60);
g.drawString("敌方坦克的数量:" + tanks.size(), 10, 80);
g.drawString("爆炸的数量:" + explodes.size(), 10, 100);
g.setColor(c);
// 如果用foreach循环的话,在其他地方调用bullets集合的remove方法会报错
// ConcurrentModifyException 因为这种情况只能调用iterator迭代器的remove方法 不能调用集合的remove方法
myTank.paint(g);
// 画子弹
for (int i=0;i<bullets.size();i++) {
bullets.get(i).paint(g);
}
//画坦克
for (int i=0;i<tanks.size();i++) {
tanks.get(i).paint(g);
}
// 画爆炸
for (int i=0;i<explodes.size();i++) {
explodes.get(i).paint(g);
}
// 碰撞检测
for(int i=0;i<bullets.size();i++){
for (int j=0;j<tanks.size();j++){
bullets.get(i).collideWith(tanks.get(j));
}
}
}
class MyKeyListener extends KeyAdapter {
Boolean bL = false;
Boolean bR = false;
Boolean bU = false;
Boolean bD = false;
@Override // 键盘按下去
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode(); // 得到key按键的代码
switch (key) {
case KeyEvent.VK_LEFT:
bL = true;
break;
case KeyEvent.VK_UP:
bU = true;
break;
case KeyEvent.VK_RIGHT:
bR = true;
break;
case KeyEvent.VK_DOWN:
bD = true;
break;
default:
break;
}
setMainTankDir();
}
@Override //键盘抬起来
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode(); // 得到key按键的代码
switch (key) {
case KeyEvent.VK_LEFT:
bL = false;
break;
case KeyEvent.VK_UP:
bU = false;
break;
case KeyEvent.VK_RIGHT:
bR = false;
break;
case KeyEvent.VK_DOWN:
bD = false;
break;
case KeyEvent.VK_CONTROL:
myTank.fire();
break;
default:
break;
}
setMainTankDir();
}
private void setMainTankDir() {
if (!bL && !bR && !bU && !bD) {
myTank.setMoving(false);
} else {
myTank.setMoving(true);
if (bL) myTank.setDir(Dir.LEFT);
if (bU) myTank.setDir(Dir.UP);
if (bR) myTank.setDir(Dir.RIGHT);
if (bD) myTank.setDir(Dir.DOWN);
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java se写的坦克游戏.zip
共163个文件
java:90个
gif:43个
xml:9个
需积分: 3 0 下载量 166 浏览量
2023-12-01
16:48:23
上传
评论
收藏 11.5MB ZIP 举报
温馨提示
java se写的坦克游戏.zipjava se写的坦克游戏.zipjava se写的坦克游戏.zip java se写的坦克游戏.zipjava se写的坦克游戏.zipjava se写的坦克游戏.zip java se写的坦克游戏.zipjava se写的坦克游戏.zipjava se写的坦克游戏.zip java se写的坦克游戏.zipjava se写的坦克游戏.zipjava se写的坦克游戏.zip java se写的坦克游戏.zipjava se写的坦克游戏.zipjava se写的坦克游戏.zip java se写的坦克游戏.zipjava se写的坦克游戏.zipjava se写的坦克游戏.zip java se写的坦克游戏.zipjava se写的坦克游戏.zipjava se写的坦克游戏.zip java se写的坦克游戏.zipjava se写的坦克游戏.zipjava se写的坦克游戏.zip
资源推荐
资源详情
资源评论
收起资源包目录
java se写的坦克游戏.zip (163个子文件)
config 328B
config 104B
tankRU.gif 2KB
tankRD.gif 1KB
tankLU.gif 1KB
tankLD.gif 1KB
9.gif 1KB
e9.gif 1KB
e8.gif 1KB
e10.gif 1KB
8.gif 1KB
tankD.gif 1KB
tankU.gif 1KB
tankL.gif 1KB
e7.gif 1KB
tankR.gif 1KB
7.gif 1KB
e11.gif 1KB
6.gif 1KB
e6.gif 1KB
10.gif 1KB
5.gif 1KB
e12.gif 1KB
e5.gif 1KB
4.gif 1KB
e4.gif 1KB
3.gif 1KB
e13.gif 1022B
2.gif 936B
1.gif 868B
missileLD.gif 864B
missileRU.gif 863B
missileLU.gif 863B
missileRD.gif 861B
bulletD.gif 855B
bulletU.gif 852B
e3.gif 846B
bulletL.gif 839B
bulletR.gif 839B
0.gif 824B
e14.gif 814B
e2.gif 565B
e15.gif 460B
e1.gif 312B
e16.gif 280B
Trank.iml 1KB
TankFrame.java 5KB
Tank.java 4KB
Bullet.java 3KB
Audio.java 2KB
Computer.java 2KB
Tank.java 2KB
Tank.java 2KB
Main.java 2KB
ResourceMgr.java 2KB
Main.java 2KB
Main.java 2KB
Tank.java 2KB
Tank.java 1KB
Tank.java 1KB
Test.java 1KB
Test.java 1KB
Main.java 1KB
Test.java 1KB
BulletWallCollider.java 1KB
TankWallCollider.java 1KB
LinkedList_.java 1KB
LinkedList_.java 1KB
TestFrame.java 1KB
Tank.java 1KB
Test.java 1KB
ArrayList_.java 1KB
ArrayList_.java 1023B
FourFireStrategy.java 956B
Tank.java 946B
Main.java 940B
Tank.java 925B
Main.java 901B
ImageUtil.java 835B
Explode.java 809B
DefaultFireStrategy.java 802B
ColliderChain.java 801B
Main.java 799B
ImageTest.java 760B
LinkedList_.java 740B
LinkedList_.java 739B
TailDecorator.java 729B
TankTankCollider.java 723B
RectDecorator.java 711B
PropertyMgr.java 674B
Tank.java 654B
Main.java 608B
Main.java 607B
TimeProxy.java 601B
Main.java 541B
Main.java 540B
ArrayList_.java 524B
ArrayList_.java 524B
Main.java 521B
Main.java 490B
共 163 条
- 1
- 2
资源评论
土豆片片
- 粉丝: 1801
- 资源: 5647
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于.NETCore的仓库管理系统.zip
- (源码)基于SpringBoot和Vue的分布式配置管理系统.zip
- 地下水动力学真题,有需要的自行下载,考研真题
- (源码)基于JavaServlet的河北重大需求分析系统.zip
- (源码)基于Arduino的智能停车系统.zip
- 9a0f3e58cbb2b13855df377b794dc336.jpg
- (源码)基于SpringBoot和Vue的停车场管理系统.zip
- 中国地质大学(武汉)地理信息系统(GIS)考试试题整理.doc
- (源码)基于Redis的内存数据库管理系统.zip
- C#.NET酒店宾馆客房管理系统源码数据库 SQL2008源码类型 WinForm
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功