您的位置:首页 > 编程语言 > Java开发

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

2016-10-14 14:38 369 查看
运行结果:



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

全部代码点击下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: