Turtle-Grafik mit Java

Forschungsprojekt PHBern  
HomeOnline-Editor startenPython TurtlegrafikAndroid TurtlegrafikJava-Online

Turtle Applets

Applets sind Java-Programme, die im Internet ausgeführt werden können. Ihre Ausführung wird von einer HTML-Datei aus gestartet und mit der virtuellen Maschine eines Browsers ausgeführt. Applets werden von der Klasse JApplet abgeleitet. Die Klasse TurtleArea erzeugt ein Applet-Fenster mit einer Turtle.

Im Beispiel TuApplet1.java zeichnet eine Turtle in einem eingebetteten Fenster eine einfache Quadratfigur.

Beispiel zeigen (TuApplet1.java)

Beispiel im Online-Editor bearbeiten

// TuApplet1.java

import javax.swing.*;
import ch.aplu.turtle.*;

public class TuApplet1 extends JApplet implements Runnable
{
  private Turtle t;

  public void init()
  {
    TurtleArea ta = new TurtleArea(this);
    t = new Turtle(ta);
  }

  public void start()
  {
    new Thread(this).start();
  }

  public void run()
  {
    t.showTurtle();
    for (int = 0; j < 10; j++)
    {
      for (int = 0; i < 4; i++)
      {
        t.forward(100);
        t.right(90);
      }
      t.left(36); 
    }   
  }
  
  public static void main(String[] args){}
}
 

Das Applet kann in eine beliebige HTML-Seite eingebettet werden. Der compilierte Programmcode zusammen mit der Klassenbibliothek Turtle wird beim Klick auf den Button Compilieren im Online-Editor in eine Archiv-Datei verpackt. Diese kann mit Klick auf TuApplet1.jar auf dem Benutzercomputer gespeichert werden.

Eine minimale HMTL-Seite zum Aufruf des Applets sieht wie folgt aus:

<html>
<body>
<h2>Turtle Applet 1</h2>
<applet code="TuApplet1.class" archive="TuApplet1.jar" width="400" height="400"></applet>
</body>
</html>
 
Die Datei TuApplet1.jar muss zusammen mit der aufrufenden HTML-Datei TuApplet1.html in das gleiche Verzeichnis auf den Webserver kopiert werden.

Erklärungen zum Programmcode:

void start()
Die Callbackmethode start() wird automatisch gestartet, wenn die HTML-Seite aufgerufen wird, oder wenn man auf die HTML-Seite zurückkommt.

showTurtle()

Im Gegensatz zu einem normalen Turtleprogramm wird die Turtle erst nach dem Aufruf von showTurtle() sichtbar

Thread

Threads werden verwendet, um mehrere Programmteile nebeneinander (parallel) laufen zu lassen. In unserem Beispiel ist notwendig für das Zeichnen einen neuen Thread zu erzeugen. Wird ohne Thread in der Methode start() gezeichnet, so erscheint die Grafik erst nachdem start() zu Ende gelaufen ist.
implements Runnable Da Java nur einfache Vererbung kennt, kann mit Hilfe von Interfaces eine spezielle Klassenkonstruktion eingesetzt werden. Klasse TurtleApplet1 wird mit dem Interface Runnable implementiert. Mehr über Interfaces siehe Literatur (A. Plüss: Java Exemplarisch).
public static void main(String[] args){} Die Methode main() braucht unser online-Compiler, um die Hauptklasse zu finden. Falls Sie mit einer lokalen Entwicklungsumgebung arbeiten, können Sie diese Zeile weglassen.

Anmerkung: Wenn man mit einer anderen Java-IDE (NetBeans, Eclipse) arbeitet, wird die jar-Datei TuApplet1.jar, die die Klassenbibliothek Turtle enthält, nicht automatisch erstellt. Auf den Webserver müssen dann die Dateien Dateien TuApplet1.class, aplu5.jar und TuApplet1.html kopiert werden. Der Applet-Tag sieht dann wie folgt aus:
<applet code="TuApplet1.class" archive="aplu.jar" width="400" height="400"></applet>


Im Beispiel TuApplet2.java wird eine rekursive Grafik gezeichnet.

Beispiel zeigen (TuApplet2.java)

Beispiel im Online-Editor bearbeiten

// TuApplet2.java

