基本信息
源码名称:坦克大战-单机小游戏源码下载
源码大小:1.19M
文件格式:.zip
开发语言:Java
更新时间:2016-03-31
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
坦克大战,单击小游戏 用于疲劳时休闲的Java小程序
坦克大战,单击小游戏 用于疲劳时休闲的Java小程序
package tankwar;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.util.*;
public class Tank {
private static final int XDIR=10;//坦克速度
private static final int YDIR=10;//坦克速度
TankWar ta=null;
private static Random r=new Random();//Random随机数产生器
private int step=r.nextInt(10) 2;//
private Bloodbar b=new Bloodbar();
//加载图片
private static Toolkit tk =Toolkit.getDefaultToolkit();//默认工具包
private static Image[] tankImages=null;
private static Map<String,Image> imgs=new HashMap<String,Image>();
static{
tankImages=new Image[]{
tk.getImage(Tank.class.getClassLoader().getResource("images/tankz.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tankzs.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tanks.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tankys.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tanky.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tankyx.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tankx.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/tankzx.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/mytankz.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/mytankzs.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/mytanks.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/mytankys.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/mytanky.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/mytankyx.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/mytankx.gif")),
tk.getImage(Tank.class.getClassLoader().getResource("images/mytankzx.gif"))
};
imgs.put("z",tankImages[0]);
imgs.put("zs",tankImages[1]);
imgs.put("s",tankImages[2]);
imgs.put("ys",tankImages[3]);
imgs.put("y",tankImages[4]);
imgs.put("yx",tankImages[5]);
imgs.put("x",tankImages[6]);
imgs.put("zx",tankImages[7]);
imgs.put("gz",tankImages[8]);
imgs.put("gzs",tankImages[9]);
imgs.put("gs",tankImages[10]);
imgs.put("gys",tankImages[11]);
imgs.put("gy",tankImages[12]);
imgs.put("gyx",tankImages[13]);
imgs.put("gx",tankImages[14]);
imgs.put("gzx",tankImages[15]);
}
public static final int WIDTH=68;//tankImages[8].getWidth(null);//tank高
public static final int HEIGHT=68;//tankImages[8].getHeight(null);//tank宽
private int life=100;
public int getLife() {
return life;
}
public void setLife(int life) {
this.life = life;
}
private boolean live=true;//设置一个布尔类型的量
private boolean good;
private int x, y;
private int oldx,oldy;
private boolean bz=false,bs=false,by=false,bx=false;
//定义方向
private Direction d=Direction.STOP; //坦克方向
private Direction ptd=Direction.y;//炮筒的方向
public boolean isLive() {
return live;
}
public void setLive(boolean live) {
this.live = live;
}
public boolean isGood() {
return good;
}
public void setGood(boolean good) {
this.good = good;
}
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 d,TankWar ta){
this(x,y,good);
this.d=d;
this.ta=ta;
}
//tank移动
void move(){
this.oldx=x;
this.oldy=y;
switch(d){
case z: x-=XDIR;break;
case zs:x-=XDIR; y-=YDIR;break;
case s: y-=YDIR;break;
case ys:x =XDIR;y-=YDIR;break;
case y: x =XDIR;break;
case yx:x =XDIR;y =YDIR;break;
case x:y =YDIR;break;
case zx:x-=XDIR;y =YDIR;break;
case STOP:break;
}
if(this.d!=Direction.STOP){
this.ptd=this.d;
}
if(x<0)x=0;
if(y<25)y=25;
if(x Tank.WIDTH>TankWar.GAME_WIDTH) x=TankWar.GAME_WIDTH -Tank.WIDTH;
if(y Tank.HEIGHT>TankWar.GAME_HEIGHT)y=TankWar.GAME_HEIGHT-Tank.HEIGHT;
//如果是坏坦克随机移动
if(!good){
Direction[]ds=Direction.values();//定义一个数组
if(step==0){
step=r.nextInt(10) 2;
int rn=r.nextInt(ds.length);//随即产生一个数
d=ds[rn];
}
step--;
if(r.nextInt(40)>38)this.fire();
}
}
public void stay(){
x=oldx;
y=oldy;
}
public void draw(Graphics g){
Color c=g.getColor();
g.setColor(Color.ORANGE);
if(this.life==0){
Font t=new Font("宋体",Font.BOLD,50);
g.setFont(t);
g.drawString("GAME OVER", 200, 300);
}
g.setColor(c);
if(!live){
if(!good){
ta.tank04s.remove(this);
}
return;//如果打中不再返回true;
}
if(good)b.draw(g);
if(!good){
switch(ptd){
case z:g.drawImage(imgs.get("z"), x, y, null);break;
case zs:g.drawImage(imgs.get("zs"), x, y, null);break;
case s: g.drawImage(imgs.get("s"), x, y, null);break;
case ys:g.drawImage(imgs.get("ys"), x, y, null);break;
case y: g.drawImage(imgs.get("y"), x, y, null);break;
case yx:g.drawImage(imgs.get("yx"), x, y, null);break;
case x:g.drawImage(imgs.get("x"), x, y, null);break;
case zx:g.drawImage(imgs.get("zx"), x, y, null);break;
}
}else
{ System.out.println(ptd);switch(ptd){
case z:g.drawImage(imgs.get("gz"), x, y, null);break;
case zs:g.drawImage(imgs.get("gzs"), x, y, null);break;
case s: g.drawImage(imgs.get("gs"), x, y, null);break;
case ys:g.drawImage(imgs.get("gys"), x, y, null);break;
case y: g.drawImage(imgs.get("gy"), x, y, null);break;
case yx:g.drawImage(imgs.get("gyx"), x, y, null);break;
case x:g.drawImage(imgs.get("gx"), x, y, null);break;
case zx:g.drawImage(imgs.get("gzx"), x, y, null);break;
}
}
move();
}
//添加键盘坚挺控制坦克
public void keyPressed(KeyEvent e){
int key=e.getKeyCode();
switch(key){
case KeyEvent.VK_LEFT: bz=true;break;
case KeyEvent.VK_UP: bs=true;break;
case KeyEvent.VK_RIGHT:by=true;break;
case KeyEvent.VK_DOWN: bx=true;break;
}
locateDirection();
}
void locateDirection(){
if( bz && !by && !bs && !bx) d=Direction.z;
else if( bz && !by && bs && !bx) d=Direction.zs;
else if(!bz && !by && bs && !bx) d=Direction.s;
else if(!bz && by && bs && !bx) d=Direction.ys;
else if(!bz && by && !bs && !bx) d=Direction.y;
else if(!bz && by && !bs && bx) d=Direction.yx;
else if(!bz && !by && !bs && bx) d=Direction.x;
else if( bz && !by && !bs && bx) d=Direction.zx;
else if(!bz && !by && !bs && !bx) d=Direction.STOP;
}
public void keyReleased(KeyEvent e) {
int key=e.getKeyCode();
switch(key){
//case KeyEvent.VK_F2:if(!this.live)this.live=true;this.life=100;break;//如果本人over则按f2出现
case KeyEvent.VK_D:fire();break;
case KeyEvent.VK_LEFT: bz=false;break;
case KeyEvent.VK_UP: bs=false;break;
case KeyEvent.VK_RIGHT:by=false;break;
case KeyEvent.VK_DOWN: bx=false;break;
case KeyEvent.VK_A: superFire();break;
}
locateDirection();
}
public Missile fire(){
if(!live){
return null;
}
int x=this.x Tank.WIDTH/2;
int y=this.y Tank.HEIGHT/2;
Missile m=new Missile(x,y,good,ptd,this.ta);
ta.missiles.add(m);
return m;
}
public Missile fire(Direction d){
if(!live){
return null;
}
int x=this.x Tank.WIDTH/2;
int y=this.y Tank.HEIGHT/2;
Missile m=new Missile(x,y,good,d,this.ta);
ta.missiles.add(m);
return m;
}
public Rectangle getRect(){
return new Rectangle(x,y,tankImages[0].getWidth(null),tankImages[0].getHeight(null));
}
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>tank04s){
for(int i=0;i<tank04s.size();i ){
Tank t=tank04s.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 [] ds=Direction.values();
for(int i=0;i<8;i ){
fire(ds[i]);
}
}
//建个血条
private class Bloodbar{
public void draw (Graphics g){
Color c=g.getColor();
g.setColor(Color.RED);
g.drawRect(700, 50, 80, 10);//画个框
int w=80*life/100;
if(w<=20)g.setColor(Color.ORANGE);
g.fillRect(700, 50, w, 10);
g.setColor(c);
}
}
public boolean eat(Blood bl){
if(this.live&&bl.isLive()&&this.getRect().intersects(bl.getRect())){
this.life=100;
bl.setLive(false);
return true;
}
return false;
}
}