TankWar 单机(JAVA版)版本2.3~版本2.4 为坦克画血条

110 篇文章 6 订阅
27 篇文章 1 订阅

运行结果:


为了在坦克上方画血条 。血条首先要有坐标x,y  宽和高width和height

血量的多少life也要有。

所以新建类Life要有这些参数

Life类如下:

package tankWar;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;

public class Life {
	private int x;
	private int y;
	private int width=40;
	private int height=10;
	private int life;
	public Life() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Life(int x, int y,int life) {
		super();
		this.x = x;
		this.y = y;
		this.life=life;
	}
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	public void draw(Graphics g){
		
		Graphics2D g2=(Graphics2D) g;
		//画外圈
		Rectangle2D r2=new Rectangle2D.Double(x, y-height, width, height);
		g2.setColor(Color.YELLOW);
		g2.draw(r2);
		//根据血量比例画血条
		Rectangle2D r=new Rectangle2D.Double(x+1, y-height+1, width*((double)life/100)-1, height-1);
		g2.setColor(Color.RED);
		g2.fill(r);
	}
}

起初调试发现,坦克被击中一下  血量就为0  后来想了想  life/100这里。因为life是整形,除以100保留整数为0.所以强转为double

最后在Tank类中画坦克的时候画血条即可。

private void drawEnemyTanks(Graphics g) {
			// TODO Auto-generated method stub
			// 画敌方坦克
			for (Tank t : enemyTanks) {
				if (t.isbLive()) {
					//画坦克
					t.draw(g);
					//画血条
					Life life=new Life(t.getX(), t.getY(), t.getLive());
					life.draw(g);
				} else {
					// 坦克死亡 画爆炸
					Bomb b = new Bomb(t.getX() - 50, t.getY() - 30);
					b.draw(g);
					enemyTanks.remove(t);
				}
			}
		}
因为我的坦克不在集合里面,自己写
// 画我的坦克
			if (myTank.isbLive()) {
				myTank.draw(g);
				Life life=new Life(myTank.getX(), myTank.getY(), myTank.getLive());
				life.draw(g);
			} else {
				// 游戏结束
				isGameOn = false;
			}

全部代码点击下载



  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值