Init
This commit is contained in:
commit
09a995eccf
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
.vscode/settings.json
|
||||
.gitignore
|
13
GameOfLifeTDD.iml
Normal file
13
GameOfLifeTDD.iml
Normal file
@ -0,0 +1,13 @@
|
||||
<?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" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="jars" level="project" />
|
||||
</component>
|
||||
</module>
|
48
README.md
Normal file
48
README.md
Normal file
@ -0,0 +1,48 @@
|
||||
# Programmieren 3
|
||||
|
||||
## Assignment "Game Of Life"
|
||||
|
||||
### Einführung
|
||||
|
||||
#### Game of Life
|
||||
|
||||
Ihre Aufgabe ist es, eine Klasse <code>Life</code> 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:
|
||||
|
||||
- <code>Life</code> soll später den Produktivcode enthalten.
|
||||
- <code>LifeTest</code> soll für den Testcode benutzt werden.
|
||||
- <code>ILife</code> ist ein Interface, das von der <code>Life</code>-Klasse
|
||||
implementiert werden soll.
|
||||
|
||||
### Aufgabenstellung
|
||||
|
||||
Implementieren Sie die Klasse <code>Life</code> 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).
|
||||
|
||||
|
BIN
jars/hamcrest-core-1.3.jar
Normal file
BIN
jars/hamcrest-core-1.3.jar
Normal file
Binary file not shown.
BIN
jars/junit-4.12.jar
Normal file
BIN
jars/junit-4.12.jar
Normal file
Binary file not shown.
14
src/ILife.java
Normal file
14
src/ILife.java
Normal file
@ -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();
|
||||
|
||||
}
|
55
src/Life.java
Normal file
55
src/Life.java
Normal file
@ -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;
|
||||
}
|
||||
}
|
38
test/LifeTest.java
Normal file
38
test/LifeTest.java
Normal file
@ -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() {
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user