commit 09a995eccfeac484528ed5fa8ce007731f6d65c0 Author: Oliver Date: Mon Dec 13 15:21:05 2021 +0100 Init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..643f613 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.vscode/settings.json +.gitignore diff --git a/GameOfLifeTDD.iml b/GameOfLifeTDD.iml new file mode 100644 index 0000000..506243b --- /dev/null +++ b/GameOfLifeTDD.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0a00073 --- /dev/null +++ b/README.md @@ -0,0 +1,48 @@ +# Programmieren 3 + +## Assignment "Game Of Life" + +### Einführung + +#### Game of Life + +Ihre Aufgabe ist es, eine Klasse Life zu implementieren, +die das *Game of Life* simuliert. Beim *Game of Life* +werden Zellen in einem zweidimensionelen Raster angeordnet. +An jedem Rasterpunkt kann entweder eine lebende Zelle oder ein +Leerraum positioniert werden. + +Für das Entstehen, Überleben oder Absterben einer Zelle +ist die Anzahl der unmittelbaren Nachbarn entscheidend. +Jeder Rasterpunkt hat 8 benachbarte Rasterpunkte +(links, rechts, oben, unten, oben links, oben rechts, unten links, unten rechts). +Für die Berechnung der nachfolgenden Generation sind auf die +aktuelle Generation folgende Regeln anzuwenden: + +- Eine neue Zelle an einem bisher unbelebten Rasterpunkt entsteht, + wenn genau drei benachbarte Rasterpunkte mit lebenden Zellen + besetzt sind. + +- Lebende Zellen mit weniger als zwei lebenden Nachbarn sterben in der Folgegeneration an Einsamkeit. + +- Eine lebende Zelle mit zwei oder drei lebenden Nachbarn bleibt in der Folgegeneration am Leben. + +- Lebende Zellen mit mehr als drei lebenden Nachbarn sterben in der Folgegeneration an Überbevölkerung. + + +#### Vorgaben + +Im Assignment werden Ihnen drei Code-Dateien vorgegeben: + +- Life soll später den Produktivcode enthalten. +- LifeTest soll für den Testcode benutzt werden. +- ILife ist ein Interface, das von der Life-Klasse + implementiert werden soll. + +### Aufgabenstellung + +Implementieren Sie die Klasse Life unter Nutzung der TDD-Vorgehensweise. +Erstellen Sie für die oben genannten Regeln jeweils mindestens einen Testfall (für +die erste Regel wurde bereits ein Testfall mitgeliefert). + + diff --git a/jars/hamcrest-core-1.3.jar b/jars/hamcrest-core-1.3.jar new file mode 100644 index 0000000..9d5fe16 Binary files /dev/null and b/jars/hamcrest-core-1.3.jar differ diff --git a/jars/junit-4.12.jar b/jars/junit-4.12.jar new file mode 100644 index 0000000..3a7fc26 Binary files /dev/null and b/jars/junit-4.12.jar differ diff --git a/src/ILife.java b/src/ILife.java new file mode 100644 index 0000000..28adbea --- /dev/null +++ b/src/ILife.java @@ -0,0 +1,14 @@ +public interface ILife { + + // Methoden zum Setzen der Ausgangssituation + public void nukeAll(); + public void setAlive(int x, int y); + public void setDead(int x, int y); + + // Methoden zum Abfragen der aktuellen Situation + public boolean isAlive(int x, int y); + + // Methoden zum Fortschreiben der Generationen + public ILife nextGeneration(); + +} diff --git a/src/Life.java b/src/Life.java new file mode 100644 index 0000000..84ab855 --- /dev/null +++ b/src/Life.java @@ -0,0 +1,55 @@ +public class Life implements ILife { + + public static void main(String[] args) { + Life l = new Life(new String[] { " ", + " ", + " *** ", + " ", + " " }); + l = (Life) l.nextGeneration(); + } + + + public Life() { + nukeAll(); + } + + public Life(String[] setup) { + this(); + for (int y = 0; y < setup.length; y++) + for (int x = 0; x < setup[y].length(); x++) + if (setup[y].charAt(x) != ' ') + setAlive(x, y); + } + + + @Override + public void nukeAll() { + // TODO Auto-generated method stub + + } + + @Override + public void setAlive(int x, int y) { + // TODO Auto-generated method stub + + } + + @Override + public void setDead(int x, int y) { + // TODO Auto-generated method stub + + } + + @Override + public boolean isAlive(int x, int y) { + // TODO Auto-generated method stub + return false; + } + + @Override + public ILife nextGeneration() { + // TODO Auto-generated method stub + return null; + } +} \ No newline at end of file diff --git a/test/LifeTest.java b/test/LifeTest.java new file mode 100644 index 0000000..3940e66 --- /dev/null +++ b/test/LifeTest.java @@ -0,0 +1,38 @@ +import org.junit.Test; +import static org.junit.Assert.*; + +public class LifeTest { + + @Test + public void createNewCell() { + + // Arrange: drei lebende Zellen + Life l = new Life(); + l.setAlive(0, 0); + l.setAlive(0, 1); + l.setAlive(0, 2); + + // Act: Berechnung der Folgegeneration + ILife nextGen = l.nextGeneration(); + + // Assert: Rasterpunkt mit drei Nachbarn sollte jetzt leben + assertTrue(nextGen.isAlive(1, 1)); + } + + + @Test + public void destroyLonelyCell() { + } + + + @Test + public void keepAliveCell() { + } + + + @Test + public void destroyCrowdedCell() { + } + + +}