import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo) /** * Aliens bewegen sich von links nach rechts bis zum unteren Bildschirmrand. */ public class Alien extends Actor { int geschwindigkeit = 2; /** * Act - tut, was auch immer Alien tun will. Diese Methode wird aufgerufen, * sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden. */ public void act() { bewegen(); schiessen(); pruefeSieg(); pruefeKollision(); } /** * Das Alien bewegt sich mit der aktuellen Geschwindigkeit in X-Richtung. * Falls es einen Rand beruehrt wechselt es in die naechste Zeile und * invertiert die Geschwindigkeit. */ private void bewegen() { setLocation((getX() + geschwindigkeit), getY()); // Das Alien hat einen Seitenrand erreicht if (getX() == 599 || getX() == 0) { geschwindigkeit = geschwindigkeit * -1; setLocation(getX() + geschwindigkeit, getY() + 36); } } /** * Wenn ein Alien den unteren Rand des Bildschirms erreicht, ist das Spiel * verloren. */ private void pruefeSieg() { if (getY() >= 590) { ((MyWorld)getWorld()).verloren(); } } /** * Ueberprueft ob ein Alien von einem Projektil getroffen wurde. */ private void pruefeKollision() { if (isTouching(Laser.class)) { removeTouching(Laser.class); // Projektil wird zerstört Greenfoot.playSound("Explosion.wav"); ((MyWorld)getWorld()).erhoehePunkte(50); // Spieler bekommt Punkte ((MyWorld)getWorld()).reduziereAlienAnzahl(); getWorld().removeObject(this); // Das Alien selber wird zerstört } } /** * Feuert einen Schuss ab mit einer Wahrscheinlichkeit von 0.04%. */ private void schiessen() { if (Greenfoot.getRandomNumber(10000) <= 4) { Lazer lazer = new Lazer(); getWorld().addObject(lazer, getX(),getY()); } } }