Benutzer-Werkzeuge

Webseiten-Werkzeuge


projects:spacedebris:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
projects:spacedebris:start [2021/03/14 22:54] – [Aufgabe 1:] Martin Pabstprojects:spacedebris:start [2021/12/29 11:29] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 11: Zeile 11:
 {{ youtube>1tul8nVL4ug?large }} {{ youtube>1tul8nVL4ug?large }}
  
 +<HTML>
  
 +<div class="java-online" style="height: 400px; width: 100%" data-java-online="{'withBottomPanel': true, 'id': 'spacedebris1'}">
 +
 +<script type="text/plain" title="SpaceDebrisGame.java">
 +new SpaceDebrisGame();
 +
 +
 +class SpaceDebrisGame extends Actor {
 +   
 +   Spaceship spaceship;
 +
 +   Group debrisGroup = new Group();
 +
 +   Group bullets = new Group();
 +
 +   double debrisRate = 0.06;
 +
 +   SpaceDebrisGame() {
 +      super();
 +      spaceship = new Spaceship();
 +   }
 +
 +   public void act() {
 +      
 +      if(Math.random() < debrisRate) {
 +         Debris debris = new Debris();
 +         debrisGroup.add(debris);
 +      }
 +
 +      if(isKeyDown(" ")) {
 +         Bullet b = new Bullet(spaceship.getCenterX(), spaceship.getCenterY());
 +         bullets.add(b);
 +      }
 +
 +
 +   }
 +
 +
 +
 +
 +
 +}
 +
 +</script>
 +<script type="text/plain" title="Bullet.java">
 +class Bullet extends Circle {
 +
 +   Bullet(double x, double y) {
 +      super(x, y, 5);
 +   }
 +
 +   public void act() {
 +      move(30, 0);
 +      if(isOutsideView()) {
 +         destroy();
 +      }
 +   }
 +   
 +}
 +</script>
 +<script type="text/plain" title="Debris.java">
 +while(true) {
 +   new Debris();
 +}
 +
 +
 +
 +class Debris extends Rectangle {
 +   
 +   Debris() {
 +      
 +      super(830, Math.random() * 500 + 50, Math.random() * 150 + 50, Math.random() * 150 + 50);
 +
 +      setFillColor(Color.randomColor(50));
 +      setAlpha(Math.random() * 0.5 + 0.5);
 +
 +   }
 +
 +   
 +   public void act() {
 +      move(-10, 0);
 +
 +      if(getCenterX() < 100 && isOutsideView()) {
 +         destroy();
 +      }
 +   }
 +
 +
 +}
 +</script>
 +<script type="text/plain" title="Spaceship.java">
 +new Spaceship();
 +
 +
 +class Spaceship extends Sprite {
 +   
 +   Spaceship() {
 +      super(50, 300, SpriteLibrary.Ship_Adrian, 0, ScaleMode.nearest_neighbour);
 +      scale(1.5);
 +   }
 +
 +   public void act() {
 +      if(isKeyDown(Key.ArrowUp) && getCenterY() > 20){
 +         move(0, -4);
 +      }
 +      if(isKeyDown(Key.ArrowDown) && getCenterY() < getWorld().getHeight() - 20 ){
 +         move(0, 4);
 +      }
 +   }
 +
 +
 +}
 +</script>
 +
 +</div>
 +
 +</HTML>
 ===== Aufgabe 1: ===== ===== Aufgabe 1: =====
 Bearbeite diese Aufgabe im Workspace "Space Debris Game", den Du in Deiner Entwicklungsumgebung findest. \\ \\  Bearbeite diese Aufgabe im Workspace "Space Debris Game", den Du in Deiner Entwicklungsumgebung findest. \\ \\ 
Zeile 17: Zeile 134:
   * b) Ergänze die Klasse ''Debris'' so, dass sich jedes Müll-Teil mit einer individuellen Winkelgeschwindigkeit dreht. \\ //Tipp: Du brauchst ein Attribut ''w'' für die Winkelgeschwindigkeit, das im Konstruktor initialisiert wird. In der ''act''-Methode wird das Müll-Teil dann einfach nur um ''w'' gedreht.// \\ \\    * b) Ergänze die Klasse ''Debris'' so, dass sich jedes Müll-Teil mit einer individuellen Winkelgeschwindigkeit dreht. \\ //Tipp: Du brauchst ein Attribut ''w'' für die Winkelgeschwindigkeit, das im Konstruktor initialisiert wird. In der ''act''-Methode wird das Müll-Teil dann einfach nur um ''w'' gedreht.// \\ \\ 
   * c) **Freiwillig:** Ergänze die Klasse ''Debris'' so, dass die Müll-Teile verschieden schnell sind. \\ // Tipp: Du brauchst Attribute ''vx'' und ''vy'', deren Werte im Konstruktur zufällig gesetzt werden (z.B. ''vx'' zwischen -15 und -5 und ''vy'' zwischen -5 und 5). In der Methode ''act'' wird dann um (vx, vy) verschoben.//   * c) **Freiwillig:** Ergänze die Klasse ''Debris'' so, dass die Müll-Teile verschieden schnell sind. \\ // Tipp: Du brauchst Attribute ''vx'' und ''vy'', deren Werte im Konstruktur zufällig gesetzt werden (z.B. ''vx'' zwischen -15 und -5 und ''vy'' zwischen -5 und 5). In der Methode ''act'' wird dann um (vx, vy) verschoben.//
 +
 +[[.aufgabe1:loesung:start|Hier geht's zur Lösung!]]
 +
 +
 +====== Weiterentwicklung ======
 +  * Kollision bullet - debris mit Explosion
 +  * Kollision spaceship-debris mit Lebensanzeige
 +  * Zustände startscreen, gameRunning und gameOver mit Methode setZustand
 +  * Schüsse zeitlich beschränken
 +{{ youtube>f62a0x4QG54?large }}
 + \\ \\ 
 +[[.standNachWeiterentwicklung1:start|Hier der Programmzustand nach der Weiterentwicklung]]
 +===== Aufgabe 2 =====
 +Ihr findet einen neuen Workspace "Space Debris Game 2" in Eurer Entwicklungsumgebung, der den aktuellen Stand der Entwicklung wiederspiegelt. Bitte bearbeitet dort die folgenden Aufgaben.
 +  - Rechts oben soll eine Punkteanzeige zu sehen sein, die anfangs 0 anzeigt. Nach jedem Treffer wird sie erhöht, am besten um so mehr, je kleiner das getroffene Rechteck ist. Wird nach "Game Over" ein neues Spiel begonnen, so wird die Punkteanzeige wieder auf 0 zurückgesetzt.
 +  - **Freiwillig:** Mit fortschreitender Spieldauer sollen die Rechtecke und das Raumschiff schneller werden. Zudem sollen mehr Rechtecke je Zeiteinheit von rechts hereinfliegen.
 +
 +[[.aufgabe2:loesung:start|Hier geht's zur Lösung!]]
projects/spacedebris/start.1615758864.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki