Hallo Leute
Ich habe versucht das GameOfLife aus dem Buch "Java Intensivkurs von Marco Block" (Auflage 2 Kapitel 4) in einem Fenster und nicht nur im Texteditor zu visualisieren.(Mit Farbigen Quadrätchen als Zellen). Da ich noch nicht so viel Erfahrung mit java habe, bin ich recht schnell an meine Grenzen gestossen. Mein grösstes Problem ist: Wie sage ich welche Kästchen lebendig oder tot sind damit sie dann entsprechend angefärbt werden ?
Kann mir jemand einen Anstoss oder Lösungsansatz geben?
Vielen Dank schon zum Vornherein.
Lukas
Hier wie es dann etwa aussehen könnte
Hier der code zum Bild:
Und noch das GameOfLife:
Ich habe versucht das GameOfLife aus dem Buch "Java Intensivkurs von Marco Block" (Auflage 2 Kapitel 4) in einem Fenster und nicht nur im Texteditor zu visualisieren.(Mit Farbigen Quadrätchen als Zellen). Da ich noch nicht so viel Erfahrung mit java habe, bin ich recht schnell an meine Grenzen gestossen. Mein grösstes Problem ist: Wie sage ich welche Kästchen lebendig oder tot sind damit sie dann entsprechend angefärbt werden ?
Kann mir jemand einen Anstoss oder Lösungsansatz geben?
Vielen Dank schon zum Vornherein.
Lukas
Hier wie es dann etwa aussehen könnte
Hier der code zum Bild:
Java:
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
public class Spielbrett extends Frame {
public int hoehe;
public int breite;
public int kaestchenbreite;
public int kaestchenhoehe;
public int kaestchenabstand;
public int abstandZuRandX;
public int abstandZuRandY;
public int kaestchenZuKaestchen;
public Spielbrett(int h, int b, int kb, int kh, int ka, int aX, int aY, int kzk){
hoehe = h;
breite = b;
kaestchenbreite = kb;
kaestchenhoehe = kh;
kaestchenabstand = ka;
abstandZuRandX = aX;
abstandZuRandY = aY;
kaestchenZuKaestchen = kzk;
}
public Spielbrett(String titel){
breite = 500;
hoehe = 300;
kaestchenbreite = 10;
kaestchenhoehe = 10;
kaestchenabstand = 1;
abstandZuRandX = 12;
abstandZuRandY = 30;
kaestchenZuKaestchen = kaestchenabstand+kaestchenbreite;
setTitle(titel);
setSize(breite, hoehe);
setBackground(Color.lightGray);
setForeground(Color.white);
//Wir verwenden eine innere anonyme Klasse, kurz und knapp
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setVisible(true);
}
public void paint(Graphics g){
Random r = new Random();
for (int x=abstandZuRandX; x < breite; x+=kaestchenZuKaestchen)
for (int y=abstandZuRandY; y < hoehe; y+=kaestchenZuKaestchen){
int i=0;
aussen:
while (i<40){
g.setColor(Color.red);
g.fillRect(abstandZuRandX+((r.nextInt(breite))*kaestchenZuKaestchen),
abstandZuRandY+((r.nextInt(hoehe))*kaestchenZuKaestchen),
kaestchenbreite, kaestchenhoehe);
// g.setColor(Color.green);
// g.fillRect(abstandZuRandX+i*15, abstandZuRandY+i*2*kaestchenZuKaestchen, kaestchenbreite, kaestchenhoehe);
i++;
}
g.setColor(Color.blue);
g.fillRect(x, y, kaestchenbreite, kaestchenhoehe);
g.setColor(Color.black);
g.drawRect(x-1, y-1, kaestchenbreite, kaestchenhoehe);
}
}
public static void main(String[] args){
Spielbrett t = new Spielbrett("GameOfPlants");
}
}
Und noch das GameOfLife:
Java:
import java.util.Random;
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);
}
}