Game of Life

passi

Mitglied
Hi, im Moment programmiere ich das Game of Life von John H. Conway (Conways Spiel des Lebens ? Wikipedia)

Ich habe einen Algorythmus, um die benachbarten Zellen zu überprüfen. In diesem Beispiel für die linke obere, ausgehend von der aktuellen Zelle. (Eine Zelle hat 8 Nachbarzellen (vertikal, horizontal und diagonal))

Im folgenden Beispiel habe ich eine Kantenlänge von 5. Die Zellen 1|0, 2|1, 2|2, und 2|3 leben. Dies sieht dann so aus:

.*...
..*..
..*..
..*..
.....

Wenn ich jetzt überprüfe, ob Zelle 2|1 einen lebenden Nachbarn hat (In diesem Fall wird wie oben schon erwähnt nur nach einem Nachbarn oben links gesucht) Dies trifft zu, denn die Zelle 1|0 lebt auch). Ich frage mich nur, warum die ausgeklammerte Methode nicht funktioniert, die Methode darunter funktioniert einwandfrei.

Java:
public boolean lives(int x, int y) {
		boolean lives = false;
		if (myArray[y][x] == "*") {
			lives = true;
		}
		return lives;
	}

	public int getAnzahlLebenderNachbarn(int x, int y) {
		int counter = 0;

//		if(lives([(x - 1 + 5) % 5][(y - 1 + 5) % 5])){
//			counter++;
//		}

		if (myArray[(y - 1 + 5) % 5][(x - 1 + 5)
				% 5] == "*") {
			counter++;
		}
		
		return counter;
	}
}

MfG
passi
 

passi

Mitglied
lives ist eine Methode, die eine lokale Variable lives enthält. Gut, ich gebe zu die Namenswahl ist nicht sonderlich klug. Jedoch existiert die lokale Variable nach Verlassen der Methode lives nicht mehr. Also sollte dort nicht das Problem liegen.
 
G

Gast2

Gast
Deine Methode erwartet zwei Parameter. Du übergibst aber nur einen, die Syntax da ist auch noch falsch. Das ist kein Array ;)
 

Kiri

Bekanntes Mitglied
Java:
if(lives([(x - 1 + 5) % 5][(y - 1 + 5) % 5])){...

Deine Methode lives erwartet zwei Argumente, du übergibst aber nur 1!
 
Als erstes solltest du das Array immer in der Reihenfolge x,y benutzen,
sonst macht es die Sache etwas unübersichtlich.

Dann würde ich dir raten ein IDE z.B Eclipse zu benutzen,
dann fallen Syntaxfehler schneller auf
Java:
//die Methode lives muss ohne [] aufgerufen werden
// lives(2,2) ok
// lives([2],[2]) falsch
//      if(lives([(x - 1 + 5) % 5][(y - 1 + 5) % 5])){
//          counter++;
//      }
      
if(lives((x - 1 + 5) % 5,(y - 1 + 5) % 5)){
         counter++;
}

so sollte es gehen
 

passi

Mitglied
Hä?
lives definiert zwei Parameter: lives(int x, int y). Ich übergebe der lives-Methode doch zwei Argumente:

Java:
if(lives([(x - 1 + 5) % 5][(y - 1 + 5) % 5]))

Lassen wir die if-Anweisung mal weg:

Java:
lives([(x - 1 + 5) % 5][(y - 1 + 5) % 5])

dann habe ich folgenden Aufruf (ausgerechnet):
Wenn ich jetzt überprüfe, ob Zelle 2|1 einen lebenden Nachbarn hat

Java:
lives([1][0])
... bei diesem Aufruf bekomme ich
Java:
true
zurück.
 
M

Marcinek

Gast
Hallo,

in java ist das hier:

Code:
lives([1][0])
nur ein Argument.

Eventuell gibt es bei der Methode eine überlagerung? ;D - Aber dann würde es hier auch keine Fehler geben.

Gruß,
 

passi

Mitglied
@ der-escrimador: Du warst schneller, ich habe deine Antwort zu spät gelesen. Danke, das war mein Fehler. Ist natürlich logisch. Ich habe meinen Fehler ja gerade im letzten Post selbst geschrieben^^. Manchmal sieht man den Wald vor lauter Bäumen nicht. Vielen Dank!
 

passi

Mitglied
Ich hätte da am Rande noch eine Frage. Wenn ich zum Beispiel eine Ausgabe auf der Konsole habe. Eine Methode aufrufe und dieser Argumente mitgebe.

Java:
System.out.println("Anzahl der lebendenden Nachbarn: " + myGrid.getAnzahlLebenderNachbarn(2, 1));

Ist es möglich die gerade übergebenen Argumente mit in die Ausgabe zu bekommen?
So ist die aktuelle Ausgabe:

Java:
Anzahl der lebendenden Nachbarn: 2

So stelle ich mir es vor:

Java:
Anzahl der lebendenden Nachbarn der Zelle 2|1: 2
 
M

Marcinek

Gast
Einige Leute denken zwar, dass man um 1 Uhr nachts gute Programme schreibt, aber so ist es nicht ^^

Code:
System.out.println("Anzahl der lebendenden Nachbarn: " + myGrid.getAnzahlLebenderNachbarn(2, 1) + " in Spalte 2,1");

Also es geht nicht "automatisch"
 
Doch eigendlich ist um 1Uhr ganz gut :)

