package com.bjsxt.tank;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Tank {
public static final int XSPEED = 5;
public static final int YSPEED = 5;
public static final int WIDTH = 30;
public static final int HEIGHT = 30;
private boolean live = true;
private BloodBar bb = new BloodBar();
private int life = 100;
TankClient tc;
private boolean good;
private int x, y;
private int oldX, oldY;
private static Random r = new Random();
private boolean bL=false, bU=false, bR=false, bD = false;
enum Direction {L, LU, U, RU, R, RD, D, LD, STOP};
private Direction dir = Direction.STOP;
private Direction ptDir = Direction.D;
private int step = r.nextInt(12) + 3;
public Tank(int x, int y, boolean good) {
this.x = x;
this.y = y;
this.oldX = x;
this.oldY = y;
this.good = good;
}
public Tank(int x, int y, boolean good, Direction dir, TankClient tc) {
this(x, y, good);
this.dir = dir;
this.tc = tc;
}
public void draw(Graphics g) {
if(!live) {
if(!good) {
tc.tanks.remove(this);
}
return;
}
Color c = g.getColor();
if(good) g.setColor(Color.RED);
else g.setColor(Color.BLUE);
g.fillOval(x, y, WIDTH, HEIGHT);
g.setColor(c);
if(good) bb.draw(g);
switch(ptDir) {
case L:
g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x, y + Tank.HEIGHT/2);
break;
case LU:
g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x, y);
break;
case U:
g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH/2, y);
break;
case RU:
g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH, y);
break;
case R:
g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH, y + Tank.HEIGHT/2);
break;
case RD:
g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH, y + Tank.HEIGHT);
break;
case D:
g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x + Tank.WIDTH/2, y + Tank.HEIGHT);
break;
case LD:
g.drawLine(x + Tank.WIDTH/2, y + Tank.HEIGHT/2, x, y + Tank.HEIGHT);
break;
}
move();
}
void move() {
this.oldX = x;
this.oldY = y;
switch(dir) {
case L:
x -= XSPEED;
break;
case LU:
x -= XSPEED;
y -= YSPEED;
break;
case U:
y -= YSPEED;
break;
case RU:
x += XSPEED;
y -= YSPEED;
break;
case R:
x += XSPEED;
break;
case RD:
x += XSPEED;
y += YSPEED;
break;
case D:
y += YSPEED;
break;
case LD:
x -= XSPEED;
y += YSPEED;
break;
case STOP:
break;
}
if(this.dir != Direction.STOP) {
this.ptDir = this.dir;
}
if(x < 0) x = 0;
if(y < 30) y = 30;
if(x + Tank.WIDTH > TankClient.GAME_WIDTH) x = TankClient.GAME_WIDTH - Tank.WIDTH;
if(y + Tank.HEIGHT > TankClient.GAME_HEIGHT) y = TankClient.GAME_HEIGHT - Tank.HEIGHT;
if(!good) {
Direction[] dirs = Direction.values();
if(step == 0) {
step = r.nextInt(12) + 3;
int rn = r.nextInt(dirs.length);
dir = dirs[rn];
}
step --;
if(r.nextInt(40) > 38) this.fire();
}
}
private void stay() {
x = oldX;
y = oldY;
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch(key) {
case KeyEvent.VK_F2 :
if(!this.live) {
this.live = true;
this.life = 100;
}
break;
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;
}
locateDirection();
}
void locateDirection() {
if(bL && !bU && !bR && !bD) dir = Direction.L;
else if(bL && bU && !bR && !bD) dir = Direction.LU;
else if(!bL && bU && !bR && !bD) dir = Direction.U;
else if(!bL && bU && bR && !bD) dir = Direction.RU;
else if(!bL && !bU && bR && !bD) dir = Direction.R;
else if(!bL && !bU && bR && bD) dir = Direction.RD;
else if(!bL && !bU && !bR && bD) dir = Direction.D;
else if(bL && !bU && !bR && bD) dir = Direction.LD;
else if(!bL && !bU && !bR && !bD) dir = Direction.STOP;
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
switch(key) {
case KeyEvent.VK_CONTROL:
fire();
break;
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_A :
superFire();
break;
}
locateDirection();
}
public Missile fire() {
if(!live) return null;
int x = this.x + Tank.WIDTH/2 - Missile.WIDTH/2;
int y = this.y + Tank.HEIGHT/2 - Missile.HEIGHT/2;
Missile m = new Missile(x, y, good, ptDir, this.tc);
tc.missiles.add(m);
return m;
}
public Missile fire(Direction dir) {
if(!live) return null;
int x = this.x + Tank.WIDTH/2 - Missile.WIDTH/2;
int y = this.y + Tank.HEIGHT/2 - Missile.HEIGHT/2;
Missile m = new Missile(x, y, good, dir, this.tc);
tc.missiles.add(m);
return m;
}
public Rectangle getRect() {
return new Rectangle(x, y, WIDTH, HEIGHT);
}
public boolean isLive() {
return live;
}
public void setLive(boolean live) {
this.live = live;
}
public boolean isGood() {
return good;
}
/**
* 撞墙
* @param w 被撞的墙
* @return 撞上了返回true,否则false
*/
public boolean collidesWithWall(Wall w) {
if(this.live && this.getRect().intersects(w.getRect())) {
this.stay();
return true;
}
return false;
}
public boolean collidesWithTanks(java.util.List<Tank> tanks) {
for(int i=0; i<tanks.size(); i++) {
Tank t = tanks.get(i);
if(this != t) {
if(this.live && t.isLive() && this.getRect().intersects(t.getRect())) {
this.stay();
t.stay();
return true;
}
}
}
return false;
}
private void superFire() {
Direction[] dirs = Direction.values();
for(int i=0; i<8; i++) {
fire(dirs[i]);
}
}
public int getLife() {
return life;
}
public void setLife(int life) {
this.life = life;
}
private class BloodBar {
public void draw(Graphics g) {
Color c = g.getColor();
g.setColor(Color.RED);
g.drawRect(x, y-10, WIDTH, 10);
int w = WIDTH * life/100 ;
g.fillRect(x, y-10, w, 10);
g.setColor(c);
}
}
public boolean eat(Blood b) {
if(this.live && b.isLive() && this.getRect().intersects(b.getRect())) {
this.life = 100;
b.setLive(false);
return true;
}
return false;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Java实战 坦克大战源代码,将Java中一些主要知识点连接起来
共401个文件
class:208个
java:89个
html:42个
需积分: 15 3 下载量 131 浏览量
2010-04-15
20:54:48
上传
评论
收藏 388KB RAR 举报
温馨提示
坦克大战制作的全过程,包括不同的版本,从低到高循序渐进教你敲代码!
资源推荐
资源详情
资源评论
收起资源包目录
Java实战 坦克大战源代码,将Java中一些主要知识点连接起来 (401个子文件)
Tank.class 7KB
Tank.class 7KB
Tank.class 7KB
Tank.class 6KB
Tank.class 6KB
Tank.class 6KB
Tank.class 5KB
Tank.class 5KB
TankClient.class 5KB
Tank.class 5KB
Tank.class 4KB
Tank.class 4KB
Tank.class 4KB
TankClient.class 4KB
Tank.class 4KB
Tank.class 4KB
Tank.class 4KB
TankClient.class 4KB
TankClient.class 4KB
Missile.class 4KB
TankClient.class 4KB
TankClient.class 4KB
Tank.class 4KB
Tank.class 4KB
TankClient.class 4KB
Missile.class 4KB
Missile.class 4KB
Missile.class 4KB
TankClient.class 4KB
Missile.class 3KB
Missile.class 3KB
Missile.class 3KB
TankClient.class 3KB
Tank.class 3KB
Missile.class 3KB
Tank.class 3KB
Missile.class 3KB
Tank.class 3KB
TankClient.class 3KB
TankClient.class 3KB
Missile.class 3KB
Tank.class 3KB
Tank.class 3KB
TankClient.class 3KB
TankClient.class 3KB
TankClient.class 3KB
Missile.class 3KB
TankWar.class 3KB
TankClient.class 3KB
Tank.class 3KB
TankClient.class 2KB
TankClient.class 2KB
TankClient.class 2KB
TankClient.class 2KB
Missile.class 2KB
Missile.class 2KB
Missle.class 2KB
Missile.class 2KB
TankClient.class 2KB
TankClient.class 2KB
TankClient.class 2KB
TankClient.class 2KB
TankClient.class 2KB
TankClient.class 2KB
TankClient.class 2KB
Missile.class 2KB
Missile.class 2KB
Missile.class 2KB
Missile.class 2KB
Missile.class 2KB
Blood.class 2KB
TankClient.class 2KB
Blood.class 2KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
TankClient.class 1KB
Missile.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Tank$Direction.class 1KB
Explode.class 1KB
Explode.class 1KB
共 401 条
- 1
- 2
- 3
- 4
- 5
资源评论
高成珍
- 粉丝: 2w+
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Javascript和Python的微商城项目设计源码 - MicroMall
- 基于Java的网上订餐系统设计源码 - online ordering system
- 基于Javascript的超级美眉网络资源管理应用模块设计源码
- 基于Typescript和PHP的编程知识储备库设计源码 - study-php
- Screenshot_2024-05-28-11-40-58-177_com.tencent.mm.jpg
- 基于Dart的Flutter小提琴调音器APP设计源码 - violinhelper
- 基于JavaScript和CSS的随寻订购网页设计源码 - web-order
- 基于MATLAB的声纹识别系统设计源码 - VoiceprintRecognition
- 基于Java的微服务插件集合设计源码 - wsy-plugins
- 基于Vue和微信小程序的监理日志系统设计源码 - supervisionLog
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功