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 14:34] – [Projekt: Einfaches Weltraumspiel] Martin Pabstwiederholung:eigeneklassen [2023/06/11 15:01] (aktuell) – [Projekt: Einfaches Weltraumspiel (Variante Jgst. 10)] Martin Pabst
Zeile 211: Zeile 211:
  
  
-===== Projekt: Einfaches Weltraumspiel =====+===== Projekt: Einfaches Weltraumspiel (Variante Jgst. 9) =====
 <HTML> <HTML>
  
Zeile 316: Zeile 316:
  
 </HTML> </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.1686494040.txt.gz · Zuletzt geändert: 2023/06/11 14:34 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki