Conway’s Game of Life
July 29, 2014 Leave a comment
This is just a simple demonstration of lambdas to implement the Cell but the code may not be complete.
package com.game.test;
import java.util.ArrayList;
import java.util.List;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JMock;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.runner.RunWith;
import com.game.conway.Cell;
@RunWith(JMock.class)
public class Game {
Mockery context = new JUnit4Mockery();
@SuppressWarnings("deprecation")
@Test
public void mocksurvive() {
// set up
context = new Mockery() {
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
Cell cell = context.mock(Cell.class);
final List<Cell> cells = new ArrayList<Cell>();
cells.add(new Cell(1,1));
cells.add(new Cell(8,2));
cells.add(new Cell(2,2));
// expectations
context.checking(new Expectations() {
{
oneOf(cell).setX(1);
oneOf(cell).setY(1);
oneOf(cell).survive(cells);
will(returnValue(false));
}
});
cell.setX(1);
cell.setY(1);
final boolean result = cell.survive(cells);
}
}
package com.game.conway;
import java.util.List;
public class Cell implements Comparable<Cell>{
public Cell(int x, int y) {
this.x = x;
this.y = y;
}
int x,y;
public Object getX() {
return x;
}
public Object getY() {
return y;
}
public boolean neighbour(Cell neighbour) {
return Math.abs(x - neighbour.x) <= 1 &&
Math.abs(y - neighbour.y) <= 1 &&
!(this.compareTo(neighbour) == 0);
}
public long countNeighbours(List<Cell> cells) {
return cells.stream().filter( c -> neighbour(c)).count();
}
public boolean survive(List<Cell> cells) {
long count = countNeighbours(cells);
if(cells.stream().anyMatch( c -> (this.compareTo(c) == 0) )){
return count == 2 || count == 3;
}
return count == 3;
}
@Override
public int compareTo(Cell o) {
if( x == o.x && y == o.y)
return 0;
else
return -1;
}
}