예제 #1
0
        public void Reset()
        {
            List <Square> list = tableLayoutPanel1.Controls.OfType <Square>().OrderBy(a => a.Number).ToList();

            tableLayoutPanel1.Controls.Clear();
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    string order = PuzzleDriver.GetBasePuzzleOrder()[i * 3 + j].ToString();
                    var    sq    = list.SingleOrDefault(a => Regex.Replace(a.Name, "\\D*", "") == order);
                    if (sq != null)
                    {
                        tableLayoutPanel1.Controls.Add(sq, j, i);
                    }
                }
            }
        }
예제 #2
0
        public void Shuffle()
        {
            do
            {
                List <Square> list = tableLayoutPanel1.Controls.OfType <Square>().ToList();
                list.Add(null);
                List <Square> newList = new List <Square>();
                int[,] matrix = new int[3, 3];

                Random rnd = new Random();

                while (list.Count > 0)
                {
                    int r = rnd.Next(0, list.Count);
                    newList.Add(list[r]);
                    list.RemoveAt(r);
                }

                tableLayoutPanel1.Controls.Clear();
                for (int i = 0; i < 3; i++)
                {
                    for (int j = 0; j < 3; j++)
                    {
                        var obj = newList[i * 3 + j];
                        if (obj == null)
                        {
                            matrix[i, j] = obj?.Number ?? 0;
                            continue;
                        }

                        matrix[i, j] = obj.Number;

                        tableLayoutPanel1.Controls.Add(obj, i, j);
                    }
                }
            } while (!isSolvable(PuzzleDriver.GetBasePuzzleOrder(), GetSequentalOrder));
        }
예제 #3
0
        private async void button5_Click(object sender, EventArgs e)
        {
            EditMode = !EditMode;
            if (!EditMode)
            {
                (sender as Button).Text = "KAYDET";


                button4.Enabled = false;
                button3.Enabled = false;
                button2.Enabled = false;
                button1.Enabled = false;
                flowLayoutPanel1.Controls.Clear();
                CTS = new CancellationTokenSource();
                await Task.Factory.StartNew(() =>
                {
                    Color bakColor  = Color.Empty;
                    bool onOff      = false;
                    int exitConfirm = 0;
                    do
                    {
                        if (CTS != null && CTS.Token.IsCancellationRequested)
                        {
                            CTS         = null;
                            exitConfirm = 1;
                        }

                        foreach (Square sq in n_Puzzle1.GetSquareList)
                        {
                            if (exitConfirm == 1)
                            {
                                sq.BorderColor = Color.Green;
                                continue;
                            }
                            else if (exitConfirm == 2)
                            {
                                sq.BorderColor = bakColor;
                                continue;
                            }
                            else if (exitConfirm == 3)
                            {
                                sq.BorderColor = bakColor;
                                continue;
                            }
                            if (bakColor == Color.Empty)
                            {
                                bakColor = sq.BorderColor;
                            }

                            if (onOff)
                            {
                                sq.BorderColor = bakColor;
                            }
                            else
                            {
                                sq.BorderColor = Color.Red;
                            }
                        }

                        if (exitConfirm != 0)
                        {
                            exitConfirm++;
                            Thread.Sleep(500);
                        }

                        onOff = !onOff;
                        Thread.Sleep(500);
                    } while (!(exitConfirm == 3));
                }, CTS.Token);
            }
            else
            {
                (sender as Button).Text = "Son Durumu Düzenle";
                CTS.Cancel();
                await Task.Delay(500);

                PuzzleDriver.SetBasePuzzleOrder(n_Puzzle1.GetSequentalOrder);

                button4.Enabled = true;
                button3.Enabled = true;
                button2.Enabled = true;
                button1.Enabled = true;
            }
        }