I added hearts in my world to represent the number of lives Mario has. Every time mario dies, a heart is subtracted from the game. But I am not sure why my heart isn't being removed when Mario is no longer alive.
Here is the life code This is the World parent class:
World Child class
And thats mario
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * Write a description of class Life here. * * @author (your name) * @version (a version number or a date) */ public class Life extends Actor { public void act() { setLook(); } public void setLook() { GreenfootImage life = new GreenfootImage(getImage()); setImage(life); } }
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * The parent class of worlds * * @soumya.__.khanna (Soumya Khanna) * @I'llLookItUp (Jun 17th, 2020) */ public class Worlds extends World { public int width = getWidth(); //Width of the world --Accessed in children classes public SwimmingMario mario = new SwimmingMario(); //Number of hearts based on the life of Mari public Life life0; public Life life1; public Life life2; public Life life3; public Life life4; public Score score; public void act() { checkLife(mario.getLives()); } public Worlds() { // Create a new world with 600x400 cells with a cell size of 1x1 pixels. super(2200, 576, 1, false); } public void lifeCounter(int x, int y) { life0 = new Life(); life1 = new Life(); life2 = new Life(); life3 = new Life(); life4 = new Life(); addObject(life0, x, y); addObject(life1, x + 30, y); addObject(life2, x + 60, y); addObject(life3, x + 90, y); addObject(life4, x + 120, y); } public void checkLife(int numLives) { //Make lifeCounter represent Mario's lives if(mario.getLives() == 4) { removeObject(life4); } else if(mario.getLives() == 3) { removeObject(life3); } else if(mario.getLives() == 2) { removeObject(life2); } else if(mario.getLives() == 1) { removeObject(life1); } else if(mario.getLives() == 0) { removeObject(life0); } } public int setLives() { return mario.getLives(); } public int getLives() { return mario.LifeLine; } public Score getScore() { return score; //Information from scoreboard } }
public void act() { super.act(); } public WaterWorld() { //Placing all actors in the world prepare(); } public void prepare() { //Adds the floor blocks addFloor(); //First row of blocks topBlocks(getWidth() - 2248 ,getHeight()- 500); //Left chunck of blocks topBlocks(getWidth() - 200,getHeight()- 500); //Right blocks middleBlocks(getWidth()/2 ,getHeight()- 500); // Main chunk of blocks in the middle of the world //Smaller chuncks of blocks on each side sideBlocks(getWidth()/3 - 500 ,getHeight()- 310); //Left Side sideBlocks(getWidth()/3 + 1300 ,getHeight()- 310); //Right Side //Main hero addObject(new SwimmingMario(), getWidth()/8, getHeight()/2); //Adding Cheep Cheeps addEnimies(); //Placing the hearts that represent Mario's life lifeCounter(getWidth()/30, getHeight() - 50); lifeCounter(getWidth() - 150, getHeight() - 50); }
private int frame; private int actCounter; private int skipRate; private int floor = 448; //doubles to allow decimals private double gravity, gravityIncrement; //Booleans private boolean groundLevel; private boolean changeAnimation; private boolean movingRight; private boolean movingLeft; private boolean damageTaken = false; //Hero has not taken any damage private int damageTakenTimer = 0; public SwimmingMario() { this.LifeLine = 5; frame = 0; //initial frame skipRate = 75; //speed of animaation actCounter = 0; //initial act animation = RIGHT; //Animation when staying the way it is speed = 3; //How fast it moves gravity = 0; //Don't sink gravityIncrement = .1; //Velocity } public void act() { attack(); triggerReleased = true; //Trigger is released updateAmimation(); actCounter++; marioAnimator(); //blockMovement(); whatIsGround(); marioMover(); floatingMario(); jumpingJumping(); checkCeiling(); checkContact(); } public void checkContact() { if (isTouching(Enemies.class) && damageTaken == false) { Enemies tempEnemy = (Enemies)getOneIntersectingObject(Enemies.class); decreaseLives(); getWorld().removeObject(this); //rip(); damageTaken = true; damageTakenTimer = 50; //Greenfoot.delay(150); //setLocation(getWorld().getWidth()/9, getWorld().getHeight()-floatHeight); } if (damageTaken == true) { //Prevent dying continuously when colliding damageTakenTimer--; if(damageTakenTimer <= 0) { damageTaken = false; } } } public void decreaseLives() { this.LifeLine -= 1; } public int getLives() { return this.LifeLine; }