Game of life in einem FensterVisualisieren

lupe22

Neues Mitglied
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:

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);
   }
}
 

Kaffeebohn

Bekanntes Mitglied
Hiho,

ich kann dir zwar nicht direkt helfen, aber ich hab auch mal ein Game of life programmiert das ist schon ne Weile her. Es ist ne bisl blöde Lösung gewesen da ich alles aus einzelnen Frames zusammengebastelt habe wenn ich mich richtig erinnere ;-)

Aber vielleicht hilfts dir ja trotzdem..

Grüße,
Kaffeebohn
Java:
import java.awt.Color;

import javax.swing.JPanel;


public class Field extends JPanel
{
	public boolean lebt			= false;
	public boolean wird_sterben = false;
	public boolean wird_geboren = false;
	
	
	public Field(int size, int pos_x, int pos_y)
	{
		System.out.println("Pos: " + pos_x + " / " + pos_y);

		this.setBounds(pos_x, pos_y, size, size);
	

	}
	
	

	public void recalc()
	{
		if(wird_sterben)	lebt = false;
		if(wird_geboren)	lebt = true;
		
		wird_geboren = false;
		wird_sterben = false;
		
		
		if(lebt)
		{
			this.setBackground(Color.BLACK);
		}
		else
		{
			this.setBackground(Color.WHITE);
		}
		
	}
	
	
	public void showMe()
	{
		if(lebt)
		{
			this.setBackground(Color.BLACK);
			System.out.println("leber");
		}
		else
		{
			this.setBackground(Color.WHITE);
		}
		
	}
	
	

}


Java:
import java.awt.Container;

import javax.swing.JApplet;



/* Implementierung von Conways Spiel des Lebens als JApplet
 * 
 * 
 * Spielregeln übernommen von:
 * 
 * [url=http://de.wikipedia.org/wiki/Conways_Spiel_des_Lebens]Conways Spiel des Lebens ? Wikipedia[/url]
 * 
 */

public class MainFrame extends JApplet implements Runnable
{
	private 	Container	c;
	
	private		int			Window_Width	= 1024;							// Breite des Fensters in Pixel
	private		int			Window_Height	= 1024;							// Höhe   des Fensters in Pixel
	private		int			Field_Size		= 8;							// Seitenlänge der einzelnen Quadrate
																			// sollte restloser Teiler von Widow_Height und Window_Width sein
	
	private		int			Fields_Hor		= Window_Width / Field_Size;	// Anzahl der Horizontalen Felder
	private		int			Fields_Ver		= Window_Height / Field_Size;	// Anzahl der Vertikalen Felder
	
	private		Field[][]	Fields;											// Liste aller Felder, aus denen das Spielfeld besteht
	private		int			Generation		= 0;							// Generation, in der sich das Spiel gerade befindet
		
	
	
	public void init()
	{
		
		Container c = this.getContentPane();
		c.setLayout(null);
		
		Fields = new Field[Fields_Hor][Fields_Ver];
		
		
		// ------------------------------------------------------------- Alle Felder erzeugen und adden
		for(int i=0; i<Fields_Hor; i++)
		{
			for(int j=0; j<Fields_Ver; j++)
			{
				int Pos_X = 0 + Field_Size * i;
				int Pos_Y = 0 + Field_Size * j;
				
				Fields[i][j] = new Field(Field_Size, Pos_X, Pos_Y);
				c.add(Fields[i][j]);
			}
		}
		// ------------------------------------------------------------- 

		
		
		 // Totales Chaos ("F") bis zur ~ 1100. Generation
		Fields[55][55].lebt = true;
		Fields[56][55].lebt = true;
		Fields[54][56].lebt = true;
		Fields[55][56].lebt = true;
		Fields[55][57].lebt = true;
	
		

		
		

		for(int i=0; i<Fields_Hor; i++)
		{
			for(int j=0; j<Fields_Ver; j++)
			{
				Fields[i][j].showMe();
			}
		}
	
		Thread a = new Thread(this);
		a.start();
		
		setSize(Window_Width, Window_Height);
		setVisible(true);

	}
	
	public void run()
	{
		try
		{
			Thread.sleep(6000);
		}
		catch(Exception e) {}
		for(int i=0; i<1500; i++)
		{
			try
			{
				System.out.println("Generation: " + Generation++);
				Thread.sleep(100);
				
				recalculate();
	
			}
			catch(Exception e)
			{
				
			}
		}
	}
	

