Benutzer-Werkzeuge

Webseiten-Werkzeuge


wiederholung:eigeneklassen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
wiederholung:eigeneklassen [2023/06/11 13:57] – [Beispiel 3: Fliegende Rechtecke] Martin Pabstwiederholung:eigeneklassen [2023/06/11 15:01] (aktuell) – [Projekt: Einfaches Weltraumspiel (Variante Jgst. 10)] Martin Pabst
Zeile 208: Zeile 208:
 </WRAP> </WRAP>
  
 +[[.particleloesung:start|Hier geht's zur Lösung!]]
  
  
-[[.particleloesung:start|Hier geht's zur Lösung!]]+===== Projekt: Einfaches Weltraumspiel (Variante Jgst9) ===== 
 +<HTML> 
 + 
 +<div class="java-online" style="height70vh; width: 100%" data-java-online="{'withBottomPanel': true, 'id': 'Spaceshooter'}"> 
 + 
 +<script type="text/plain" title="Spaceship.java"> 
 +//Hauptprogramm: 
 +new Spaceship(400, 550); 
 + 
 +class Spaceship extends Sprite { 
 + 
 +   int spaceLastPressedTime = 0; 
 + 
 +   public Spaceship(double x, double y) { 
 +      super(x, y, SpriteLibrary.Space_Shooter_2, 4); 
 +      scale(2); 
 +   } 
 + 
 +   public void act() { 
 +      if(isKeyDown(Key.ArrowLeft)) { 
 +         move(-5, 0); 
 +      } 
 + 
 +      if(isKeyDown(Key.ArrowRight)) { 
 +         move(5, 0); 
 +      } 
 + 
 +      int time = System.currentTimeMillis(); 
 + 
 +      if(isKeyDown(" ") && time - spaceLastPressedTime > 300) { 
 +         spaceLastPressedTime = time; 
 +         new Bullet(getCenterX(), getCenterY(), 0, -20); 
 +      } 
 + 
 +      if(Math.random() < 0.05) { 
 +         new Target(); 
 +      } 
 + 
 +      if(getFirstCollidingSprite(9) != null) { 
 +         println("Game over!"); 
 +         System.exit(0); 
 +      } 
 + 
 +   } 
 + 
 +
 +</script> 
 +<script type="text/plain" title="Bullet.java"> 
 +class Bullet extends Circle { 
 + 
 +   double vx; 
 +   double vy; 
 + 
 +   public Bullet(double x, double y, double vx, double vy) { 
 +      super(x, y, 10); 
 +      this.vx = vx; 
 +      this.vy = vy; 
 +      this.sendToBack(); 
 +      this.setFillColor(0xff0000); 
 +   } 
 + 
 +   public void act() { 
 +      move(vx, vy); 
 +      if(isOutsideView()) { 
 +         destroy(); 
 +      } 
 +   } 
 +   
 +
 +</script> 
 +<script type="text/plain" title="Target.java"> 
 +public class Target extends Sprite { 
 +    
 +   double vx; 
 +   double vy; 
 + 
 +   public Target() { 
 +      super(Random.randint(0, 800), -50, SpriteLibrary.Breakin, 9); 
 +      this.vx = Random.randint(-5, 5); 
 +      this.vy = Random.randint(3, 10); 
 +   } 
 + 
 +   public void act() { 
 + 
 +      move(vx, vy); 
 + 
 +      if(getCenterY() > 620) { 
 +         destroy(); 
 +         return; 
 +      }  
 + 
 +      if(collidesWithFillColor(0xff0000)) { 
 +         Sprite explosion = new Sprite(getCenterX(), getCenterY(), SpriteLibrary.Explosion_1); 
 +         explosion.playAnimation(0, 55, RepeatType.once, 30); 
 +         destroy(); 
 +      } 
 + 
 +   } 
 + 
 +
 + 
 +</script> 
 +</div> 
 + 
 +</HTML> 
 + 
 +<WRAP center round todo 60%> 
 +**Aufgaben:** \\ 
 +  * Die Bullets sind bisher nur einfache Kreise. Schöner wäre ein geeignetes Sprite! 
 +  * Trifft ein Bullet ein Target, so soll auch das Bullet vernichtet werden. 
 +  * Ersetze die Explosion der Targets durch ein Particle System (z.B. umherfliegende Dreiecke). Trifft ein Particle das Raumschiff, soll es zerstört werden. 
 +</WRAP> 
 + 
 +===== Projekt: Einfaches Weltraumspiel (Variante Jgst. 10) ===== 
 +<HTML> 
 + 
 +<div class="java-online" style="height: 70vh; width: 100%" data-java-online="{'withBottomPanel': true, 'id': 'Spaceshooter10'}"> 
 + 
 +<script type="text/plain" title="Main.java"> 
 +new Main(); 
 + 
 +class Main extends Actor { 
 +    
 +   Spaceship spaceship; 
 +   String state; 
 + 
 +   Text caption; 
 +    
 +   int score = 0; 
 +   Text scoreDisplay; 
 + 
 +   int lastTimeSpacePressed; 
 + 
 +   public Main() { 
 + 
 +      caption = new Text(400, 200, 60, "Space shooter"); 
 +      caption.setAlignment(Alignment.center); 
 + 
 +      scoreDisplay = new Text(10, 10, 32, "0"); 
 + 
 +      spaceship = new Spaceship(400, 550, this); 
 +       
 +      setState("startscreen"); 
 +   } 
 + 
 +   public void act() { 
 +      if(state == "gamerunning") { 
 +         if(Math.random() < 0.05) { 
 +            new Target(this); 
 +         } 
 +      } else if(isKeyDown(" ") && System.currentTimeMillis() - lastTimeSpacePressed > 700) { 
 +         lastTimeSpacePressed = System.currentTimeMillis(); 
 +         switch(state) { 
 +            case "gameoverscreen" :  
 +               setState("startscreen"); 
 +               break; 
 +            case "startscreen" :  
 +               setState("gamerunning"); 
 +               break; 
 +            default :  
 +                 
 +         } 
 +      } 
 +       
 +   } 
 + 
 +   public void setState(String newState) { 
 +       
 +      switch(newState) { 
 +         case "startscreen" :  
 +            caption.setVisible(true); 
 +            spaceship.setVisible(false); 
 +            caption.setText("Space shooter"); 
 +            break; 
 +         case "gamerunning" :  
 +            score = 0; 
 +            displayScore(); 
 +            caption.setVisible(false); 
 +            spaceship.setVisible(true); 
 +            break; 
 +         case "gameoverscreen" :  
 +            caption.setVisible(true); 
 +            spaceship.setVisible(false); 
 +            caption.setText("Game over"); 
 +            break; 
 +         default :  
 +              
 +      } 
 + 
 + 
 +      state = newState; 
 +   } 
 + 
 +   public void increaseScore(int delta) { 
 +      score += delta;  
 +      displayScore(); 
 +   } 
 +    
 +   public void displayScore() { 
 +      scoreDisplay.setText(score); 
 +   } 
 + 
 +}</script> 
 +<script type="text/plain" title="Spaceship.java"> 
 +class Spaceship extends Sprite { 
 + 
 +   int spaceLastPressedTime = 0; 
 +   Main main; 
 + 
 +   public Spaceship(double x, double y, Main main) { 
 +      super(x, y, SpriteLibrary.Space_Shooter_2, 4); 
 +      this.main = main; 
 +      scale(2); 
 +   } 
 + 
 +   public void act() { 
 +      if(main.state != "gamerunning") return; 
 +       
 +      if(isKeyDown(Key.ArrowLeft)) { 
 +         move(-5, 0); 
 +      } 
 + 
 +      if(isKeyDown(Key.ArrowRight)) { 
 +         move(5, 0); 
 +      } 
 + 
 +      int time = System.currentTimeMillis(); 
 + 
 +      if(isKeyDown(" ") && time - spaceLastPressedTime > 300) { 
 +         spaceLastPressedTime = time; 
 +         new Bullet(getCenterX(), getCenterY(), 0, -20); 
 +      } 
 + 
 +      if(getFirstCollidingSprite(9) != null) { 
 +         main.setState("gameoverscreen"); 
 +      } 
 + 
 +   } 
 + 
 +
 +</script> 
 +<script type="text/plain" title="Bullet.java"> 
 +class Bullet extends Circle { 
 + 
 +   double vx; 
 +   double vy; 
 + 
 +   public Bullet(double x, double y, double vx, double vy) { 
 +      super(x, y, 10); 
 +      this.vx = vx; 
 +      this.vy = vy; 
 +      this.sendToBack(); 
 +      this.setFillColor(0xff0000); 
 +   } 
 + 
 +   public void act() { 
 +      move(vx, vy); 
 +      if(isOutsideView()) { 
 +         destroy(); 
 +      } 
 +   } 
 +   
 +}</script> 
 +<script type="text/plain" title="Target.java"> 
 +public class Target extends Sprite { 
 +    
 +   double vx; 
 +   double vy; 
 +   Main main; 
 + 
 +   public Target(Main main) { 
 +      super(Random.randint(0, 800), -50, SpriteLibrary.Breakin, 9); 
 +      this.vx = Random.randint(-5, 5); 
 +      this.vy = Random.randint(3, 10); 
 +      this.main = main; 
 +   } 
 + 
 +   public void act() { 
 + 
 +      move(vx, vy); 
 + 
 +      if(getCenterY() > 620) { 
 +         destroy(); 
 +         return; 
 +      }  
 + 
 +      if(collidesWithFillColor(0xff0000)) { 
 +         Sprite explosion = new Sprite(getCenterX(), getCenterY(), SpriteLibrary.Explosion_1); 
 +         explosion.playAnimation(0, 55, RepeatType.once, 30); 
 +         destroy(); 
 +         main.increaseScore(10); 
 +      } 
 + 
 +   } 
 + 
 +
 +</script> 
 +</div> 
 + 
 +</HTML> 
 + 
 +<WRAP center round todo 60%> 
 +**Aufgaben:** \\ 
 +  * Die Bullets sind bisher nur einfache Kreise. Schöner wäre ein geeignetes Sprite! 
 +  * Trifft ein Bullet ein Target, so soll auch das Bullet vernichtet werden. 
 +  * Ersetze die Explosion der Targets durch ein Particle System (z.B. umherfliegende Dreiecke). Trifft ein Particle das Raumschiff, soll es zerstört werden. 
 +  * Das Raumschiff soll drei Leben haben. Schön wäre eine Lebensanzeige rechts unten, die aus drei kleinen Raumschiffen besteht... 
 +  * Es soll verschiedene Gegner geben, die sich verschieden verhalten! 
 +  * Es soll Powerups geben, die man aufsammeln kann. Sie bewirken, dass das Raumschiff bessere Fähigkeiten bekommt (verschiedene Kanonen, Schild, ...) 
 +</WRAP>
  
  
wiederholung/eigeneklassen.1686491845.txt.gz · Zuletzt geändert: 2023/06/11 13:57 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki