public async Task StartGame(bool[,] seedBoard = null) { _gameTimer.Restart(); if (seedBoard == null) { _boardManager.InitialiseRandomBoard(); } else { _boardManager.InitialiseFromSeed(seedBoard); } GameTickProcessed?.Invoke(this, new EventArgs()); TickCount++; do { _boardManager.ProcessBoardTick(); if (_gameConfiguration.RaiseRenderEvents) { GameTickProcessed?.Invoke(this, new EventArgs()); await Task.Delay(_gameConfiguration.TickDelay); } TickCount++; } while (TickCount <= _gameConfiguration.MaxTickCount); _gameTimer.Stop(); }