坦克大战GUI版(java)

1.操作方法与说明

操作:W:上     A:左     S:下     D:右          J:发子弹    K:大招

说明:红色坦克为自己的坦克,蓝色为敌方坦克,我防坦克右100血,每次被攻击到就会减少10血,直至死亡,我方坦克阵亡后,按F2可以重新开始。

2.坦克大战程序

将以下Class,放在一个包内,运行TankWarClient即可

效果图



	/**
	 * 坦克游戏主客户端,负责响应机制与主要操作等
	 */
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;
import java.util.*;

public class TankWarClient extends Frame {
	private static final long serialVersionUID = 1L;
	
    Tank MyTank=new Tank(50,50,true,this);//创建我方坦克
	List<Missile> missiles=new ArrayList<Missile>();//子弹容器
	List<Explode> explodes =new ArrayList<Explode>();//爆炸容器
	List<Tank> tanks =new ArrayList<Tank>();//坦克容器
	List<Wall> walls=new ArrayList<Wall>();//墙
	List<Blood>bloods=new ArrayList<Blood>();//血块
	Random r=new Random();
	Image offImage=null;
	public static final int GAME_WEITH=800;
	public static final int GAME_HEIGHT=600;
	
	
	public void paint(Graphics g) {
		
		g.drawString("missiles count:"+missiles.size(), 10, 50);//显示出子弹个数
		g.drawString("explodes count:"+explodes.size(), 10, 70);//爆炸个数
		g.drawString("tanks count:"+tanks.size(), 10, 90);//坦克个数
		g.drawString("tank life:"+MyTank.getGlife(), 10, 120);//坦克的剩余生命
		//画出血块
		for(int i=0;i<bloods.size();i++){
			Blood bl=bloods.get(i);
			bl.hitTanks(tanks);//血块碰撞坦克检测
			bl.draw(g);
		}
		
		for(int i=0;i<missiles.size();i++){
			Missile Mi=missiles.get(i);
			Mi.hitTanks(tanks);
			Mi.hitWalls(walls);
			Mi.draw(g);
		}
		
		for(int i=0;i<explodes.size();i++){
			Explode Ex=explodes.get(i);
			Ex.draw(g);
		}
		
		for(int i=0;i<tanks.size();i++){
			Tank tan=tanks.get(i);
			tan.hitWalls(walls);
			tan.hitTanks(tanks);
			tan.draw(g);
		}
		
		for(int i=0;i<walls.size();i++){
			Wall wa=walls.get(i);
			wa.draw(g);
		}
		
	    int ra=r.nextInt(400);
	    if(ra==10){
			//随机加入血块
			bloods.add(new Blood(200,200,this));
	    }
	}

	//设置双缓冲,防止图片闪烁
	public void update(Graphics g) {
		
		if(offImage==null){
			offImage=this.createImage(GAME_WEITH,GAME_HEIGHT);
		}
		Graphics goff=offImage.getGraphics();
		Color c=goff.getColor();
		goff.setColor(Color.white);
		goff.fillRect(0, 0, GAME_WEITH,GAME_HEIGHT);
		goff.setColor(c);
		paint(goff);
		g.drawImage(offImage, 0, 0, null);
	}
	
	void launchFram(){
		//增加10个对方坦克
		for(int i=0;i<10;i++){
			tanks.add(new Tank(200+50*i,200+50*i,false,this));
		}
		walls.add(new Wall(200,300,100,20,this));
		walls.add(new Wall(400,150,20,200,this));
		
		tanks.add(MyTank);
		this.setBounds(100, 100, GAME_WEITH,GAME_HEIGHT);
		this.setVisible(true);
		this.setTitle("TankWar");
		this.setResizable(false)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值