Kapitel 5: "Verwendung einfacher Datenstrukturen"

"GameOfLife.java"


import java.util.Random; // erläutern wir später

public class GameOfLife{
public static void gebeAus(boolean[][] m){
// Ein "X" symbolisiert eine lebendige Zelle
for (int i=0; i<10; i++){
for (int j=0; j<10; j++){
if (m[i][j]) System.out.print("X ");
else System.out.print(" ");
}
System.out.println();
}
}

// Diese Methode lässt sich sicherlich schöner schreiben - wir
// nutzen hier die Tatsache aus, dass Java einen Fehler erzeugt,
// wenn wir auf ein Element außerhalb der Matrix zugreifen
public static int zaehleUmgebung(boolean[][] m, int x, int y){
int ret = 0;
for (int i=(x-1);i<(x+2);++i){
for (int j=(y-1);j<(y+2);++j){
try{
if (m[i][j])
ret += 1;
}
catch (IndexOutOfBoundsException e){}
}
}
// einen zuviel mitgezaehlt?
if (m[x][y])
ret -= 1;

return ret;
}

public static void main(String[] args){
// unsere Welt soll aus 10x10 Elemente bestehen
boolean[][] welt = new boolean[10][10];
boolean[][] welt_neu = new boolean[10][10];

// **********************************************************
// Erzeugt eine zufällige Konstellation von Einsen und Nullen
// in der Matrix welt. Die Chancen liegen bei 50%, dass eine
// Zelle lebendig ist.
Random generator = new Random();
double zufallswert;
for (int i=0; i<10; i++){
for (int j=0; j<10; j++){
zufallswert = generator.nextDouble();
if (zufallswert>=0.5)
welt[i][j] = true;
}
}
// **********************************************************

// Ausgabe der ersten Generation
System.out.println("Generation 1");
GameOfLife.gebeAus(welt);

int nachbarn;
for (int i=0; i<10; i++){
for (int j=0; j<10; j++){
// Zaehle die Nachbarn
nachbarn = zaehleUmgebung(welt, i, j);

if (welt[i][j]){
// Regel 1, 2:
if ((nachbarn<2) || (nachbarn>3))
welt_neu[i][j] = false;

// Regel 3:
if ((nachbarn==2) || (nachbarn==3))
welt_neu[i][j] = true;
}
else {
// Regel 4:
if (nachbarn==3)
welt_neu[i][j] = true;
}
}
}
// Ausgabe der zweiten Generation
System.out.println("Generation 2");
GameOfLife.gebeAus(welt_neu);
}
}

Picksel Media Marco Block © 2006-2009 – ImpressumKontakt
Gestaltung und Umsetzung Tobias Losch, www.picksel-media.de