public CardPositions[] GetButtonsLocations()
        {
            uint buttons = CalculateButtons();

            CardPositions[] cardsPositions = new CardPositions[buttons];

            ushort i = 0;

            foreach (Button button in checkedForm.Controls.OfType <Button>())
            {
                cardsPositions[i] = new CardPositions(button.Location.X, button.Location.Y);
                ++i;
            }

            return(cardsPositions);
        }
        private async Task GetNewPositions()
        {
            await Task.Run(() =>
            {
                Random r = new Random();

                int[] indexes = new int[buttonsNumber];

                for (uint i = 0; i < buttonsNumber; ++i)
                {
                    indexes[i] = cardPositions[i].GetIndex();                           //getting array of card positions indexes
                }


                int[] newIndexes = new int[buttonsNumber];
                List <int> list  = indexes.ToList();
                int iter         = 0;

                foreach (int i in UniqueRandom(list.Min(), list.Max(), list))
                {
                    newIndexes[iter] = i;
                    ++iter;
                }

                CardPositions[] shuffled = new CardPositions[buttonsNumber];
                for (uint i = 0; i < buttonsNumber; ++i)
                {
                    shuffled[i] = new CardPositions(cardPositions[i].X, cardPositions[i].Y, newIndexes[i]);
                }

                int succesIteration = 0;
                foreach (var position in cardPositions)
                {
                    foreach (var pos in shuffled)
                    {
                        if (position.GetIndex() == pos.GetIndex())
                        {
                            finalPosition[succesIteration] = pos;
                            ++succesIteration;
                        }
                    }
                }
            });
        }
        public async void Shuffle()
        {
            uint buttonNo = CalculateButtons();

            RandomizePositions randomize = new RandomizePositions(buttonNo, ref positions);

            CardPositions[] cardPositions = new CardPositions[buttonNo];
            cardPositions = await randomize.ReturnNewPositions();

            uint i = 0;

            foreach (Button button in checkedForm.Controls.OfType <Button>())
            {
                int posX = cardPositions[i].X;
                int posY = cardPositions[i].Y;

                button.Location = new Point(posX, posY);
                button.Refresh();

                ++i;
            }
        }