Benutzer-Werkzeuge

Webseiten-Werkzeuge


objektbeziehungen:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
objektbeziehungen:start [2023/01/10 08:29] – angelegt Martin Pabstobjektbeziehungen:start [2024/04/09 12:06] (aktuell) – [Bewegen des Geistes] Martin Pabst
Zeile 14: Zeile 14:
    }    }
 </code> </code>
-Die Attribute ''body'' und ''eyes'' nennt man **Objektreferenzen**. \\ \\ +Die Attribute ''body'' und ''eyes'' nennt man **Objektreferenzen**. Genaugenommen werden innerhalb des ''ghost''-Objekts nämlich nicht die beiden anderen Objekte gespeichert, sondern nur die Adressen, unter denen diese Objekte im Arbeitsspeicher abgelegt sind.  \\ \\ 
 Instanzieren wir ein neues ''Ghost''-Objekt mit ''Ghost g = new Ghost(400, 300)'', so sieht das im Objektdiagramm so aus: Instanzieren wir ein neues ''Ghost''-Objekt mit ''Ghost g = new Ghost(400, 300)'', so sieht das im Objektdiagramm so aus:
 {{ :objektbeziehungen:pasted:20230110-092218.png?300 }} {{ :objektbeziehungen:pasted:20230110-092218.png?300 }}
 Im Klassendiagramm stellen wir so eine Objektbeziehung folgendermaßen dar: Im Klassendiagramm stellen wir so eine Objektbeziehung folgendermaßen dar:
-{{ :objektbeziehungen:pasted:20230110-092649.png?300 }}+{{ :objektbeziehungen:pasted:20230110-154251.png?400 }}
  
 \\ \\  \\ \\ 
