import java.awt.Point;

public class Spielfeld {
    private GraphicsWindow w;
    
    private Zelle[][] zellen = new Zelle[Geom.WIDTH][Geom.HEIGHT];


    public void zeichnen() {
	for (int i = 0; i <= Geom.HEIGHT; i++) {
	    Point anf = new Point(0, Geom.CELLSIZE * i);
	    Point end = new Point(Geom.WIDTH * Geom.CELLSIZE,
				  Geom.CELLSIZE * i);

	    w.drawLine(anf, end);
	
	}
	for (int i = 0; i <= Geom.WIDTH; i++) {
	    Point anf = new Point(Geom.CELLSIZE * i, 0);
	    Point end = new Point(Geom.CELLSIZE * i, 
				  Geom.HEIGHT * Geom.CELLSIZE);

	    w.drawLine(anf, end);
	
	}
    }

    Spielfeld(GraphicsWindow win) {
	w = win;
	for (int i = 0; i < Geom.WIDTH; i++) 
	    for (int j = 0; j < Geom.HEIGHT; j++) {
		zellen[i][j] = new Zelle(i, j, false, w);
		
	    }
	this.zeichnen();
	boolean fertig = false;
	while (!fertig) {
	    Point pos = w.mouseClick();
	    fertig = 
		pos.x > Geom.WIDTH * Geom.CELLSIZE ||
		pos.y > Geom.HEIGHT * Geom.CELLSIZE;
	    if (!fertig) {
		int i = pos.x / Geom.CELLSIZE;
		int j = pos.y / Geom.CELLSIZE;
		zellen[i][j].wirdLebendig();
		zellen[i][j].ueberschreiben();
	    }
	}
    }
    public void runde() {
	for (int i = 0; i < Geom.WIDTH; i++)
	    for (int j = 0; j < Geom.HEIGHT; j++) {
		int anzahl = 0;
		for (int di = -1; di <= 1; di++)
		    for (int dj = -1; dj <= 1; dj++) {
			if ( !(di == 0 && dj == 0)) {
			    int nb_x = 
				(Geom.WIDTH + i + di) % 
				Geom.WIDTH;
			    int nb_y = (Geom.HEIGHT + j + dj) % 
				Geom.HEIGHT;
			    if (zellen[nb_x][nb_y].istLebendig()) 
				anzahl++;
			}
		    }
		if (anzahl <= 1 || anzahl >= 4)
		    zellen[i][j].stirbt();
		else if (anzahl == 3)
		    zellen[i][j].wirdLebendig();
		else 
		    zellen[i][j].nichtsPassiert();
	    }
	for (int i = 0; i < Geom.WIDTH; i++)
	    for (int j = 0; j < Geom.HEIGHT; j++) 
		zellen[i][j].ueberschreiben();

		
    }	

}
 
