[leicht bis mittel-schwer] Game Of Life

Hier mal mein Programmcode in Java:

Code:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ConwaySteuerung {
	public ConwaySteuerung() {
		int value = 0;
		String filename = "field1.dat";
		try {
			value = countLines(filename);
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try {
			new Conway(stringArrayToBoolean(readField(value, filename)));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private String[] readField(int value, String filename) throws IOException {
		String[] field = new String[value];
		FileReader fr = new FileReader(filename);
	    BufferedReader br = new BufferedReader(fr);
	    for(int i = 0; i<value; i++) {
		   field[i] = br.readLine();
	    }
	    br.close();
	    return field;
	}
	
	private boolean[][] stringArrayToBoolean(String[] a) {
		System.out.println(a[0]+"\n"+a[1]);
		boolean[][] field = new boolean[a.length][a[0].length()];
		for(int i = 0; i<a.length; i++) {
			System.out.println(i);
			for(int j = 0; j<a[i].length(); j++) {
				field[i][j] = a[i].charAt(j) == 'X' ? true  : false;
			}
		}
		
		return field;
		
	}
	
	private int countLines(String filename) throws IOException {
		FileReader fr = new FileReader(filename);
	    BufferedReader br = new BufferedReader(fr);
	    String text;
	    int zeilen = -1;
	    
	    do{
	    	zeilen++;
	    	text = br.readLine();	    	
	    }while(text != null);
	    
	    return zeilen;
	}
	public static void main(String[] args) {
		new ConwaySteuerung();
	}

}

Code:
import java.awt.Point;

public class Conway {

	public Conway(boolean[][] a) {
		Spielfeld s = new Spielfeld(a);

		while(true) {
			clear();
			printSpielfeld(s);					
			simulate(s);				
			warten(500);
		}
	}
	
	private void warten(int i) {
		try {
			Thread.sleep(i);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}

	public void printSpielfeld(Spielfeld s) {
		char cell = 'X';
		char noCell = '.';
		for(int i = 0; i<s.feld.length; i++) {
			System.out.println();
			for(int j = 0; j <  s.feld[i].length; j++) {
				System.out.print(s.feld[i][j] ? " "+cell : " "+noCell); 
			}
		}
	}
	
	private void simulate(Spielfeld s) {
		int temp1=0, temp2=0;
		Point[] create = new Point[s.feld.length*s.feld[0].length];
		Point[] remove = new Point[s.feld.length*s.feld[0].length];
		
		for(int i = 0; i<s.feld.length; i++) {					
			for(int j = 0; j<s.feld[i].length; j++) {
				if(s.countNeighbours(new Point(j, i)) == 3) create[temp1++] = new Point(j,i);
				if(s.countNeighbours(new Point(j, i)) <  2) remove[temp2++] = new Point(j,i);
				if(s.countNeighbours(new Point(j, i)) >  3) remove[temp2++] = new Point(j,i);				
			}			
		}
		s.createCells(create);
		s.removeCells(remove);
	}
	
	private void clear() {
		System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" +
				"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");		
	}
}

Code:
import java.awt.Point;

public class Spielfeld {
	public boolean[][] feld;
	
	public Spielfeld(boolean[][] a) {
		this.feld = a;
	}
	
	public String removeCell(Point p) {
		feld[p.y][p.x] = false;
		return "Changed Coord("+p.x+"|"+p.y+") to "+false;
	}
	
	public void removeCells(Point...p) {
		for(int i = 0; i<p.length && p[i]!= null; i++) {
			removeCell(p[i]);		
		}	
	}
	
	public String createCell(Point p) {
		feld[p.y][p.x] = true;
		return "Changed Coord("+p.x+"|"+p.y+") to "+true;
	}
	
	public void createCells(Point...p) {
		for(int i = 0; i<p.length && p[i]!= null; i++) {
			createCell(p[i]);
		}	
	}
	
	public int countNeighbours(Point p) {		
		boolean[][] a = create3x3(p);
		int value= a[1][1] ? -1 : 0;
		
		for(int i = 0; i < a.length; i++) {
			for(int j = 0; j < a.length; j++) {				
				if(a[i][j]) value++;
			}
		}			
		return value;		
	}
	
	private boolean[][] create3x3(Point m) {
		boolean[][] a = new boolean[3][3];
		int x, y;
		for(int i = 0; i<3; i++) {
			for(int j = 0; j<3; j++) {
				x = m.x+j-1;
				y = m.y+i-1;
				if(x == -1 || y == -1 || x > feld[j].length-1 || feld.length-1 < y) {
					a[i][j] = false;
				} else {
					a[i][j] = feld[y][x];
				}
				
			}
		}
		return a;		
	}

	

}

Es ist derzeit möglich eine Textdatei einzulesen (Name kann im Quellcode von ConwaySteuerung angegeben werden) und das Feld zu simulieren. Das Feld wird nicht auf Fehler (falsche Zeichen, Unterschiedliche Länge der Zeilen) überprüft und direkt vom Programm eingelesen.
Werde es mit der Zeit vielleicht noch etwas anpassen, dass es zum Beispiel schon vorgefertigte Spielfelder gibt, oder welche über die Konsole eingegeben werden können.
JavaDoc mach ich evtl. auch noch.
Hat Spaß gemacht die Aufgabe, vor allem, da man viel mit Arrays machen muss und ich da noch nicht ganz so fit bin. Lerne erst seit etwa einem halben Jahr im Unterricht Java. Falls es etwas gibt, das ich hätte besser machen können, schreibt es mir bitte. :)
 
Zurück
Oben