Browse Source

Init

master
Oliver 2 years ago
commit
09a995eccf
8 changed files with 170 additions and 0 deletions
  1. 2
    0
      .gitignore
  2. 13
    0
      GameOfLifeTDD.iml
  3. 48
    0
      README.md
  4. BIN
      jars/hamcrest-core-1.3.jar
  5. BIN
      jars/junit-4.12.jar
  6. 14
    0
      src/ILife.java
  7. 55
    0
      src/Life.java
  8. 38
    0
      test/LifeTest.java

+ 2
- 0
.gitignore View File

@@ -0,0 +1,2 @@
.vscode/settings.json
.gitignore

+ 13
- 0
GameOfLifeTDD.iml View 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
- 0
README.md View 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 View File


BIN
jars/junit-4.12.jar View File


+ 14
- 0
src/ILife.java View 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
- 0
src/Life.java View 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
- 0
test/LifeTest.java View 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…
Cancel
Save