public GameOfLineEngine(IDefineANeigbourCounter counter, IDefineARulesEngine rulesEngine, IDefineAnOutputter output, IDefineLoopHandler loopHandler) { this.counter = ReturnParameter.OrThrowIfNull(counter, nameof(counter)); this.rulesEngine = ReturnParameter.OrThrowIfNull(rulesEngine, nameof(rulesEngine)); this.output = ReturnParameter.OrThrowIfNull(output, nameof(output)); this.loopHandler = ReturnParameter.OrThrowIfNull(loopHandler, nameof(loopHandler)); }
private static bool[,] Process(IDefineANeigbourCounter counter, IDefineARulesEngine rulesEngine, bool[,] grid) { var newGrid = new bool[grid.GetLength(0), grid.GetLength(1)]; for (var x = 0; x < grid.GetLength(0); x++) { for (var y = 0; y < grid.GetLength(1); y++) { var liveNeighbours = counter.Count(grid, x, y); newGrid[x, y] = rulesEngine.DetermineNewState(grid[x, y], liveNeighbours); } } return(newGrid); }