/*
Datei............: Aufg1425.java
Projekt..........: Einführung in die Java-Programmierung
Erstellt.........: 28.11.97, Guido Krüger
Geändert.........: --
Aufgabe..........: Musterlösung zu Aufgabe 14.25
Kommentare.......:

Die Methode drawRegularPolygon kann auf zwei unterschiedliche Arten
implementiert werden. Einmal könnte sie als private Methode der
Klasse Aufg1425 realisiert werden und dabei das aktuelle 
TurtleGraphics-Objekt als Parameter übergeben bekommen. Die
zweite Variante, die hier implementiert wurde, erweitert die
Klasse TurtleGraphics um die Methode drawRegularPolygon und
deklariert so eine neue Klasse MyTurtleGraphics. Diese wird
dann anstelle von TurtleGraphics innerhalb von paint verwendet,
um die Ausgaben zu erzeugen.
*/
import java.awt.*;
import java.awt.event.*;

public class Aufg1425
extends Frame
{
  public static void main(String[] args)
  {
	Aufg1425 wnd = new Aufg1425();
	wnd.setSize(400,300);
	wnd.setVisible(true);
  }

  public Aufg1425()
  {
	super("Aufg1425");
	addWindowListener(
      new WindowAdapter() {
	    public void windowClosing(WindowEvent event) {
		  System.exit(0);
		}
	  }
	);
	setBackground(Color.lightGray);
  }

  public void paint(Graphics g)
  {
	MyTurtleGraphics tg = new MyTurtleGraphics(g, this);

	//Turtle an die Ausgangsposition bewegen
	tg.turnLeft(90);
	tg.moveForward(150);
	tg.turnRight(90);
	//Vielecke zeichnen
	for (int i = 3; i <= 5; ++i) {
	  tg.dropPen();
	  tg.drawRegularPolygon(i, 60);
	  tg.liftPen();
	  tg.turnRight(90);
	  tg.moveForward(100);
	  tg.turnLeft(90);
	}
  }
}


/**
 * Erweiterung der Klasse TurtleGraphics um die Methode
 * drawRegularPolygon.
 */
class MyTurtleGraphics
extends TurtleGraphics
{
  public MyTurtleGraphics(Graphics g, Container wnd)
  {
	super(g, wnd);
  }

  /**
   * Zeichnet an der aktuellen Position ein regelmäßiges Vieleck
   * mit edges Ecken, die jeweils eine Seitenlänge von size Pixeln
   * haben.
   */
  public void drawRegularPolygon(int edges, int size)
  {
	for (int i = 0; i < edges; ++i) {
	  moveForward(size);
	  turnRight(360 / edges);
	}
  }
}

