塔防暴民健康

时间:2012-08-20 01:37:01

标签: java

我正在进行一场塔防游戏,并且当涉及到随着等级的增加来确定更强大的怪物的健康时,我遇到了一个巨大的问题。我目前有健康设置为mobSize(我的意思是,健康栏与暴徒的大小成比例)。这显然不适用于更高级别,因为怪物保持相同的大小并变得更强,但我的draw()方法做到了这一点:

public void draw(Graphics g) {
    if(inGame) {
        if(Screen.level == 1){
        g.drawImage(Screen.tileset_mob[1], x, y, width, height, null);
        //Health Bar
        g.setColor(new Color(180, 180, 50));
        g.fillRect(x, y -(healthSpace + healthHeight) , width, healthHeight);      

        g.setColor(new Color(255, 0, 0));
        g.fillRect(x, y -(healthSpace + healthHeight) , mobshealth , healthHeight);

        g.setColor(new Color (0, 0, 0));
        g.drawRect(x, y -(healthSpace + healthHeight), mobshealth - 1, healthHeight -1);
        }

这显然只是从健康栏的宽度中移除,健康栏被设置为暴徒的健康状况。我的问题是,我希望制造一个更强壮的暴徒,随着等级的增加,它会从健康栏中带走更少的东西。有什么建议?非常感谢你!

2 个答案:

答案 0 :(得分:3)

逻辑实体的属性应该与其可视化表示无关,而恰恰相反。

换句话说,你不应该关心任何与绘图或GUI有关的事情,而是让你的Mob类(逻辑类,而不是它的视觉表示)允许某些类型的强度乘数因子可以应用于它size属性,然后在其getStrength()方法中返回。可视化表示将仅反映此方法返回的值。

即,:

// strengthScaleFactor is a double which increases at higher levels
public int getStrength() {
   return (int) (getMobSize() * strengthScaleFactor);
}

暴徒力量的视觉表示,即“健康栏”,可以计算和使用归一化强度等级,即上述方法的结果除以返回最大力量的其他方法(getMaxStrength()也许?)。

在这里一直思考MVC

答案 1 :(得分:0)

想想MVC

//Model fields
//HP, MAXHP

//Controller method
float getHPPercent()
{
return HP/HPMax(float);
}

//View

int HPBoxWidthInPixels
Draw()
{
float percent = controller.getHPPercent();
Rect HPBox.x = Math.RoundToInt(HPBoxWidthInPixels *percent);
}