add lives to my game
<p>I want to accomplish a few things.
First is to create lives and start with 3.
Game Over on 0 lives.
Lose a life if you get hit by a ghost.
Lose a life if you fall below a certain distance.</p>

<p>Currently it's just taking the lives count and goes negative without stopping. So it's ignoreing my checkGameOver</p>

<pre><code>public class World {
    public interface WorldListener {
        public void jump();

        public void highJump();

        public void hit();

        public void coin();

        public void dying();
    }

    public static final float WORLD_WIDTH = 10;
    public static final float WORLD_HEIGHT = 15 * 20;
    public static final int WORLD_STATE_RUNNING = 0;
    public static final int WORLD_STATE_NEXT_LEVEL = 1;
    public static final int WORLD_STATE_GAME_OVER = 2;
    public static final Vector2 gravity = new Vector2(0, -12);

    public final Hero hero;
    public final List&lt;Platform&gt; platforms;
    public final List&lt;Spring&gt; springs;
    public final List&lt;Ghost&gt; ghosts;
    public final List&lt;Coin&gt; coins;
    public Castle castle;
    public final WorldListener listener;
    public final Random rand;

    public float heightSoFar;
    public int score;
    public int state;
    public int lives=3;

    public World(WorldListener listener) {
        this.hero = new Hero(5, 1);
        this.platforms = new ArrayList&lt;Platform&gt;();
        this.springs = new ArrayList&lt;Spring&gt;();
        this.ghosts = new ArrayList&lt;Ghost&gt;();
        this.coins = new ArrayList&lt;Coin&gt;();
        this.listener = listener;
        rand = new Random();
        generateLevel();

        this.heightSoFar = 0;
        this.score = 0;
        this.state = WORLD_STATE_RUNNING;
    }

    private void generateLevel() {
        float y = Platform.PLATFORM_HEIGHT / 2;
        float maxJumpHeight = Hero.hero_JUMP_VELOCITY * Hero.hero_JUMP_VELOCITY
                / (2 * -gravity.y);
        while (y &lt; WORLD_HEIGHT - WORLD_WIDTH / 2) {
            int type = rand.nextFloat() &gt; 0.8f ? Platform.PLATFORM_TYPE_MOVING
                    : Platform.PLATFORM_TYPE_STATIC;
            float x = rand.nextFloat()
                    * (WORLD_WIDTH - Platform.PLATFORM_WIDTH)
                    + Platform.PLATFORM_WIDTH / 2;

            Platform platform = new Platform(type, x, y);
            platforms.add(platform);

            if (rand.nextFloat() &gt; 0.9f
                    &amp;&amp; type != Platform.PLATFORM_TYPE_MOVING) {
                Spring spring = new Spring(platform.position.x,
                        platform.position.y + Platform.PLATFORM_HEIGHT / 2
                                + Spring.SPRING_HEIGHT / 2);
                springs.add(spring);
            }

            if (rand.nextFloat() &gt; 0.7f) {
                Ghost ghost = new Ghost(platform.position.x
                        + rand.nextFloat(), platform.position.y
                        + Ghost.GHOST_HEIGHT + rand.nextFloat() * 3);
                ghosts.add(ghost);
            }

            if (rand.nextFloat() &gt; 0.6f) {
                Coin coin = new Coin(platform.position.x + rand.nextFloat(),
                        platform.position.y + Coin.COIN_HEIGHT
                                + rand.nextFloat() * 3);
                coins.add(coin);
            }

            y += (maxJumpHeight - 0.5f);
            y -= rand.nextFloat() * (maxJumpHeight / 3);
        }

        castle = new Castle(WORLD_WIDTH / 2, y);
    }

public void update(float deltaTime, float accelX) {
    updatehero(deltaTime, accelX);
    updatePlatforms(deltaTime);
    updateGhosts(deltaTime);
    updateCoins(deltaTime);
    if (hero.state != Hero.hero_STATE_HIT)
        checkCollisions();
    checkGameOver();
    checkFall();
}

private void updatehero(float deltaTime, float accelX) {
    if (hero.state != Hero.hero_STATE_HIT &amp;&amp; hero.position.y &lt;= 0.5f)
        hero.hitPlatform();
    if (hero.state != Hero.hero_STATE_HIT)
        hero.velocity.x = -accelX / 10 * Hero.hero_MOVE_VELOCITY;
    hero.update(deltaTime);
    heightSoFar = Math.max(hero.position.y, heightSoFar);
}

private void updatePlatforms(float deltaTime) {
    int len = platforms.size();
    for (int i = 0; i &lt; len; i++) {
        Platform platform = platforms.get(i);
        platform.update(deltaTime);
        if (platform.state == Platform.PLATFORM_STATE_PULVERIZING
                &amp;&amp; platform.stateTime &gt; Platform.PLATFORM_PULVERIZE_TIME) {
            platforms.remove(platform);
            len = platforms.size();
        }
    }
}

private void updateGhosts(float deltaTime) {
    int len = ghosts.size();
    for (int i = 0; i &lt; len; i++) {
        Ghost ghost = ghosts.get(i);
        ghost.update(deltaTime);
        if (ghost.state == Ghost.GHOST_STATE_DYING
                &amp;&amp; ghost.stateTime &gt; Ghost.GHOST_DYING_TIME) {
            ghosts.remove(ghost);
            len = ghosts.size();
        }
    }
}

private void updateCoins(float deltaTime) {
    int len = coins.size();
    for (int i = 0; i &lt; len; i++) {
        Coin coin = coins.get(i);
        coin.update(deltaTime);
    }
}

    private void checkCollisions() {
        checkPlatformCollisions();
        checkGhostCollisions();
        checkItemCollisions();
        checkCastleCollisions();
    }

    private void checkPlatformCollisions() {
        if (hero.velocity.y &gt; 0)
            return;

        int len = platforms.size();
        for (int i = 0; i &lt; len; i++) {
            Platform platform = platforms.get(i);
            if (hero.position.y &gt; platform.position.y) {
                if (OverlapTester
                        .overlapRectangles(hero.bounds, platform.bounds)) {
                    hero.hitPlatform();
                    listener.jump();
                    if (rand.nextFloat() &gt; 0.5f) {
                        platform.pulverize();
                    }
                    break;
                }
            }
        }
    }

    private void checkGhostCollisions() {
        int len = ghosts.size();
        for (int i = 0; i &lt; len; i++) {
            Ghost ghost = ghosts.get(i);
            if (hero.position.y &lt; ghost.position.y) {
                if (OverlapTester.overlapRectangles(ghost.bounds, hero.bounds)){
                    hero.hitGhost();
                    listener.hit();
                    lives--;
                }
                break;
            } else {
            if(hero.position.y &gt; ghost.position.y) {
                 if (OverlapTester.overlapRectangles(hero.bounds, ghost.bounds)){
                     hero.hitGhostJump();
                     listener.jump();
                     ghost.dying();
                     score += Ghost.GHOST_SCORE;
                 }
                break;
                }
            }
        }
    }


    private void checkItemCollisions() {
        int len = coins.size();
        for (int i = 0; i &lt; len; i++) {
            Coin coin = coins.get(i);
            if (OverlapTester.overlapRectangles(hero.bounds, coin.bounds)) {
                coins.remove(coin);
                len = coins.size();
                listener.coin();
                score += Coin.COIN_SCORE;
            }

        }

        if (hero.velocity.y &gt; 0)
            return;

        len = springs.size();
        for (int i = 0; i &lt; len; i++) {
            Spring spring = springs.get(i);
            if (hero.position.y &gt; spring.position.y) {
                if (OverlapTester.overlapRectangles(hero.bounds, spring.bounds)) {
                    hero.hitSpring();
                    listener.highJump();
                }
            }
        }
    }

    private void checkCastleCollisions() {
        if (OverlapTester.overlapRectangles(castle.bounds, hero.bounds)) {
            state = WORLD_STATE_NEXT_LEVEL;
        }
    }

    private void checkFall() {          
        if (heightSoFar - 7.5f &gt; hero.position.y) {
         --lives;
                    }
    }

        public boolean checkGameOver() {
             --lives;
             return isDead();
        }
        public boolean isDead(){
             return lives&lt;1;
        }

}
</code></pre>
