import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Die Welt, in der sich die Schlange bewegt
 * 
 * @author Rainer Helfrich
 * @version 2020-04-08
 */
public class SnakeWorld extends World
{
    /**
     * Die Ausführungsgeschwindigkeit
     */
    private int speed;
    
    /**
     * Erzeugt eine neue Welt
     */
    public SnakeWorld()
    {    
        super(30, 20, 20); 
    }
    
    /**
     * Platziert einen neuen Apfel an einer freien Stelle in der Welt
     */
    public void placeApple()
    {
        Apple a = new Apple();
        int x, y;
        do
        {
            x = Greenfoot.getRandomNumber(getWidth());
            y = Greenfoot.getRandomNumber(getHeight());
        } while (getObjectsAt(x, y, SnakeElement.class).size() > 0);
        addObject(a, x, y);
        if (speed < 49) // danach nicht mehr spielbar
        {
            speed++;
            Greenfoot.setSpeed(speed);
        }
    }
    
    /**
     * Wird aufgerufen, wenn das Spiel verloren ist.
     * Zeigt eine Nachricht und die Punktezahl an.
     */
    public void setGameOver()
    {
        int points = getObjects(SnakeElement.class).size() - 2;
        removeObjects(getObjects(null));
        getBackground().drawImage(new GreenfootImage("Game over", 64, null, null), 170, 130);
        getBackground().drawImage(new GreenfootImage("Punkte: " + points, 40, null, null), 220, 220);
    }
    
    /**
     * Wartet auf das Drücken der Leertaste, um das Spiel zu initialisieren
     */
    public void act()
    {
        if (Greenfoot.isKeyDown("space") &&
            getObjects(Snake.class).isEmpty())
        {
            setBackground((GreenfootImage)null);
            Snake s = new Snake(this);
            addObject(s, 15,10);
            speed = 22;
            placeApple();
        }
    }
}
