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

2020/11/25

Maximum values

Hellotheremyfriend Hellotheremyfriend

2020/11/25

#
Can someone tell me how I can set a certain value that can be reached and not exceeded . I want to make it so that my objects in my world have a maximum health.(They can get +health when they touch an object of the supply class that I have.
danpost danpost

2020/11/25

#
Hellotheremyfriend wrote...
Can someone tell me how I can set a certain value that can be reached and not exceeded . I want to make it so that my objects in my world have a maximum health.(They can get +health when they touch an object of the supply class that I have.
Show all codes related to health and changing its value.
Hellotheremyfriend Hellotheremyfriend

2020/11/27

#
public class Bakterium extends Enemy
{
    
    int speed = 4;
    int health = 2;
    boolean hitProteingeschoss = false;
    /**
     * Act- Das Bakterium macht was auch immer es will. Diese Methode wird aufgerufen, wenn
     * Act oder Run Methode aufgerufen wird
     */
    public void act() 
    {
        move(5);
        randomTurn();
        hitByProteingeschoss();
        
    }    
    /**
     * Das Bakterium dreht sich mit einer 25 prozentigen Wahrscheinlichkeit um eine zufällig generierte Gradzahl aus dem Zahlenbereich [-20,20]
     */
    public void randomTurn()
    {
        if(Greenfoot.getRandomNumber(100)<25);
        {
            turn(Greenfoot.getRandomNumber(41)-20);
        }
    }
    /**
     * Jeder Treffer mit der Instanz der Klasse Proteingeschoss verursacht den Verlust eines Lebenspunktes. Nach einem Treffer wird das
     * Objekt Proteingeschoss aus der Welt entfernt. Wenn ein Objekt der Bakteriumsklasse keine Lebenspunkte mehr hat wird es aus der 
     * Welt entfernt. Bevor das Bakterium stirbt lässt es ein Objekt der Klasse Supplies zurück.
     */
    public void hitByProteingeschoss()
    {
        Actor proteingeschoss = getOneIntersectingObject(Proteingeschoss.class);
        if(proteingeschoss != null && !hitProteingeschoss)
        {
            health--;
            hitProteingeschoss = true;
            getWorld().removeObject(proteingeschoss);
        }
        else if(!isTouching(Proteingeschoss.class))
        {
            hitProteingeschoss = false;
        }
        if(health <= 0)
        {
           Supplies supplies = new Supplies();
           if (Greenfoot.getRandomNumber(1000)<382)
           {
           getWorld().addObject(supplies, getX(), getY());
           }
           Blutgefäß blutgefäß = (Blutgefäß)getWorld();
           Counter counter = blutgefäß.getCounter();
           counter.addScore();
           getWorld().removeObject(this);
        }
        
    }
public class Erythrozyte extends Friend
{
    /**
     * Act - do whatever the Erythrozyte wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    
    int health = 3;
    boolean hitEnemy = false;
    boolean touchingSupplies = false;
    public void act() 
    {
        hitByEnemy();
        randomTurn();
        turnAtEdge();
        move(3);
        touchSupplies();
    }   
    /**
     * Die Erythrozyte soll sich um einen zufälligen Betrag aus einem Intervall von [-30,30] Grad drehen.
     * Die Drehung um diesen Betrag erfolgt mit einer 30 prozentigen Wahrscheinlichkeit.
     */
    public void randomTurn()
    {
        if(Greenfoot.getRandomNumber(100)<34)
        {
            turn(Greenfoot.getRandomNumber(81)-40);
        }
    }
    /**
     * Wenn die Erythrozyte am Ende der Welt angekommen ist, dann macht sie eine Drehung um einen zufälligen Betrag aus einem Intervall von [-20,20] Grad.
     * 
     */
    public void turnAtEdge()
    {
        if(this.getWorld() != null)
        if(isAtEdge())
        {
            turn(Greenfoot.getRandomNumber(71)-35);
        }
    }
    /**
     * Wenn die Erythrozyte von einem Objekt der Klasse Enemy getroffen wird, verliert sie einen Lebenspunkt. Wenn eine Instanz keine Lebenspunkte mehr
     * wird sie aus der Welt entfernt.
     */
    public void hitByEnemy()
    {
        Actor enemy  = getOneIntersectingObject(Enemy.class);
        if (enemy != null && !hitEnemy)
        {
            health--;
            hitEnemy = true;
        }
        else if (!isTouching(Enemy.class))
        {
            hitEnemy = false;
        }
        if (health <= 0)
        {
        Blutgefäß blutgefäß = (Blutgefäß)getWorld();
        CounterForErythrozyte counterforerythrozyte = blutgefäß.getCounterForErythrozyte();
        counterforerythrozyte.addScore();
        getWorld().removeObject(this);
        }
    }
    /**
     * Wenn ein Objekt der Klasse Erythrozyte ein Objekt der Klasse Supplies berührt, dann erhält es einen Lebenspunkt.
     */
    public void touchSupplies()
    {
        if(this.getWorld() != null)
        {
        if(isTouching(Supplies.class) && !touchingSupplies)
        {
            health++;
            touchingSupplies = true;
        }
        else if(!isTouching(Supplies.class))
        {
            touchingSupplies = false;
        }
        
        if(isTouching(Supplies.class))
        { 
            removeTouching(Supplies.class);
        }
        }
    }
    
}
Hellotheremyfriend Hellotheremyfriend

2020/11/27

#
public class Leukozyte extends Friend
{
    private int health = 4;
    private boolean hitEnemy = false;
    private int speed = 3;
    
    /**
     * Act- Die Leukozyte, macht was auch immer sie will. Diese Methode wird aufgerufen, wenn die
     * Act oder Run Methode aufgerufen wird
     */
    public void act() 
    {
        fire();
        hitByEnemy();
        keyMovement();
        consumeSupplies();
        
    }  
    /**
     * Durch das einmalige klicken der Maustaste wird ein Objekt der Klasse Proteingeschoss geschossen. Das Proteingeschoss wird geradlinig mit einer 
     * konstanten Geschwindigkeit in die Richtung der Koordinaten gefeuert, von dem aus die Maus geklickt wurde.
     */
    public void fire()
    {
        if(Greenfoot.mousePressed(null))
        {
            Proteingeschoss proteingeschoss = new Proteingeschoss();
            getWorld().addObject(proteingeschoss, getX(), getY());
            proteingeschoss.turnTowards(Greenfoot.getMouseInfo().getX(), Greenfoot.getMouseInfo().getY());
        }
    }
    /**
     * Ein Berührung mit einer Objekt der Klasse Enemy zieht ein Lebenspunkt von einer Instanz der Klasse Leukozyte ab. Wenn diese Leukozyte keine 
     * Lebenspunkte mehr hat, wird sie von der Welt entfernt und das Programm gestoppt.
     */
    public void hitByEnemy()
    {
        Actor enemy = getOneIntersectingObject(Enemy.class);
       
        if(isTouching(Enemy.class) && !hitEnemy)
        {
            Blutgefäß blutgefäß = (Blutgefäß)getWorld();
            Healthbar healthbar = blutgefäß.getHealthbar();
            
            healthbar.health--;
            hitEnemy = true;
        }
        
        else if (!isTouching(Enemy.class))
        {
            hitEnemy = false;
        }
        if(this.getWorld() != null)
        {
        if(health <= 0)
        {
            getWorld().removeObject(this);
        }
        }
    }
    /**
     *  Durch das Betätigen der Tasten "w, a, s, d" bewegt sich eine Instanz der Klasse Leukozyte mit einer Geschwindigkeit von drei Pixeln pro Sekunde.
     */
    public void keyMovement()
    {
        if(this.getWorld() != null)
        {
        if(Greenfoot.isKeyDown("w"))
        {
            setLocation(getX(), getY() - speed);
        }
        if(Greenfoot.isKeyDown("s"))
        {
            setLocation(getX(), getY() + speed);
        }
        if(Greenfoot.isKeyDown("a"))
        {
            setLocation(getX() - speed, getY());
        }
        if(Greenfoot.isKeyDown("d"))
        {
            setLocation(getX() + speed, getY());
        }
        }
    }
    /**
     * Wenn ein Objekt der Klasse Leukozyte ein Objekt der Klasse Supplies berührt, so wird dieses Objekt aus der Welt entfernt.
     */
    public void consumeSupplies()
    {
        if(this.getWorld() != null)
        {
        if(isTouching(Supplies.class))
        {
            removeTouching(Supplies.class);
        }
        }
    }
    
}
danpost danpost

2020/11/27

#
An easy way to limit the maximum health of an erythrozyte is by simply changing line 75 of its class to:
if (health < 3)
{
    health++;
}
You may want to cut/paste line 85 to within this block and remove lines 83 to 86.
Hellotheremyfriend Hellotheremyfriend

2020/11/27

#
Thanks bro, I appreciate it alot
You need to login to post a reply.