import java.awt.*;
import java.awt.event.*;

/**
 * Diese Klasse repräsentiert PacMan-Objekte.
 */
public class PacMan extends Canvas implements ActionListener {

  /** Kommando "nach links gehen". */
  public final static String MOVE_LEFT = "left";
  /** Kommando "nach rechts gehen". */
  public final static String MOVE_RIGHT = "right";
  /** Kommando "nach oben gehen". */
  public final static String MOVE_UP = "up";
  /** Kommando "nach unten gehen". */
  public final static String MOVE_DOWN = "down";

  /** Schrittgröße int Pixeln. */
  private final static int STEP_SIZE = 15;
  /** PacMans Breite. */
  private final static int PAC_MAN_WIDTH = 30;
  /** PacMans Höhe. */
  private final static int PAC_MAN_HEIGHT = 30;

  /** Der Konstruktor. */
  public PacMan () {
    setSize(PAC_MAN_WIDTH, PAC_MAN_HEIGHT);
  }

  /**
   * Callback-Methode - wird automatisch aktiviert, wenn eine Aktion
   * geschieht.
   * @param actionEvent Das Aktionsereignis.
   */
  public void actionPerformed (ActionEvent actionEvent) {
    // derzeitige Position PacMans lesen
    Point location = getLocation();
    String actionCommand = actionEvent.getActionCommand();
    if (MOVE_LEFT.equals(actionCommand)) {
      // Position nach links verschieben
      location.x -= STEP_SIZE;
    }
    else if (MOVE_RIGHT.equals(actionCommand)) {
      // Position nach rechts verschieben
      location.x += STEP_SIZE;
    }
    else if (MOVE_UP.equals(actionCommand)) {
      // Position nach oben verschieben
      location.y -= STEP_SIZE;
    }
    else if (MOVE_DOWN.equals(actionCommand)) {
      // Position nach unten verschieben
      location.y += STEP_SIZE;
    }
    // neu berechnete Postion wirksam machen
    setLocation(location);
  }

  /**
   * Diese Methode zeichnet PacMan neu. Sie wird vom AWT-Rahmenwerk
   * automatisch aufgerufen.
   * @param graphics Der Grafikkontext zum zeichnen.
   */
  public void paint (Graphics graphics) {
    // zunächst schwarz zeichnen ...
    graphics.setColor(Color.black);
    // ... einen Kreis
    graphics.fillOval(0,0,PAC_MAN_WIDTH,PAC_MAN_HEIGHT);
    // dann in der Hintergrundfarbe zeichnen ...
    graphics.setColor(getBackground());
    // ... PacMans Mund (in Form eines Dreiecks bzw. Polygons)
    int[] xCoords = {PAC_MAN_WIDTH / 2, PAC_MAN_WIDTH, PAC_MAN_WIDTH};
    int[] yCoords = {PAC_MAN_HEIGHT / 2, PAC_MAN_HEIGHT / 4,
		     PAC_MAN_HEIGHT * 3 / 4};
    int coordCount = Math.min(xCoords.length, yCoords.length);
    graphics.fillPolygon(xCoords, yCoords, coordCount);
  }
}

