import Prog1Tools.*;

/** Dieses GameModel realisiert das Game of Life */
public class Life implements GameModel {

  /** Hier wird die aktuelle Petrischale gespeichert */
  private Petrischale zellen;

  /** Konstruktor. Uebergeben werden die Laenge und
   die Breite des Spielfeldes sowie die Zahl der
   Zellen, die zu Anfang leben sollen.
   */
  public Life(int breite, int hoehe, int lebendig) {
    zellen = new Petrischale(breite,hoehe,lebendig);
  }

  /** Anzahl der Zeilen */
  public int rows() {
    return zellen.getBreite();
  }

  /** Anzahl der Spalten */
  public int columns() {
    return zellen.getLaenge();
  }

  /** Feuer-Knopf */
  public String getFireLabel() {
    return "Naechste Generation";
  }

  /** Message - Text */
  public String getMessages() {
    return
      "Spiel das Spiel des Lebens.\n" +
      "Schaue, was passiert,\n" +
      "Wenn das Leben eben\n" +
      "vor sich hinmutiert.";
  }

  /** Gibt den Namen des Spieles als String zurueck */
  public String getGameName() {
    return "Game of Life";
  }

  /** Zustand der aktuellen Zelle */
  public char getContent(int row, int col) {
    return
      (zellen.getInhalt(row,col).istLebendig()) ?
      'O' : ' ';
  }

  /** Schalte eine bestimmte Zelle um */
  public void buttonPressed(int row,int col) {
    zellen.schalteUm(row,col);
  }
  
  /** Berechne die naechste Generation */
  public void firePressed() {
    zellen = new Petrischale(zellen);
  }
  
  /** Hauptprogramm */
  public static void main(String[] args) {
    new GameEngine(
      new Life(IOTools.readInteger("Anz. der Zeilen  :"),
               IOTools.readInteger("Anz. der Spalten :"),
               IOTools.readInteger("Anz. der Lebenden:")));
  }
}