import javax.swing.*;
import ch.aplu.turtle.*;

public class TuApplet2 extends JApplet implements Runnable
{
  private Turtle t;

  public void init()
  {
    TurtleArea ta = new TurtleArea(this);
    t = new Turtle(ta);
  }

  public void start()
  {
    new Thread(this).start();
  }

  public void run()
  {
    t.hideTurtle();
    flocke(100);
  }

  void flocke(int seite)
  {
     if (seite < 5)
       return;
     for (int = 0; i < 6; i++)
     {
       t.forward(seite);
       flocke(seite/3);
       t.back(seite);
       t.right(60);
    }
  }
  
  public static void main(String[] args){}
}
 

Eine minimale HMTL-Seite zum Aufruf des Applets TuApplet2 sieht wie folgt aus:

<html>
<body>
<h2>Turtle Applet 2</h2>
<applet code="TuApplet2.class" archive="TuApplet2.jar" width="400" height="400"></applet>
</body>
</html>
 

Im Beispiel TuApplet3.java wird das Zeichen einer Figur so lange wiederholt, bis das Browserfenster geschlossen wird. Der Abbruch des Applets wird mit der Callback-Methode stop() erreicht, welche mit Hilfe eines booleschen Flags die run-Methode zum Abbruch bringt.

Beispiel zeigen (TurtleApplet3.java)

Beispiel im Online-Editor bearbeiten

// TuApplet3.java

import javax.swing.*;
import ch.aplu.turtle.*;

public class TuApplet3 extends JApplet implements Runnable
{
  private boolean isActive = true;
  private Turtle t;

  public void init()
  {
    TurtleArea ta = new TurtleArea(this);
    t = new Turtle(ta);
  }

  public void start()
  {
    new Thread(this).start();
  }

  public void stop()
  {
    isActive = false// Causes thread to stop
  }

  public void run()
  {
    t.showTurtle();
       
    while (isActive)
    {
      t.setPos(-100-100);
      spirale();
      t.sleep(500);
      t.clear();
    }
  }

  private void spirale()
  {
    double = 200;
    while (a > 5)
    {
      t.forward(a);
      t.right(90);
      a = * 0.9;
    }
  }
  
  public static void main(String[] args){}
}
 

Eine minimale HMTL-Seite zum Aufruf des Applets TuApplet3 sieht wie folgt aus:

<html>
<body>
<h2>Turtle Applet 3</h2>
<applet code="TuApplet3.class" archive="TuApplet3.jar" width="400" height="400"></applet>
</body>
</html>
 

Im Beispiel TuApplet4.java wird das Zeichen einer Figur so lange wiederholt, bis das Browserfenster geschlossen wird. Der Abbruch des Applets wird mit der Callback-Methode stop() erreicht, welche mit Hilfe eines booleschen Flags die run-Methode zum Abbruch bringt.

Beispiel zeigen (TuApplet4.java)

Beispiel im Online-Editor bearbeiten

// TuApplet4.java

import javax.swing.*;
import ch.aplu.turtle.*;
import java.awt.Color;

public class TuApplet4 extends JApplet implements Runnable
{
  private Turtle t;
  private Turtle u;

  public void init()
  {
    TurtleArea ta = new TurtleArea(this);
    t = new Turtle(ta);
    u = new Turtle(t);
  }

  public void start()
  {
    new Thread(this).start();
  }

  public void run()
  {
    u.setColor(Color.yellow);
    t.setPos(-100-100);
    u.setColor(Color.yellow);
    u.setPenColor(Color.red);
    u.setPos(-100, 100);
    u.right(90);
    t.showTurtle();
    u.showTurtle();
    
    for (int = 0; i < 10; i++)
    {
      step(t);
      step(u);
    }
  }
  
  void step(Turtle t)
  {
    t.forward(20);
    t.right(90);
    t.forward(20);
    t.left(90);
  }
  
  public static void main(String[] args){}
}
 

Eine minimale HMTL-Seite zum Aufruf des Applets TuApplet4 sieht wie folgt aus:

<html>
<body>
<h2>Turtle Applet 4</h2>
<applet code="TuApplet4.class" archive="TuApplet4.jar" width="400" height="400"></applet>
</body>
</html>
 

Aufgaben