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.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 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 ); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | 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 ); } } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | 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 ); } } } } |
1 2 3 4 | if (health < 3 ) { health++; } |