	public void recalculate()
	{
		
		// ----------------------------------------- Alle Regeln ausführen

		for(int i=0; i<Fields_Hor; i++)
		{
			for(int j=0; j<Fields_Ver; j++)
			{
				if(Fields[i][j].lebt == false)
				{
					
					if(this.countLivingNeighbours(i, j) == 3)
					{
						Fields[i][j].wird_geboren = true;
					}
				}
				else
				{
					if(this.countLivingNeighbours(i,j) < 2)
					{
						Fields[i][j].wird_sterben = true;
					}
					
					if(this.countLivingNeighbours(i, j) > 3)
					{
						Fields[i][j].wird_sterben = true;
					}
				}
				
			}
		}
		
		
		
		
		// ----------------------------------------- Alle Felder neu zeichnen

		for(int i=0; i<Fields_Hor; i++)
		{
			for(int j=0; j<Fields_Ver; j++)
			{
				Fields[i][j].recalc();
			}
		}
		
	}
	public int countLivingNeighbours(int cor_x, int cor_y)
	{
		int living_neighbours = 0;
		
		if(cor_x > 1 && cor_y > 1 && cor_x < (Fields_Hor-1) && cor_y < (Fields_Ver-1))
		{
		if(	Fields[cor_x-1][cor_y]		.lebt == true)	{	living_neighbours++;	}
		if(	Fields[cor_x+1][cor_y]		.lebt == true)	{	living_neighbours++;	}
		if(	Fields[cor_x][cor_y-1]		.lebt == true)	{	living_neighbours++;	}
		if(	Fields[cor_x][cor_y+1]		.lebt == true)	{	living_neighbours++;	}
		
		if(	Fields[cor_x-1][cor_y-1]	.lebt == true)	{	living_neighbours++;	}
		if(	Fields[cor_x-1][cor_y+1]	.lebt == true)	{	living_neighbours++;	}
		if(	Fields[cor_x+1][cor_y-1]	.lebt == true)	{	living_neighbours++;	}
		if(	Fields[cor_x+1][cor_y+1]	.lebt == true)	{	living_neighbours++;	}
		}
		
		
		return living_neighbours;
	}
	
	public int countDeadNeighbours(int cor_x, int cor_y)
	{
		return (8 - countLivingNeighbours(cor_x, cor_y)); 
		
	}

	
	
	
	
	
	
	
}
 
T

Tomate_Salat

Gast
Game of Life kannte ich vorher nicht,
hab mir auch mal ein Animationsprogramm dafür geschrieben und mir einfach mal mithilfe dessen eine Animation erstellen lassen, die rückwärts iwie cool ist ;)



(Klickt aufs Bild, wenn es sich nochmal abspielen soll [es öffnet sich im neuen Fenster])

