using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GameOfLife { public class Game { public Game(int x, int y) { ActiveMap = new(x, y); SwapMap = new(x, y); } public int Iteration => _Iteration; private GameMap ActiveMap, SwapMap; private int _Iteration; public void Update() { //SwapMap.Clear(); foreach ( var cell in ActiveMap.GetAllCells()) { cell.Update(ref ActiveMap, ref SwapMap); } _Iteration++; //Swap Maps ActiveMap.CloneFrom(SwapMap); } public GameMap getActiveMap() { return ActiveMap; } public string ToString() { return $""" Current Iteration: {Iteration} """; } public string RenderToString() { int MapRowSize = ActiveMap.SizeY; int row = 0; int rowCounter = 0; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("\t0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5\n"); stringBuilder.AppendLine(); stringBuilder.Append("0\t"); foreach ( var cell in ActiveMap.GetAllCells()) { stringBuilder.Append(cell.ToString() + " "); rowCounter++; if (rowCounter == MapRowSize) { rowCounter = 0; row++; stringBuilder.Append($"\n{row}\t"); } } return stringBuilder.ToString(); } public string RenderToDebugString() { int row = 0; int MapRowSize = (int)Math.Sqrt(ActiveMap.GetAllCells().Length); int rowCounter = 0; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("\t0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5\n"); stringBuilder.AppendLine(); stringBuilder.Append("0\t"); foreach (var cell in ActiveMap.GetAllCells()) { stringBuilder.Append(cell.GetNeighborVal(ref ActiveMap) + " "); rowCounter++; if (rowCounter == MapRowSize) { rowCounter = 0; row++; stringBuilder.Append($"\n{row}\t"); } } return stringBuilder.ToString(); } public string RenderToSwapDebugString() { int MapRowSize = (int)Math.Sqrt(SwapMap.GetAllCells().Length); int rowCounter = 0; StringBuilder stringBuilder = new StringBuilder(); foreach (var cell in SwapMap.GetAllCells()) { stringBuilder.Append(cell.GetNeighborVal(ref SwapMap)); rowCounter++; if (rowCounter == MapRowSize) { rowCounter = 0; stringBuilder.Append("\n"); } } return stringBuilder.ToString(); } public void SetRandomStart(int XSize, int YSize, int Seed = 0,int mod = 2) { //Not using Size args right now for (int i = 0; i < ActiveMap.SizeX - 1; i++) { for (int j = 0; j < ActiveMap.SizeY - 1; j++) { ActiveMap.GetCell(i,j).isAlive = (Random.Shared.Next()%mod == 0); } } } public void GeneraterSwitcher() { ActiveMap.GetCell(ActiveMap.SizeX/2, ActiveMap.SizeY/2).isAlive = true; ActiveMap.GetCell(ActiveMap.SizeX / 2, (ActiveMap.SizeY / 2)+1).isAlive = true; ActiveMap.GetCell(ActiveMap.SizeX / 2, (ActiveMap.SizeY / 2)-1).isAlive = true; } } }