Skip to content
Snippets Groups Projects
Commit 47f2de90 authored by Dennis Eisold's avatar Dennis Eisold
Browse files

Initial commit

parents
No related branches found
No related tags found
No related merge requests found
Pipeline #109 failed with stages
in 20 seconds
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
package de.itstall;
/**
* Game of life implementation
*/
public class GameOfLife {
boolean[][] feld = {
{false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false},
{false, false, true, true, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false},
{false, false, true, true, false, false, false, false, false, false, true, false, false, false, true, false, false, false, false, false},
{false, false, true, true, false, false, false, false, false, false, true, false, false, false, true, false, false, false, false, false},
{false, false, true, true, true, true, false, false, false, false, true, false, false, false, true, false, false, false, false, false},
{false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true},
{false, false, true, true, false, true, false, false, false, false, true, true, true, true, false, false, false, false, false, false},
{false, false, true, false, false, true, false, false, false, false, true, true, true, false, false, false, false, false, false, false},
{false, false, true, false, false, false, false, false, false, false, true, false, true, false, false, false, false, false, false, false},
{false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false}
};
/**
* Startet die Simulation
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
GameOfLife myGame = new GameOfLife();
/* Zuerst Console leeren */
clearConsole();
/* Start generation ausgeben */
myGame.print();
/* Nächste Generationen berechnen */
for (int i = 0; i < 25; i++) {
/* Zeit zum schlafen, sonst ist alles zu schnell vorbei */
Thread.sleep(1000);
/* Konsole löschen für die nächste Generation */
clearConsole();
/* Nächste Generation aufleben lassen */
myGame.nextGeneration();
/* Generation ausgeben */
myGame.print();
}
}
/**
* Konsole löschen
*/
public final static void clearConsole() {
for (int clear = 0; clear < 25; clear++) {
System.out.println("\n");
}
}
/**
* Aktuelle Generation ausgeben
*/
void print() {
/* loop durch die x Koordinaten */
for (int i = 0; i < feld.length; i++) {
/* loop durch die y Koordinaten */
for (int j = 0; j < feld[i].length; j++) {
/* Wenn das Feld lebt, Zelle anzeigen */
if (feld[i][j] == true) {
System.out.print("o ");
}
/* Ansonsten ein leeres Feld anzeigen */
else {
System.out.print(". ");
}
}
System.out.println();
}
}
/**
* Berechnet die nächste Generation der Zellen
*/
void nextGeneration() {
/* Neue Spielfeld Matrix erzeugen */
boolean[][] nextGenerationMatrix = new boolean[feld.length][feld[0].length];
/* loop durch die x Koordinaten */
for (int x = 0; x < feld.length; x++) {
/* loop durch die y Koordinaten */
for (int y = 0; y < feld[0].length; y++) {
/**
* Prüfung ob das Feld in der nächsten Generation eine
* Zelle enthalten wird oder nicht
*/
nextGenerationMatrix[x][y] = rulesOfLife(x, y);
}
}
/* Nächste Generation berechnet, also alte Generation löschen */
feld = nextGenerationMatrix;
}
/**
* Legt fest ob das aktuelle Feld den Regeln entspricht oder nicht
*
* @param x
* @param y
*/
public boolean rulesOfLife(int x, int y) {
/**
* Unabhängig von den obigen drei Regeln sind die Randzellen
* (also dienjenigen Zellen, die nicht genau acht Nachbarn haben) immer tot
*/
if (x == 0 || y == 0 || x == feld.length - 1 || y == feld[0].length - 1) {
return false;
} else {
/* Anzahl der Nachbarn berechnen */
int neighbours = aliveNeighbours(x, y);
/**
* Eine lebende Zelle lebt auch in der Folgegeneration,
* wenn genau zwei oder drei der acht benachbarten Zellen
* in der aktuellen Generation leben.
*/
if (feld[x][y] == true && (neighbours == 2 || neighbours == 3)) {
return true;
}
/**
* Eine lebende Zelle stirbt in der Folgegeneration an Einsamkeit
* oder Überbevölkerung, wenn in der aktuellen Generation weniger
* als zwei oder mehr als drei der acht Nachbarzellen leben
*/
else if (feld[x][y] == true && (neighbours < 2 || neighbours > 3)) {
return false;
}
/**
* Eine tote Zelle wird in der Folgegeneration lebendig,
* wenn genau drei ihrer acht Nachbarn in der aktuellen
* Generation lebendig sind
*/
else if (feld[x][y] == false && neighbours == 3) {
return true;
}
}
return false;
}
/**
* Schaut wie viele lebende Nachbarn es gibt
*
* @param x
* @param y
* @return
*/
public int aliveNeighbours(int x, int y) {
int iReturn = 0;
/* Wenn der Spielfeldrand erreicht ist, ist die Zelle sowieso tot */
if (x == 0 || y == 0 || x == feld.length - 1 || y == feld[0].length - 1) {
iReturn = 0;
} else {
/* loop durch die x Koordinaten */
for (int i = x - 1; i <= x + 1; i++) {
/* loop durch die y Koordinaten */
for (int j = y - 1; j <= y + 1; j++) {
/* Wenn das Feld eine lebende Zelle enthält, Counter erhöhen */
if (feld[i][j]) {
iReturn++;
}
}
}
}
/* Wenn die Zelle selbst lebt, dann abziehen */
if (feld[x][y]) {
iReturn--;
}
return iReturn;
}
}
package de.itstall;
public class Main {
public static void main(String[] args) {
GameOfLife myGame = new GameOfLife();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment