diff --git a/src/Life.java b/src/Life.java index 84ab855..07d2e59 100644 --- a/src/Life.java +++ b/src/Life.java @@ -1,17 +1,22 @@ +//Bearbeitet von: Marie Trexler +import java.util.Arrays; public class Life implements ILife { + + String[] gameWorld; public static void main(String[] args) { - Life l = new Life(new String[] { " ", + Life l = new Life( new String[] { " ", " ", " *** ", " ", - " " }); + " "}); l = (Life) l.nextGeneration(); + } - - public Life() { + public Life() { nukeAll(); + } public Life(String[] setup) { @@ -19,37 +24,123 @@ public class Life implements ILife { 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); + setAlive(x, y); + } @Override public void nukeAll() { // TODO Auto-generated method stub + gameWorld = new String[]{" ", + " ", + " ", + " ", + " "}; } @Override public void setAlive(int x, int y) { // TODO Auto-generated method stub + String newString =""; + for(int i=0; i< gameWorld[y].length(); i++){ + if(i==x) + newString +='*'; + else + newString += gameWorld[y].charAt(i); + } + gameWorld[y]=newString; } @Override public void setDead(int x, int y) { // TODO Auto-generated method stub + String newString =""; + for(int i=0; i< gameWorld[y].length(); i++){ + if(i==x) + newString +=' '; + else + newString += gameWorld[y].charAt(i); + } + gameWorld[y]=newString; } @Override public boolean isAlive(int x, int y) { // TODO Auto-generated method stub + if(gameWorld[y].charAt(x) =='*'){ + return true;} + else{ return false; - } + }} @Override public ILife nextGeneration() { // TODO Auto-generated method stub - return null; + Life newWorld = new Life(); + for(int y=0; y< gameWorld.length;y++){ + for(int x= 0; x 3) { + newWorld.setDead(x, y); + } + } + if(!isAlive(x,y)) { + if (neighbor == 3) { + newWorld.setAlive(x, y); + } else { + newWorld.setDead(x, y); + } + } + } + } + newWorld.showBoard(); + return newWorld; } + + public int countNeighbor(int x, int y) { + int counter=0; + if(y-1 >=0){ + for(int i =x-1; i<= x+1;i++){ + if(i>=0 && i< gameWorld[y-1].length()){ + if(isAlive(i,y-1)){ + counter++; + } + } + } + } + if(y+1 =0 && i< gameWorld[y+1].length()){ + if(isAlive(i,y+1)){ + counter++; + } + } + } + } + if(x-1>=0){ + if(isAlive(x-1,y)){ + counter++; + } + } + if( x+1< gameWorld[y].length()){ + if(isAlive(x+1,y)){ + counter++; + } + } + return counter; + } + + public void showBoard() { + for (int i = 0; i < gameWorld.length; i++) + System.out.println(Arrays.toString(new String[]{gameWorld[i]})); + } + } \ No newline at end of file diff --git a/test/LifeTest.java b/test/LifeTest.java index 3940e66..f0e10b7 100644 --- a/test/LifeTest.java +++ b/test/LifeTest.java @@ -1,8 +1,23 @@ +//Bearbeitet von: Marie Trexler import org.junit.Test; import static org.junit.Assert.*; public class LifeTest { - + + @Test + public void nuke() { + // Arrange: drei lebende Zellen + Life l = new Life(); + l.setAlive(0, 0); + l.setAlive(0, 1); + l.setAlive(0, 2); + + // Act: Alles wird ausgelöscht + l.nukeAll(); + + // Assert: Alle Rasterpunkt sterben + assertFalse(l.isAlive(0, 1)); + } @Test public void createNewCell() { @@ -22,16 +37,51 @@ public class LifeTest { @Test public void destroyLonelyCell() { + // 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 weniger als zwei Nachbarn soll sterben + assertFalse(nextGen.isAlive(0, 2)); } @Test public void keepAliveCell() { + // 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 mindestens zwei aber weniger als vier Nachbarn soll leben + assertTrue(nextGen.isAlive(0, 1)); } @Test public void destroyCrowdedCell() { + // Arrange: fünf lebende Zellen + Life l = new Life(); + l.setAlive(0, 0); + l.setAlive(0, 1); + l.setAlive(0, 2); + l.setAlive(1, 1); + l.setAlive(1, 0); + + // Act: Berechnung der Folgegeneration + ILife nextGen = l.nextGeneration(); + + // Assert: Rasterpunkt mit mehr als drei Nachbarn soll sterben + assertFalse(nextGen.isAlive(0, 1)); }