import java.awt.Point;
import java.awt.Color;

public class Zelle {

    /** Position der Zelle */
    private int x;
    private int y;


    private GraphicsWindow w;

    /** Aktueller Zustand der Zelle */
    private boolean lebendig;

    /** Zustand in der Folgerunde */
    private boolean wirdLebendig;

    /** Die Zelle ist in der Folgerunde lebendig */
    public void wirdLebendig() {
	wirdLebendig = true;
    }

    /** Die Zelle ist in der Folgerunde tot */
    public void stirbt() {
	wirdLebendig = false;
    }

    /** keine Aenderung */
    public void nichtsPassiert() {
	wirdLebendig = lebendig;
    }

    /** Ueberschreiben des Folgezustands in den Jetztzustand */
    public void ueberschreiben() {
	if (lebendig != wirdLebendig) {
	    lebendig = wirdLebendig;
	    this.zeichnen();
	}
    }

    /** Konstruktor fuer Zellen. Die konstruierte Zelle wird gleich gezeichnet.
        @param pos_x x-Koordinate der Zelle (in Gitterkoordinaten beginnend bei 0)
 	@param pos_y y-Koordinate der Zelle (in Gitterkoordinaten beginnend bei 0)
	@param zustand Anfangszustand der Zelle (true = "lebendig" 
	@param win Grafikfenster in dem gezeichnet wird */
    Zelle(int pos_x, int pos_y, boolean zustand, 
	  GraphicsWindow win) {
	x = pos_x;
	y = pos_y;
	lebendig = zustand;
	wirdLebendig = zustand;
	w = win;
	this.zeichnen();
    }

    /** zeichnet die Zelle neu */
    private void zeichnen() {
	Color color;
	if (lebendig)
	    color = Color.red;
	else
	    color = Color.white;
	w.drawBox(new Point(Geom.CELLSIZE * x + 1, 
			    Geom.CELLSIZE * y + 1),
		  Geom.CELLSIZE - 1,
		  Geom.CELLSIZE - 1,
		  color);
    }

    /** Gibt den Zustand der Zelle aus
        @returns true, falls lebendig, false falls tot */
    public boolean istLebendig() {
	return lebendig;
    }
    
}
