import java.util.ArrayList;
import java.awt.*;
import java.awt.event.*;
import java.util.List;
import javax.swing.JOptionPane;
public class TankClient extends Frame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
public static final int Fram_width = 800; // 静态全局窗口大小
public static final int Fram_length = 600;
public static boolean printable = true;
MenuBar jmb = null;
Menu jm1 = null, jm2 = null, jm3 = null, jm4 = null;
MenuItem jmi1 = null, jmi2 = null, jmi3 = null, jmi4 = null, jmi5 = null,
jmi6 = null, jmi7 = null, jmi8 = null, jmi9 = null;
Image screenImage = null;
Tank homeTank = new Tank(300, 560, true, Direction.STOP, this);// 实例化坦克
GetBlood blood = new GetBlood(); // 实例化生命
Home home = new Home(373, 545, this);// 实例化home
List<River> theRiver = new ArrayList<River>();
List<Tank> tanks = new ArrayList<Tank>();
List<BombTank> bombTanks = new ArrayList<BombTank>();
List<Bullets> bullets = new ArrayList<Bullets>();
List<Tree> trees = new ArrayList<Tree>();
List<CommonWall> homeWall = new ArrayList<CommonWall>(); // 实例化对象容器
List<CommonWall> otherWall = new ArrayList<CommonWall>();
List<MetalWall> metalWall = new ArrayList<MetalWall>();
public void update(Graphics g) {
screenImage = this.createImage(Fram_width, Fram_length);
Graphics gps = screenImage.getGraphics();
Color c = gps.getColor();
gps.setColor(Color.GRAY);
gps.fillRect(0, 0, Fram_width, Fram_length);
gps.setColor(c);
framPaint(gps);
g.drawImage(screenImage, 0, 0, null);
}
public void framPaint(Graphics g) {
Color c = g.getColor();
g.setColor(Color.green); // 设置字体显示属性
Font f1 = g.getFont();
g.setFont(new Font("TimesRoman", Font.BOLD, 20));
g.drawString("区域内还有敌方坦克: ", 200, 70);
g.setFont(new Font("TimesRoman", Font.ITALIC, 30));
g.drawString("" + tanks.size(), 400, 70);
g.setFont(new Font("TimesRoman", Font.BOLD, 20));
g.drawString("剩余生命值: ", 500, 70);
g.setFont(new Font("TimesRoman", Font.ITALIC, 30));
g.drawString("" + homeTank.getLife(), 650, 70);
g.setFont(f1);
if (tanks.size() == 0 && home.isLive() && homeTank.isLive()) {
Font f = g.getFont();
g.setFont(new Font("TimesRoman", Font.BOLD, 60)); // 判断是否赢得比赛
this.otherWall.clear();
g.drawString("你赢了! ", 310, 300);
g.setFont(f);
}
if (homeTank.isLive() == false) {
Font f = g.getFont();
g.setFont(new Font("TimesRoman", Font.BOLD, 40));
tanks.clear();
bullets.clear();
g.setFont(f);
}
g.setColor(c);
for (int i = 0; i < theRiver.size(); i++) { // 画出河流
River r = theRiver.get(i);
r.draw(g);
}
for (int i = 0; i < theRiver.size(); i++) {
River r = theRiver.get(i);
homeTank.collideRiver(r);
r.draw(g);
}
home.draw(g); // 画出home
homeTank.draw(g);// 画出自己家的坦克
homeTank.eat(blood);// 充满血--生命值
for (int i = 0; i < bullets.size(); i++) { // 对每一个子弹
Bullets m = bullets.get(i);
m.hitTanks(tanks); // 每一个子弹打到坦克上
m.hitTank(homeTank); // 每一个子弹打到自己家的坦克上时
m.hitHome(); // 每一个子弹打到家里是
for (int j = 0; j < metalWall.size(); j++) { // 每一个子弹打到金属墙上
MetalWall mw = metalWall.get(j);
m.hitWall(mw);
}
for (int j = 0; j < otherWall.size(); j++) {// 每一个子弹打到其他墙上
CommonWall w = otherWall.get(j);
m.hitWall(w);
}
for (int j = 0; j < homeWall.size(); j++) {// 每一个子弹打到家的墙上
CommonWall cw = homeWall.get(j);
m.hitWall(cw);
}
m.draw(g); // 画出效果图
}
for (int i = 0; i < tanks.size(); i++) {
Tank t = tanks.get(i); // 获得键值对的键
for (int j = 0; j < homeWall.size(); j++) {
CommonWall cw = homeWall.get(j);
t.collideWithWall(cw); // 每一个坦克撞到家里的墙时
cw.draw(g);
}
for (int j = 0; j < otherWall.size(); j++) { // 每一个坦克撞到家以外的墙
CommonWall cw = otherWall.get(j);
t.collideWithWall(cw);
cw.draw(g);
}
for (int j = 0; j < metalWall.size(); j++) { // 每一个坦克撞到金属墙
MetalWall mw = metalWall.get(j);
t.collideWithWall(mw);
mw.draw(g);
}
for (int j = 0; j < theRiver.size(); j++) {
River r = theRiver.get(j); // 每一个坦克撞到河流时
t.collideRiver(r);
r.draw(g);
// t.draw(g);
}
t.collideWithTanks(tanks); // 撞到自己的人
t.collideHome(home);
t.draw(g);
}
blood.draw(g);
for (int i = 0; i < trees.size(); i++) { // 画出trees
Tree tr = trees.get(i);
tr.draw(g);
}
for (int i = 0; i < bombTanks.size(); i++) { // 画出爆炸效果
BombTank bt = bombTanks.get(i);
bt.draw(g);
}
for (int i = 0; i < otherWall.size(); i++) { // 画出otherWall
CommonWall cw = otherWall.get(i);
cw.draw(g);
}
for (int i = 0; i < metalWall.size(); i++) { // 画出metalWall
MetalWall mw = metalWall.get(i);
mw.draw(g);
}
homeTank.collideWithTanks(tanks);
homeTank.collideHome(home);
for (int i = 0; i < metalWall.size(); i++) {// 撞到金属墙
MetalWall w = metalWall.get(i);
homeTank.collideWithWall(w);
w.draw(g);
}
for (int i = 0; i < otherWall.size(); i++) {
CommonWall cw = otherWall.get(i);
homeTank.collideWithWall(cw);
cw.draw(g);
}
for (int i = 0; i < homeWall.size(); i++) { // 家里的坦克撞到自己家
CommonWall w = homeWall.get(i);
homeTank.collideWithWall(w);
w.draw(g);
}
}
public TankClient() {
// printable = false;
// 创建菜单及菜单选项
jmb = new MenuBar();
jm1 = new Menu("游戏");
jm2 = new Menu("暂停/继续");
jm3 = new Menu("帮助");
jm4 = new Menu("游戏级别");
jm1.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体
jm2.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体
jm3.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体
jm4.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体
jmi1 = new MenuItem("开始新游戏");
jmi2 = new MenuItem("退出");
jmi3 = new MenuItem("暂停");
jmi4 = new MenuItem("继续");
jmi5 = new MenuItem("游戏说明");
jmi6 = new MenuItem("级别1");
jmi7 = new MenuItem("级别2");
jmi8 = new MenuItem("级别3");
jmi9 = new MenuItem("级别4");
jmi1.setFont(new Font("TimesRoman", Font.BOLD, 15));
jmi2.setFont(new Font("TimesRoman", Font.BOLD, 15));
jmi3.setFont(new Font("TimesRoman", Font.BOLD, 15));
jmi4.setFont(new Font("TimesRoman", Font.BOLD, 15));
jmi5.setFont(new Font("TimesRoman", Font.BOLD, 15));
jm1.add(jmi1);
jm1.add(jmi2);
jm2.add(jmi3);
jm2.add(jmi4);
jm3.add(jmi5);
jm4.add(jmi6);
jm4.add(jmi7);
jm4.add(jmi8);
jm4.add(jmi9);
jmb.add(jm1);
jmb.add(jm2);
jmb.add(jm4);
jmb.add(jm3);
jmi1.addActionListener(this);
jmi1.setActionCommand("NewGame");
jmi2.addActionListener(this);
jmi2.setActionCommand("Exit");
jmi3.addActionListener(this);
jmi3.setActionCommand("Stop");
jmi4.addActionListener(this);
jmi4.setActionCommand("Continue");
jmi5.addActionListener(this);
jmi5.setActionCommand("help");
jmi6.addActionListener(this);
jmi6.setActionCommand("level1");
jmi7.addActionListener(this);
jmi7.setActionCommand("level2");
jmi8.addActionListener(this);
jmi8.setActionCommand("level3");
jmi9.addActionListener(this);
jmi9.setActionCommand("level4");
this.setMenuBar(jmb);// 菜单Bar放到JFrame上
this.setVisible(true);
for (int i = 0; i < 10; i++) { // 家的格局
if (i < 4)
homeWall.add(new CommonWall(350, 580 - 21 * i, this));
else if (i < 7)
homeWall.add(new CommonWall(372 + 22 * (i - 4), 517, this));
else
homeWall.add(new CommonWall(416, 538 + (i - 7) * 21, this));
}
for (int i = 0; i < 32; i++) {
if (i < 16) {
otherWall.add(new CommonWall(
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
java Swing实现坦克大战采用面向对象思想 采用面向对象的思路,实现坦克大战,适合初学者,以及对面向对象有更深层次理解的开发者或者同学。 使用原生的java swing进行窗口式开发
资源推荐
资源详情
资源评论
收起资源包目录
tkdz.zip (98个子文件)
1.docx 1.32MB
Tk
bin
Tank$DrawBloodbBar.class 957B
Bullets.class 5KB
BombTank.class 2KB
Images
tankLU.gif 1KB
tankL.gif 1KB
bulletR.gif 839B
home.jpg 9KB
tree.gif 10KB
5.gif 1KB
bulletLU.gif 863B
2.gif 936B
1.gif 868B
8.gif 1KB
3.gif 1KB
bulletRD.gif 861B
6.gif 1KB
0.gif 824B
metalWall.gif 8KB
tankRU.gif 2KB
bulletLD.gif 864B
9.gif 1KB
bulletL.gif 839B
7.gif 1KB
tankD.gif 1KB
river.jpg 14KB
bulletD.gif 855B
4.gif 1KB
tankRD.gif 1KB
hp.png 2KB
bulletRU.gif 863B
tankLD.gif 1KB
commonWall.gif 8KB
tankR.gif 1KB
tankU.gif 1KB
screen.jpg 36KB
10.gif 1KB
bulletU.gif 852B
Direction.class 1022B
CommonWall.class 1KB
MetalWall.class 1KB
Tree.class 1KB
TankClient$1.class 621B
Tank.class 7KB
TankClient$PaintThread.class 875B
TankClient.class 12KB
TankClient$KeyMonitor.class 828B
River.class 2KB
Home.class 3KB
GetBlood.class 2KB
.settings
org.eclipse.ltk.core.refactoring.prefs 137B
src
CommonWall.java 762B
Images
tankLU.gif 1KB
tankL.gif 1KB
bulletR.gif 839B
home.jpg 9KB
tree.gif 10KB
5.gif 1KB
bulletLU.gif 863B
2.gif 936B
1.gif 868B
8.gif 1KB
3.gif 1KB
bulletRD.gif 861B
6.gif 1KB
0.gif 824B
metalWall.gif 8KB
tankRU.gif 2KB
bulletLD.gif 864B
9.gif 1KB
bulletL.gif 839B
7.gif 1KB
tankD.gif 1KB
river.jpg 14KB
bulletD.gif 855B
4.gif 1KB
tankRD.gif 1KB
hp.png 2KB
bulletRU.gif 863B
tankLD.gif 1KB
commonWall.gif 8KB
tankR.gif 1KB
tankU.gif 1KB
screen.jpg 36KB
10.gif 1KB
bulletU.gif 852B
MetalWall.java 846B
Bullets.java 4KB
TankClient.java 13KB
Tree.java 689B
Home.java 2KB
Direction.java 68B
BombTank.java 2KB
Tank.java 8KB
GetBlood.java 1KB
River.java 1KB
.project 384B
.classpath 232B
共 98 条
- 1
资源评论
飞翔的佩奇
- 粉丝: 3731
- 资源: 822
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功