This site requires JavaScript, please enable it in your browser!
Greenfoot back
zehbi-tracker
zehbi-tracker wrote ...

2024/4/30

Gaining Health

zehbi-tracker zehbi-tracker

2024/4/30

#
In my game your supposed to dodge Thwomps and Terence from above. When hitting them you take damage. However i want when hitting Watermelon that you gain 5 health and that it is visible in the healthbar. Here is my code for my player character and healthbar. Im a student doing this for school and help is aprreciated.
import greenfoot.*;
public class Joker extends Actor {
    public int snelheid = 4;
    private int vSpeed = 0;
    private int acceleration = 1;
    private int state = 1; 
    int sprinten = 1;
    int tellerAnimatie = 10;
    private Healthbar healthBar;
    private SimpleTimer immunityTimer = new SimpleTimer();
    private GreenfootSound sterSound = new GreenfootSound("Super Mario Bros - Star.mp3");
    private int thwompCooldown = 0; 
    private final int THWOMP_COOLDOWN_DURATION = 70;  

    public Joker(Healthbar healthBar) {
        this.healthBar = healthBar; 
    }
    
    public void act() {
        checkKeys(); 
        fall();
        if (state == 2 && immunityTimer.millisElapsed() > 15000) {
            state = 1;
        }
        
        if (thwompCooldown > 0) { 
            thwompCooldown--;
        }
        
        raakThwomp(); 
        raakSuperStar();     
    }
    
     public void raakSuperStar() {
        if (isTouching(SuperStar.class)) {
            state = 2; 
            immunityTimer.mark(); 
            sterSound.play();
        }
    }
    
    public void raakThwomp() { 
        if (state == 1 && thwompCooldown == 0 && (isTouching(Thwomp.class) || isTouching(SuperThwomp.class))) { 
            int damage = 4; 
            if (isTouching(SuperThwomp.class)) { 
                damage = 7; 
            }
            if (isTouching(SuperThwomp.class)) { 
                damage = 7; 
            }
            if (isTouching(Terence.class)) { 
                damage = 25;
            }
            if (healthBar != null) {
                healthBar.loseHealth(damage); 
                thwompCooldown = THWOMP_COOLDOWN_DURATION; 
                
                Greenfoot.playSound("Joker Persona 5 Royal Sound Effects HD.mp3");
                
                Actor thwomp = getOneIntersectingObject(Thwomp.class);
                Actor superThwomp = getOneIntersectingObject(SuperThwomp.class);
                Actor Terence = getOneIntersectingObject(Terence.class);
                if (thwomp != null) {
                    getWorld().removeObject(thwomp); 
                }
                if (superThwomp != null) {
                    getWorld().removeObject(superThwomp); 
                }
                if (Terence != null) {
                    getWorld().removeObject(Terence); 
                }
            }
        }
    }


        public void checkKeys() {

        if (Greenfoot.isKeyDown("d")) {
             if (sprinten<=10)
        {
            if(tellerAnimatie == 10) {        
        setImage("jokerright" + sprinten + ".png");
        sprinten++;
        tellerAnimatie = 1;
        
        }
        
        }   
        else
        {
            sprinten=1;
        }
        tellerAnimatie++;
            setLocation(getX() + snelheid, getY());
        }
        
        if (Greenfoot.isKeyDown("a")) {
             if (sprinten<=10)
        {
            if(tellerAnimatie == 10) {        
        setImage("jokerleft" + sprinten + ".png");
        sprinten++;
        tellerAnimatie = 1;
        }
        
        }   
        else
        {
            sprinten=1;
        }
        tellerAnimatie++;
            setLocation(getX() - snelheid, getY());
        }
        
            
            
        if (Greenfoot.isKeyDown("w")&& (onGrond() == true))
        { 
            jump();
                }
        
    }
        
    public void jump() {
    if (getWorld().getClass() == Hell.class || getWorld().getClass() == Japan.class) {
        vSpeed = -20; 
    } else {
        vSpeed = -25; 
    }
    fall();
    setImage("jokerjump6.png");
    
    }   
    public boolean onGrond()
    {
        Actor under = getOneObjectAtOffset ( 0, getImage().getHeight() /2, Grond.class);
          return under != null; 
    }
    
    public void fall() {
          vSpeed = vSpeed + acceleration;
          setLocation(getX(), getY() + vSpeed);
    }

}
/**
 * Write a description of class Healthbar here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Healthbar extends Actor {
    int health = 40;
    int maxHealth = 40;
    int healthBarWidth = 120; 
    int healthBarHeight = 20;
    int pixelsPerHealthPoint = healthBarWidth / health;

    public Healthbar() {
        update();
    }
    
    public void act() {
        update();
    }
    
     public void update() {
        GreenfootImage image = new GreenfootImage(healthBarWidth + 2, healthBarHeight + 2);
        image.setColor(Color.WHITE);
        image.fillRect(0, 0, healthBarWidth + 2, healthBarHeight + 2);

        if (health <= 0) {
            Greenfoot.setWorld(new GameOverScherm());
        } else {
            if (health < 10) {
                image.setColor(Color.RED);
            } else {
                image.setColor(Color.GREEN);
            }
            image.fillRect(1, 1, health * pixelsPerHealthPoint, healthBarHeight);
        }
        setImage(image);
    }
    
    public void loseHealth(int amount) {
        health -= amount;
        if (health < 0) {
            health = 0;
        }
    }
    
    public void add(int amount) {
    health += amount;
    if (health > maxHealth) { 
        health = maxHealth;
    }   
    }
}
danpost danpost

2024/5/2

#
Maybe:
if (isTouching(Watermelon.class)) {
    int rejuv = 5;
    healthBar.add(rejuv);
}
You need to login to post a reply.