aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2024-07-12 23:26:08 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2024-07-12 23:49:24 +0200
commit6bd59689a2366fe24c1e92debee74dc1409758a7 (patch)
treeb9a73dff6b219f41fae6fc53a812feb4dfa6bf82
parentcb14c229e6e39bbae9d5aa3f3e3d2e8ac842609b (diff)
downloadspaceinvaders-6bd59689a2366fe24c1e92debee74dc1409758a7.tar.gz
spaceinvaders-6bd59689a2366fe24c1e92debee74dc1409758a7.zip
remove Lazer and Projektil class, collision detection and victory logicvorlage3
-rw-r--r--Alien.java44
-rw-r--r--Laser.java32
-rw-r--r--Lazer.java11
-rw-r--r--MyWorld.java64
-rw-r--r--Projektil.java29
-rw-r--r--Raumschiff.java14
-rw-r--r--Schild.java27
-rw-r--r--project.greenfoot80
8 files changed, 75 insertions, 226 deletions
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