From 6bd59689a2366fe24c1e92debee74dc1409758a7 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Fri, 12 Jul 2024 23:26:08 +0200 Subject: remove Lazer and Projektil class, collision detection and victory logic --- Alien.java | 44 ++++++++++-------------------- Laser.java | 32 ++++++++++++++++++---- Lazer.java | 11 -------- MyWorld.java | 64 +++++++++----------------------------------- Projektil.java | 29 -------------------- Raumschiff.java | 14 +++------- Schild.java | 27 ------------------- project.greenfoot | 80 +++++++++++++------------------------------------------ 8 files changed, 75 insertions(+), 226 deletions(-) delete mode 100644 Lazer.java delete mode 100644 Projektil.java delete mode 100644 Schild.java diff --git a/Alien.java b/Alien.java index 06775b8..4f910bf 100644 --- a/Alien.java +++ b/Alien.java @@ -5,9 +5,9 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo) */ 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. @@ -16,10 +16,8 @@ public class Alien extends Actor { 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 @@ -35,43 +33,29 @@ public class Alien extends Actor setLocation(getX() + geschwindigkeit, getY() + 36); } } - + /** - * Wenn ein Alien den unteren Rand des Bildschirms erreicht, ist das Spiel - * verloren. + * Feuert mit einer Wahrscheinlichkeit von 0,04% einen Schuss ab. */ - private void pruefeSieg() + private void schiessen() { - if (getY() >= 590) + if (Greenfoot.getRandomNumber(10000) <= 4) { - ((MyWorld)getWorld()).verloren(); + getWorld().addObject(new Laser(-5), getX(),getY()); } } - + /** - * Ueberprueft ob ein Alien von einem Projektil getroffen wurde. + * Wenn ein Alien den unteren Rand des Bildschirms erreicht, ist das Spiel verloren */ - private void pruefeKollision() + private void pruefeSieg() { - 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%. + * Ueberprueft ob ein Alien von einem Projektil getroffen wurde */ - private void schiessen() + private void pruefeKollision() { - if (Greenfoot.getRandomNumber(10000) <= 4) - { - Lazer lazer = new Lazer(); - getWorld().addObject(lazer, getX(),getY()); - } } } diff --git a/Laser.java b/Laser.java index 9dd02ef..825f142 100644 --- a/Laser.java +++ b/Laser.java @@ -1,11 +1,33 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo) - /** - * Projektile des Raumschiffs. + * Ein Laser bewegt sich mit seiner aktuellen Geschwindigkeit nach unten oder untern. + * */ -public class Laser extends Projektil +public class Laser extends Actor { - public Laser() { - geschwindigkeit = 6; + int geschwindigkeit = 1; + + /** + * Konstruktor der Klasse Laser. + */ + public Laser (int neueGeschwindigkeit) { + geschwindigkeit = neueGeschwindigkeit; + } + /** + * Act - bewegt den Laser. Diese Methode wird aufgerufen, + * sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden. + */ + public void act() + { + bewegen(); + } + + private void bewegen() + { + setLocation(getX(), getY() - geschwindigkeit); + if (getY() == 0 || getY() == 599) + { + getWorld().removeObject(this); + } } } diff --git a/Lazer.java b/Lazer.java deleted file mode 100644 index 5dbfb1f..0000000 --- a/Lazer.java +++ /dev/null @@ -1,11 +0,0 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) - -/** - * Projektile der Aliens. - */ -public class Lazer extends Projektil -{ - public Lazer() { - geschwindigkeit = -5; - } -} diff --git a/MyWorld.java b/MyWorld.java index 04b1da8..5f7feef 100644 --- a/MyWorld.java +++ b/MyWorld.java @@ -10,12 +10,13 @@ import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo) public class MyWorld extends World { int alienAnzahl = 0; - int punkte = 0; int zeit = 0; /** * Konstruktor für Objekte der Klasse MyWorld * + * Bereite die Welt fuer den Programmstart vor. + * Das heisst: Erzeuge die Anfangs-Objekte und fuege sie der Welt hinzu. */ public MyWorld() { @@ -23,41 +24,7 @@ public class MyWorld extends World super(600, 600, 1); getBackground().setColor(Color.BLACK); getBackground().fill(); - level1(); - } - - public void act() - { - zeit++; - - showText("Zeit", 500, 20); - showText("" + zeit/50, 500, 40); - - if (alienAnzahl == 0) - { - gewonnen(); - } - - showText("Punkte", 100, 20); - showText("" + punkte, 100, 40); - } - public void reduziereAlienAnzahl() - { - alienAnzahl--; - } - - public void erhoehePunkte(int p) - { - punkte = punkte + p; - } - - /** - * Bereite die Welt fuer den Programmstart vor. - * Das heisst: Erzeuge die Anfangs-Objekte und fuege sie der Welt hinzu. - */ - private void level1() - { Raumschiff raumschiff = new Raumschiff(); addObject(raumschiff, 300,565); @@ -71,22 +38,17 @@ public class MyWorld extends World } } - private void erzeugeSchilde() { - for (int m = 0; m < 4; m++) - { - for (int r = 0; r < 12; r++) - { - for (int f = 0; f < 2; f++) - { - addObject(new Schild(), 80 + 60 * f + 126 * m, 470 + 4*r); - addObject(new Schild(), 85 + 50 * f + 126 * m, 465 + 4*r); - } - for (int f = 0; f<10; f++) - { - addObject(new Schild(), 90 + 5 * f + 126 * m, 460 + 4*r); - } - } - } + public void act() + { + zeit++; + + showText("Zeit", 500, 20); + showText("" + zeit/50, 500, 40); + } + + public void reduziereAlienAnzahl() + { + alienAnzahl--; } private void gewonnen() diff --git a/Projektil.java b/Projektil.java deleted file mode 100644 index 8d73aec..0000000 --- a/Projektil.java +++ /dev/null @@ -1,29 +0,0 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) -/** - * Oberklasse aller Projektile im Spiel. - * - * Ein Projektil bewegt sich mit seiner aktuellen Geschwindigkeit nach unten. - * - */ -public class Projektil extends Actor -{ - int geschwindigkeit = 1; - - /** - * Act - bewegt das Projektil. Diese Methode wird aufgerufen, - * sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden. - */ - public void act() - { - bewegen(); - } - - private void bewegen() - { - setLocation(getX(), getY() - geschwindigkeit); - if (getY() == 0 || getY() == 599) - { - getWorld().removeObject(this); - } - } -} diff --git a/Raumschiff.java b/Raumschiff.java index 4a06e60..2abfd9d 100644 --- a/Raumschiff.java +++ b/Raumschiff.java @@ -6,16 +6,17 @@ import java.util.List; */ public class Raumschiff extends Actor { + // Markierung um zu erkennen, wenn die Leerstaste gedrueckt gehalten wird boolean leertasteGedrueckt = false; /** * Act - stellt das Verhalten des Raumschiffs dar. Diese Methode wird aufgerufen, * sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden. */ + public void act() { pruefeTastatur(); - pruefeKollision(); } /** @@ -53,20 +54,11 @@ public class Raumschiff extends Actor public void schiessen() { Greenfoot.playSound("EnergyGun.wav"); - Laser laser = new Laser(); + Laser laser = new Laser(6); getWorld().addObject(laser, getX(),getY()); } - /** - * Ueberprueft ob das Raumschiff von einem Alien getroffen wurde. - */ private void pruefeKollision() { - if (isTouching(Lazer.class)) - { - removeTouching(Lazer.class); - ((MyWorld)getWorld()).verloren(); - getWorld().removeObject(this); - } } } diff --git a/Schild.java b/Schild.java deleted file mode 100644 index 2438356..0000000 --- a/Schild.java +++ /dev/null @@ -1,27 +0,0 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo) - -/** - * Ein Schild blockt Projektile und wird danach zerstoert. - */ -public class Schild extends Actor -{ - /** - * Act - prueft ob das Schild etwas anderes beruehrt. Diese Methode wird aufgerufen, - * sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden. - */ - public void act() - { - pruefeKollision(); - } - - private void pruefeKollision() - { - if (isTouching(Lazer.class) || isTouching(Laser.class)) - { - removeTouching(Laser.class); - removeTouching(Lazer.class); - removeTouching(Schild.class); - getWorld().removeObject(this); // Zerstoere das Schild selbst - } - } -} diff --git a/project.greenfoot b/project.greenfoot index 98eb5af..f452fb6 100644 --- a/project.greenfoot +++ b/project.greenfoot @@ -1,49 +1,26 @@ #Greenfoot project file class.Alien.image=yellow.png class.Laser.image=laser.png -class.Lazer.image=laser2.png class.Raumschiff.image=player.png -class.Schild.image=shieldpart.png dependency1.from=MyWorld dependency1.to=Raumschiff dependency1.type=UsesDependency -dependency10.from=Schild -dependency10.to=Lazer -dependency10.type=UsesDependency -dependency11.from=Schild -dependency11.to=Laser -dependency11.type=UsesDependency dependency2.from=MyWorld dependency2.to=Alien dependency2.type=UsesDependency -dependency3.from=MyWorld -dependency3.to=Schild +dependency3.from=Alien +dependency3.to=Laser dependency3.type=UsesDependency -dependency4.from=Alien -dependency4.to=MyWorld +dependency4.from=Raumschiff +dependency4.to=Laser dependency4.type=UsesDependency -dependency5.from=Alien -dependency5.to=Lazer -dependency5.type=UsesDependency -dependency6.from=Alien -dependency6.to=Laser -dependency6.type=UsesDependency -dependency7.from=Raumschiff -dependency7.to=Laser -dependency7.type=UsesDependency -dependency8.from=Raumschiff -dependency8.to=MyWorld -dependency8.type=UsesDependency -dependency9.from=Raumschiff -dependency9.to=Lazer -dependency9.type=UsesDependency -editor.fx.0.height=1049 -editor.fx.0.width=634 -editor.fx.0.x=3203 -editor.fx.0.y=3 +editor.fx.0.height=0 +editor.fx.0.width=0 +editor.fx.0.x=0 +editor.fx.0.y=0 height=1049 -package.numDependencies=11 -package.numTargets=7 +package.numDependencies=4 +package.numTargets=4 project.charset=UTF-8 publish.hasSource=false publish.locked=true @@ -58,57 +35,36 @@ readme.width=49 readme.x=10 readme.y=10 simulation.speed=52 -target1.height=50 +target1.height=70 target1.name=Alien target1.showInterface=false target1.type=ClassTarget -target1.width=80 +target1.width=120 target1.x=0 target1.y=0 -target2.height=50 +target2.height=70 target2.name=Laser target2.showInterface=false target2.type=ClassTarget -target2.width=80 +target2.width=120 target2.x=0 target2.y=0 target3.height=70 -target3.name=Projektil +target3.name=MyWorld target3.showInterface=false target3.type=ClassTarget target3.width=120 target3.x=0 target3.y=0 target4.height=70 -target4.name=Lazer +target4.name=Raumschiff target4.showInterface=false target4.type=ClassTarget target4.width=120 target4.x=0 target4.y=0 -target5.height=50 -target5.name=MyWorld -target5.showInterface=false -target5.type=ClassTarget -target5.width=80 -target5.x=0 -target5.y=0 -target6.height=50 -target6.name=Raumschiff -target6.showInterface=false -target6.type=ClassTarget -target6.width=100 -target6.x=0 -target6.y=0 -target7.height=70 -target7.name=Schild -target7.showInterface=false -target7.type=ClassTarget -target7.width=120 -target7.x=0 -target7.y=0 version=3.1.0 -width=634 +width=954 world.lastInstantiated=MyWorld -xPosition=2563 +xPosition=2883 yPosition=3 -- cgit v1.2.3