Zeile 25: Zeile 25:
 </WRAP> </WRAP>
  
 +===== Erstes Projekt: Die Klasse Ghost =====
 +<WRAP center round todo 60%>
 +{{ :objektbeziehungen:pasted:20230110-094508.png}}
 +Wir wollen eine Klasse ''Ghost'' erstellen, die einen Geist darstellt. Dabei soll es möglich sein, im Konstruktor die Farbe des Geistes festzulegen, durch die Methode ''setDirection(String direction)'' die Richtung seiner Augen und durch die Methode ''setDead(boolean dead)'' den Zustand lebend/tot.
 +</WRAP>
 +
 +
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 40vh; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Ghost'}">
 +
 +<script type="text/plain" title="Ghost.java">
 +Ghost g = new Ghost(400, 300, 0x308020);
 +g.setDirection("right");
 +g.setDirection("top");
 +g.setDead(true);
 +
 +
 +class Ghost {
 +   private Sprite body;
 +   private Sprite eyes;
 +
 +   private String direction = "none";
 +   private boolean isDead = false;
 +   private int color;
 +
 +   Ghost(double x, double y, int color) {
 +      body = new Sprite(x, y, SpriteLibrary.PMan, 15);
 +      eyes = new Sprite(x, y, SpriteLibrary.PMan, 19);
 +      this.color = color;
 +
 +      changeEyes();
 +      changeBody();
 +
 +      body.playAnimation(15, 16, RepeatType.loop, 4);
 +   }
 +
 +   void setDead(boolean isDead) {
 +      this.isDead = isDead;
 +      changeEyes();
 +      changeBody();
 +   }
 +
 +   void setDirection(String direction) {
 +      this.direction = direction;
 +      changeEyes();
 +   }
 +
 +   private void changeEyes() {
 +      if(isDead) {
 +         eyes.setImageIndex(21);
 +      } else {
 +         switch(direction) {
 +            case "top"
 +               eyes.setImageIndex(19);
 +               break;
 +            case "bottom"
 +               eyes.setImageIndex(20);
 +               break;
 +            case "left"
 +               eyes.setImageIndex(18);
 +               break;
 +            case "right"
 +               eyes.setImageIndex(17);
 +               break;
 +            default : 
 +               eyes.setImageIndex(19); 
 +         }
 +      }
 +   }
 +
 +   private void changeBody() {
 +      if(isDead) {
 +         body.tint(0x2828ff);
 +         body.setAlpha(0.8);
 +      } else {
 +         body.tint(color);
 +         body.setAlpha(1.0);
 +      }
 +   }
 +
 +}
 +
 +</script>
 +
 +</div>
 +
 +</HTML>
 +
 +
 +===== Bewegen des Geistes =====
 +<WRAP center round info 80%>
 +
 +Um den Geist flüssig zu bewegen, müssen wir ihn in genau festgelegten Zeitabständen um jeweils ein kleines bisschen verschieben. Wir müssen daher erreichen, dass eine von uns programmierte Methode in genau festgelegten Zeitabständen immer wieder aufgerufen wird. Die Online-IDE stellt uns dafür die Klasse ''Actor'' zur Verfügung und stellt sicher, dass die Methode ''act'' von Actor-Objekten genau 30-mal je Sekunde aufgerufen wird. Wir le
 +Die Klasse ''Actor'' besitzt eine Methode ''act'', die 30-mal pro Sekunde aufgerufen wird. Wir modellieren unsere Klasse ''Ghost'' daher als Unterklasse von ''Actor'' und überschreiben die ''act''-Methode.
 +</WRAP>
 +
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 40vh; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Ghost2a'}">
 +
 +<script type="text/plain" title="Ghost.java">
 +Ghost g = new Ghost(400, 300, 0x308020);
 +g.setDirection("right");
 +g.setDirection("top");
 +g.setDead(true);
 +
 +
 +class Ghost extends Actor {
 +   private Sprite body;
 +   private Sprite eyes;
 +
 +   private String direction = "none";
 +   private boolean isDead = false;
 +   private int color;
 +
 +   Ghost(double x, double y, int color) {
 +      body = new Sprite(x, y, SpriteLibrary.PMan, 15);
 +      eyes = new Sprite(x, y, SpriteLibrary.PMan, 19);
 +      this.color = color;
 +
 +      changeEyes();
 +      changeBody();
 +
 +      body.playAnimation(15, 16, RepeatType.loop, 4);
 +   }
 +
 +   public void act() {
 +      if(isKeyDown("a")) {
 +         body.move(-4, 0);
 +         eyes.move(-4, 0);
 +      }
 +
 +      if(isKeyDown("d")) {
 +         body.move(4, 0);
 +         eyes.move(4, 0);
 +      }
 +
 +      if(isKeyDown("w")) {
 +         body.move(0, -4);
 +         eyes.move(0, -4);
 +      }
 +
 +      if(isKeyDown("s")) {
 +         body.move(0, 4);
 +         eyes.move(0, 4);
 +      }
 +   }
 +
 +   void setDead(boolean isDead) {
 +      this.isDead = isDead;
 +      changeEyes();
 +      changeBody();
 +   }
 +
 +   void setDirection(String direction) {
 +      this.direction = direction;
 +      changeEyes();
 +   }
 +
 +   private void changeEyes() {
 +      if(isDead) {
 +         eyes.setImageIndex(21);
 +      } else {
 +         switch(direction) {
 +            case "top"
 +               eyes.setImageIndex(19);
 +               break;
 +            case "bottom"
 +               eyes.setImageIndex(20);
 +               break;
 +            case "left"
 +               eyes.setImageIndex(18);
 +               break;
 +            case "right"
 +               eyes.setImageIndex(17);
 +               break;
 +            default : 
 +               eyes.setImageIndex(19); 
 +         }
 +      }
 +   }
 +
 +   private void changeBody() {
 +      if(isDead) {
 +         body.tint(0x2828ff);
 +         body.setAlpha(0.8);
 +      } else {
 +         body.tint(color);
 +         body.setAlpha(1.0);
 +      }
 +   }
 +
 +}
 +</script>
 +
 +</div>
 +
 +</HTML>
  
objektbeziehungen/start.1673339399.txt.gz · Zuletzt geändert: 2023/01/10 08:29 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki