From 9c236f15144a1847d6c92234edca1d14fbe0ab1c Mon Sep 17 00:00:00 2001 From: winkl Date: Thu, 23 Dec 2021 18:20:30 +0100 Subject: [PATCH] First two tests working --- src/Life.java | 59 +++++++++++++++++++++++++++++++++++++++++----- test/LifeTest.java | 12 ++++++++++ 2 files changed, 65 insertions(+), 6 deletions(-) diff --git a/src/Life.java b/src/Life.java index 84ab855..01ebd8a 100644 --- a/src/Life.java +++ b/src/Life.java @@ -1,5 +1,7 @@ public class Life implements ILife { - + + boolean[][] cells = new boolean[15][15]; + public static void main(String[] args) { Life l = new Life(new String[] { " ", " ", @@ -26,30 +28,75 @@ public class Life implements ILife { @Override public void nukeAll() { // TODO Auto-generated method stub - + for (int i = 0; i < 15; i++) { + for (int j = 0; j < 15; j++) { + cells[i][j] = false; + } + } } @Override public void setAlive(int x, int y) { // TODO Auto-generated method stub - + cells[x][y] = true; } @Override public void setDead(int x, int y) { // TODO Auto-generated method stub - + cells[x][y] = false; } @Override public boolean isAlive(int x, int y) { // TODO Auto-generated method stub - return false; + return cells[x][y]; } @Override public ILife nextGeneration() { // TODO Auto-generated method stub - return null; + boolean[][] nextGen = new boolean[15][15]; + + for (int y = 0; y < 15; y++) { + + for (int x = 0; x < 15; x++) { + + int aliveNeighbours = countNeighbourCells(x, y); + if (isAlive(x, y)) { + + if (aliveNeighbours == 2 || aliveNeighbours == 3) { + nextGen[x][y] = true; + } else { + nextGen[x][y] = false; + } + } else { + if (aliveNeighbours == 3) { + nextGen[x][y] = true; + } else { + nextGen[x][y] = false; + } + } + } + } + cells = nextGen; + return this; + } + + public int countNeighbourCells(int x , int y){ + int counter = 0; + + if((x-1) >=0 && (y-1) >=0 && isAlive(x-1,y-1)) counter++; + if((y-1) >=0 && isAlive(x,y-1)) counter++; + if((x+1) < 15 && (y-1) >=0 && isAlive(x+1,y-1)) counter++; + if((x-1) >=0&& isAlive(x-1,y)) counter++; + if((x+1) < 15 && isAlive(x+1,y)) counter++; + if((x-1) >=0 && (y+1) < 15 && isAlive(x-1,y+1)) counter++; + + if((y+1) <15 && isAlive(x,y+1)) counter++; + + if((x+1) <15 && (y+1) <15 && isAlive(x+1,y+1)) counter++; + + return counter; } } \ No newline at end of file diff --git a/test/LifeTest.java b/test/LifeTest.java index 3940e66..dafd6b5 100644 --- a/test/LifeTest.java +++ b/test/LifeTest.java @@ -22,6 +22,18 @@ public class LifeTest { @Test public void destroyLonelyCell() { + + // Arrange: drei lebende Zellen + Life l = new Life(); + l.setAlive(0, 0); + l.setAlive(0, 1); + + // Act: Berechnung der Folgegeneration + ILife nextGen = l.nextGeneration(); + + // Assert: Rasterpunkt mit drei Nachbarn sollte jetzt leben + assertTrue(!nextGen.isAlive(1, 1)); + }