aboutsummaryrefslogtreecommitdiff
path: root/Alien.java
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2024-07-12 23:07:39 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2024-07-12 23:13:11 +0200
commit3b632e8a598bfcd75fd88d13e6d575996d98cf8b (patch)
tree347b11cba6bbb7358ab1940c01a6f812a100814f /Alien.java
downloadspaceinvaders-3b632e8a598bfcd75fd88d13e6d575996d98cf8b.tar.gz
spaceinvaders-3b632e8a598bfcd75fd88d13e6d575996d98cf8b.zip
initial commit
Diffstat (limited to 'Alien.java')
-rw-r--r--Alien.java77
1 files changed, 77 insertions, 0 deletions
diff --git a/Alien.java b/Alien.java
new file mode 100644
index 0000000..06775b8
--- /dev/null
+++ b/Alien.java
@@ -0,0 +1,77 @@
+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());
+ }
+ }
+}