private static void InitializeBoard(int size, Action callback) { SetSize(size); // Sets Size of the console, etc. // Initializes the 2D Array var dat = new BDat[size, size]; for (var i = 0; i < dat.GetLength(0); i++) { for (var j = 0; j < dat.GetLength(1); j++) { var d = new BDat(j, i); d.OnStateChanged += (s, g) => { RenderBoard(); }; dat[i, j] = d; } } // Subscribe to selection changed event BoardData.Selection.OnVectorChange += (s, g) => { RenderBoard(); }; // Set board data to dat (temp data) BoardData.Data = dat; BoardData.OnWinnerSelected += (s, g) => { var win = new WinnerData { Winner = g, WinTime = DateTime.Now }; BoardData.Winner = win; //RenderBoard(); }; BoardData.OnPlaceChanged += (s, g) => { // Check neighbors and check winner BoardData.Data.CheckNeighbors(g, 5, (i, state) => { var c = state.StateChar; if (HighestScoreData.Data.ContainsKey(c) && HighestScoreData.Data[c] is HighestScoreData score) { if (score.Score > i) { return; } var tempD = new HighestScoreData { Score = i, Character = state }; HighestScoreData.Data[c] = tempD; } if (i >= 5) // Check if any winner { BoardData.CallWinnerSelected(state); } TitleEditor.RefreshTitle(); }); if (!BoardData.Data.IsFilled()) { RenderBoard(); } }; // Invoke callback callback?.Invoke(); }