Exemplo n.º 1
0
        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();
        }