Java:
	int x = 2;
	int y = 1;
	System.out.println("Anzahl der lebendenden Nachbarn der Zelle " 
        + x+ "|" + y + ":\t" + myGrid.getAnzahlLebenderNachbarn(x, y));
 

passi

Mitglied
Danke für die Antworten, das ist aber nicht ganz das, was ich gemeint habe (Ich habe mich vielleicht nicht genau genug ausgedrückt). Was ist, wenn ich z.B. mehrere Anweisungen habe, in denen ich nach den lebenden Nachbarn einer Zelle frage:

Java:
System.out.println("Anzahl der lebendenden Nachbarn: " + myGrid.getAnzahlLebenderNachbarn(2, 1));
System.out.println("Anzahl der lebendenden Nachbarn: " + myGrid.getAnzahlLebenderNachbarn(0, 4));
System.out.println("Anzahl der lebendenden Nachbarn: " + myGrid.getAnzahlLebenderNachbarn(1, 1));
System.out.println("Anzahl der lebendenden Nachbarn: " + myGrid.getAnzahlLebenderNachbarn(3, 2));

Somit fällt die Möglichkeit von der-escrimador weg. Es würde so aber gehen, wie Marcinek es gepostet hat:

Java:
System.out.println("Anzahl der lebendenden Nachbarn: " + myGrid.getAnzahlLebenderNachbarn(2, 1) + " in Spalte 2,1");
System.out.println("Anzahl der lebendenden Nachbarn: " + myGrid.getAnzahlLebenderNachbarn(0, 4) + " in Spalte 0,4");

Sollten die Argumente erst zur Laufzeit (z.B. von einer Benutzereingabe) übergeben werden, ist es dann irgendwie möglich, die Argumente "abzufangen"? Klar, normalerweise speichert man die Benutzereingabe eh in einer Variablen und die könnte man dann wiederum ausgeben (also wie der-escrimador es gepostet hat). Mich würde nur interessieren ob ich die zu übergebenden Argumente auch noch anders ausgeben kann.

passi
 
G

gman

Gast
Hi,

schreib dir doch eine Methode für die Ausgabe:

Java:
public void printNeighbourStuff(int x, int y) {
    System.out.println("Anzahl der lebendenden Nachbarn der Zelle " 
        + x+ "|" + y + ":\t" + myGrid.getAnzahlLebenderNachbarn(x, y));
}

Verwendung:

Java:
printNeighbourStuff(2, 1));
printNeighbourStuff(0, 4));
printNeighbourStuff(1, 1));
printNeighbourStuff(3, 2));

Sollten die Argumente erst zur Laufzeit (z.B. von einer Benutzereingabe) übergeben werden, ist es dann irgendwie möglich, die Argumente "abzufangen"? Klar, normalerweise speichert man die Benutzereingabe eh in einer Variablen und die könnte man dann wiederum ausgeben (also wie der-escrimador es gepostet hat). Mich würde nur interessieren ob ich die zu übergebenden Argumente auch noch anders ausgeben kann.

Versteh ich jetzt nicht so ganz. Ist dein Problem jetzt die Ausgabe der Werte oder die Übergabe
der Koordinaten für die Ausgabe?
 
Zuletzt bearbeitet von einem Moderator:

njans

Top Contributor
Hmm bin wohl etwas spät, was mir jedoch auffällt udn wohl noch keiner geschrieben hat:

Java:
(myArray[y][x] == "*")
Sollte man lieber lassen, kann aber kann auch nicht wahr sein, denn == ist ein Referenzvergleich.
Daher lieber mit equals() arbeiten.
 

TKausL

Top Contributor
Hmm bin wohl etwas spät, was mir jedoch auffällt udn wohl noch keiner geschrieben hat:

Java:
(myArray[y][x] == "*")
Sollte man lieber lassen, kann aber kann auch nicht wahr sein, denn == ist ein Referenzvergleich.
Daher lieber mit equals() arbeiten.

Da er einen String nutzt stimmt das schon,
allerdings finde ich das etwas sinnlos, dort einen String zu nutzen. Fals das ganze Spiel sich mal vergrößern sollte (1000 x 1000) ist das nichtmehr so Ressourcen sparend. Da sollte man schon zum Char greifen, den man auch wieder mit == vergleichen kann, oder aber zum boolean, der hierbei ja auch völlig ausreicht.
 

passi

Mitglied
Ich könnte das aktuelle String-Array doch auch als boolean-Array nutzen und die Ausgabe mit der toString-Methode bearbeiten. So dass für tote Zellen (false) ein Punkt und für lebendige Zellen (true) ein Sternchen ausgegeben wird. Was haltet ihr davon?
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ä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
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
L Game of life in einem FensterVisualisieren Java Basics - Anfänger-Themen 2
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

Ähnliche Java Themen


Oben