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

这篇博客介绍了如何在Java版的坦克大战游戏中为坦克添加血条显示。作者通过创建`Life`类来存储血条的位置、尺寸和血量,并在`draw()`方法中根据血量比例绘制红色的血条部分。在`Tank`类的绘制方法中,调用`Life`类的方法绘制血条。文章解决了坦克血量被击中后立即变为0的问题,通过将生命值转换为double类型进行计算,确保血条正确显示。
摘要由CSDN通过智能技术生成

运行结果:

0818b9ca8b590ca3270a3433284dd417.png

为了在坦克上方画血条 。血条首先要有坐标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;

}

全部代码点击下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值