[Es hat 542 GEnerationen, aber ab der 542 änderte sich nichts mehr wirklich]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Game of Life Nachbarn zählen Java Basics - Anfänger-Themen 20
P Moore Nachbarschaft-Game of Life Java Basics - Anfänger-Themen 1
L Conways Game of Life Java Basics - Anfänger-Themen 4
J Game of life Java Basics - Anfänger-Themen 3
E Belebeste Area im Game of Life suchen Java Basics - Anfänger-Themen 0
B Wer kennt einen Link für vollständiges, leichtverständliches "Game of Life"? Java Basics - Anfänger-Themen 1
C Game of life Java Basics - Anfänger-Themen 14
P Game of Life Java Basics - Anfänger-Themen 18
C Conways Game of Life / "Waldbrandsimulation": wieso temporäres Hilfs-Array?! Java Basics - Anfänger-Themen 8
K Game of Life Implementierung Java Basics - Anfänger-Themen 30
D Game of Life - Nachbarn zählen Java Basics - Anfänger-Themen 8
Developer_X Game of Life Java Basics - Anfänger-Themen 10
D Game of Life Java Basics - Anfänger-Themen 14
L Wizzard-Game Java Basics - Anfänger-Themen 3
Jxhnny.lpz bouncing Ball (Brick-Breaker-Game) Java Basics - Anfänger-Themen 1
V Probleme Guessing Game Java Basics - Anfänger-Themen 8
P 2D Game Java Basics - Anfänger-Themen 6
B Verwirrender Game Loop Java Basics - Anfänger-Themen 6
B "Snake"-Game verbuggt Java Basics - Anfänger-Themen 0
K Game of live Java Basics - Anfänger-Themen 4
F Java Collectors Game Hilfe Java Basics - Anfänger-Themen 4
C Wie kann ich jetzt von der Game.java auf die Timer.java zugreifen? Java Basics - Anfänger-Themen 6
F Game-Engine für textbasierendes Spiel: Architektur? Java Basics - Anfänger-Themen 9
D Textfield im Game ,Problem: while-Schleife Java Basics - Anfänger-Themen 1
K Gutes Java 3D Game Tutorial gesucht Java Basics - Anfänger-Themen 6
Java-Insel Game-Konzept Java Basics - Anfänger-Themen 10
G Game Loop Problem Java Basics - Anfänger-Themen 9
T Kleines Game mit Kollision Java Basics - Anfänger-Themen 2
V Start ins Java Game Development Java Basics - Anfänger-Themen 22
I Programm Game & AR Java Basics - Anfänger-Themen 13
T Anagram Game - warum ist es auf 2 Packages aufgeteilt? Java Basics - Anfänger-Themen 3
S 3d-game java3d/eigene API Java Basics - Anfänger-Themen 4
C Pong Game Java Basics - Anfänger-Themen 2
H What is the Life Cycle of an Object Created Within/Outside of a Servlet? Will that item be destroyed after the session ends? Java Basics - Anfänger-Themen 1
B Erste Schritte Way of life ohne import - Habe Beispiel, macht Unfug Java Basics - Anfänger-Themen 21
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 23
Zrebna Fragen zu einem Klassendiagramm Java Basics - Anfänger-Themen 8
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
F 2x 16bit Werte zu einem 32bit und dann splitten mit 0xb Java Basics - Anfänger-Themen 1
J JSON mit einem JPanel Java Basics - Anfänger-Themen 3
F Einem GIT repository ein Projekt hinzufügen Java Basics - Anfänger-Themen 1
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
J Auf einem JLabel Linien Malen Java Basics - Anfänger-Themen 1
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
Kumora ArrayIndexOutOfBoundsException bei einem Sortierverfahren Java Basics - Anfänger-Themen 2
I Viereck / Rechteck Prüfung innerhalb einem bestimmten Bereich Java Basics - Anfänger-Themen 2
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
Substring in einem String finden Java Basics - Anfänger-Themen 13
J Fehlerbehandlung an einem Beispiel Java Basics - Anfänger-Themen 8
I ResultSet aus meiner SQL-Abfrage in einem JTextfield ausgeben. Java Basics - Anfänger-Themen 1
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
I Dateigröße von einem InputStream oder byte[] bekommen Java Basics - Anfänger-Themen 2
H Compiler-Fehler Klasse in einem Package wird nicht gefunden bzw. akzeptiert Java Basics - Anfänger-Themen 12
S Algorithmus entwicklen, der zu einem gegebenen Datum die Jahreszeit ermittelt Java Basics - Anfänger-Themen 13
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
A Elemente in einem Array Java Basics - Anfänger-Themen 5
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
berserkerdq2 Wie gebe ich den Pfad zu einer Datei an, die in einem Ordner in Eclipse ist? Java Basics - Anfänger-Themen 1
M Objekt in einem Objekt speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
L Gridmuster in einem Array Java Basics - Anfänger-Themen 2
D spezifische Knoten in einem Baum zählen Java Basics - Anfänger-Themen 9
X Erste Schritte Hilfe bei einem kleinen Spiel. Java Basics - Anfänger-Themen 19
O Array mit einem Zeichen vergleichen Java Basics - Anfänger-Themen 1
B Brauche Hilfe zu einem Code Java Basics - Anfänger-Themen 5
J Zahlen bis zu einem bestimmten Grenzwert ausgeben Java Basics - Anfänger-Themen 11
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
Igig1 Wie lasse ich dir Werte in einem Array zusammenrücken? Java Basics - Anfänger-Themen 4
W Methode, die mit einem Datum arbeitet? Java Basics - Anfänger-Themen 22
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
C Hilfe bei einem Anfängerprojekt Java Basics - Anfänger-Themen 25
U Char zu einem String machen Java Basics - Anfänger-Themen 1
U Kann man bei Java gleich mehrere Bedingungen prüfen in der If, aber in einem "Satz"? Java Basics - Anfänger-Themen 1
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
S Längster Pfad zwischen zwei Vertices in einem Graph Java Basics - Anfänger-Themen 3
I Upload File zu einem Webservice Java Basics - Anfänger-Themen 17
Naxon89 Input/Output Ein PDF in einem BLOB umwandeln um ihn dann als PDF wieder anzuzeigen Java Basics - Anfänger-Themen 3
Kotelettklopfer Mehrere Projekte in einem Git verwalten Java Basics - Anfänger-Themen 10
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
E JPanels auf gleicher Höhe (Y-Achse) in einem FlowLayout platzieren Java Basics - Anfänger-Themen 7
N Aus einem String die Anzahl der Vokale auslesen Java Basics - Anfänger-Themen 40
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
M Von einem Menü Methode aus anderer Klasse ausführen, die errechnete Werte in Datei schreibt. Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben