private AcreTypes GetNewValue(int x, int y) { AcreTypes current = _area[x, y]; List <AcreTypes> neighbours = GetNeighbours(x, y).ToList(); int numberOfNeighboursWithTrees = neighbours .Where(n => n == AcreTypes.Trees) .Count(); int numberOfNeighboursWithLumberyards = neighbours .Where(n => n == AcreTypes.Lumberyard) .Count(); if (current == AcreTypes.OpenGround) { return(numberOfNeighboursWithTrees >= 3 ? AcreTypes.Trees : AcreTypes.OpenGround); } else if (current == AcreTypes.Trees) { return(numberOfNeighboursWithLumberyards >= 3 ? AcreTypes.Lumberyard : AcreTypes.Trees); } else if (current == AcreTypes.Lumberyard) { return((numberOfNeighboursWithLumberyards >= 1 && numberOfNeighboursWithTrees >= 1) ? AcreTypes.Lumberyard : AcreTypes.OpenGround); } else { throw new Exception(); // TODO } }
public Area GetNext() { var newArea = new AcreTypes[Width, Height]; for (int y = 0; y < Height; y++) { for (int x = 0; x < Width; x++) { newArea[x, y] = GetNewValue(x, y); } } return(new Area(TimeInSeconds + 1, newArea)); }
public void SetValue(int x, int y, AcreTypes type) { _area[x, y] = type; }