Benutzer-Werkzeuge

Webseiten-Werkzeuge


projects:spacedebris:aufgabe1:loesung:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
projects:spacedebris:aufgabe1:loesung:start [2021/03/20 15:29] – angelegt Martin Pabstprojects:spacedebris:aufgabe1:loesung:start [2021/12/29 11:29] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 ====== Lösung zur Aufgabe 1 ====== ====== Lösung zur Aufgabe 1 ======
 +
 +  * a) Ergänze die Methode ''act'' der Klasse ''Spaceship'' so, dass das Raumschiff auch nach rechts und links fliegen kann. \\ **Herausforderung (freiwillig):** Werden bspw. die Tasten Pfeil-nach-rechts und Pfeil-nach-oben gleichzeitig gedrückt, so soll sich das Raumschiff nicht schneller bewegen als beim Herunterdrücken nur einer einzigen Pfeiltaste. \\ \\ 
 +  * 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.//
 +
 +
 {{ youtube>ymibRZokmBQ?large }} {{ youtube>ymibRZokmBQ?large }}
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 400px; width: 100%" data-java-online="{'withBottomPanel': true, 'id': 'spacedebris2'}">
 +
 +<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 {
 +   
 +   double w = Math.random() * 10 - 5;
 +   double vx = Math.random() * 10 - 15;
 +   double vy = Math.random() * 10 - 5;
 +
 +   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(vx, vy);
 +      rotate(w);
 +
 +      if(getCenterX() < 100 && isOutsideView()) {
 +         destroy();
 +      }
 +   }
 +
 +
 +}
 +</script>
 +<script type="text/plain" title="Spaceship.java">
 +new Spaceship();
 +
 +
 +class Spaceship extends Sprite {
 +   
 +   double v = 4.0;
 +
 +   Spaceship() {
 +      super(50, 300, SpriteLibrary.Ship_Adrian, 0, ScaleMode.nearest_neighbour);
 +      scale(1.5);
 +   }
 +
 +   public void act() {
 +      
 +      double vx = 0;
 +      double vy = 0;
 +
 +      if(isKeyDown(Key.ArrowUp) && getCenterY() > 20) {
 +         vy = -v;
 +      }
 +      if(isKeyDown(Key.ArrowDown) && getCenterY() < getWorld().getHeight() - 20) {
 +         vy = v;
 +      }
 +      if(isKeyDown(Key.ArrowLeft) && getCenterX() > 45) {
 +         vx = -v;
 +      }
 +      if(isKeyDown(Key.ArrowRight) && getCenterX() < getWorld().getWidth() / 2) {
 +         vx = v;
 +      }
 +
 +      double l = Math.sqrt(vx * vx + vy * vy);
 +      if(l > 0) {
 +         vx = vx / l * v;
 +         vy = vy / l * v;
 +         move(vx, vy);
 +      }
 +
 +   }
 +
 +}
 +
 +</script>
 +
 +</div>
 +
 +</HTML>
projects/spacedebris/aufgabe1/loesung/start.1616250544.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki