Example #1
0
        public void Generate(int number)
        {
            ObservableCollection <Sticks> tempo      = new ObservableCollection <Sticks>();
            ObservableCollection <Sticks> alphatempo = new ObservableCollection <Sticks>();
            ObservableCollection <Sticks> betatempo  = new ObservableCollection <Sticks>();

            first.Clear();
            third.Clear();
            second.Clear();
            ALPHAfirst.Clear();
            ALPHAsecond.Clear();
            ALPHAthird.Clear();
            BETAfirst.Clear();
            BETAsecond.Clear();
            BETAthird.Clear();
            Procedure.Clear();
            BackProcedure.Clear();
            Steps = "";
            if (pegname == "A" || pegname == "a")
            {
                pegname    = "A";
                tempo      = first;
                alphatempo = ALPHAfirst;
                betatempo  = BETAfirst;
            }
            if (pegname == "B" || pegname == "b")
            {
                pegname = "B";

                tempo      = second;
                alphatempo = ALPHAsecond;
                betatempo  = BETAsecond;
            }
            if (pegname == "C" || pegname == "c")
            {
                pegname = "C";

                tempo      = third;
                alphatempo = ALPHAthird;
                betatempo  = BETAthird;
            }
            for (int i = number; i > 0; i--)
            {
                var b = new Sticks(i.ToString());
                tempo.Insert(0, new Sticks(i.ToString()));
                alphatempo.Insert(0, new Sticks(i.ToString()));
                betatempo.Insert(0, new Sticks(i.ToString()));
            }
            StepByStepFlag = false;
        }
Example #2
0
        private void StepByStepCommandProc()
        {
            if (StepByStepFlag == false)
            {
                Generate(NumberOfDisks);
                Queue <string> girl = new Queue <string>();
                if (pegend == "C" || pegend == "c")
                {
                    pegend = "C";
                }
                if (pegend == "B" || pegend == "b")
                {
                    pegend = "B";
                }
                if (pegend == "A" || pegend == "a")
                {
                    pegend = "A";
                }
                if (pegname == "A" && pegend == "B")
                {
                    girl = hoy.MoveStep(NumberOfDisks, BETAfirst, BETAsecond, BETAthird);
                    while (girl.Count != 0)
                    {
                        BackProcedure.Add(girl.Dequeue());
                    }
                }
                if (pegname == "B" && pegend == "A")
                {
                    girl = hoy.MoveStep(NumberOfDisks, BETAsecond, BETAfirst, BETAthird);
                    while (girl.Count != 0)
                    {
                        BackProcedure.Add(girl.Dequeue());
                    }
                }
                if (pegname == "A" && pegend == "C")
                {
                    girl = hoy.MoveStep(NumberOfDisks, BETAfirst, BETAthird, BETAsecond);
                    while (girl.Count != 0)
                    {
                        BackProcedure.Add(girl.Dequeue());
                    }
                }
                if (pegname == "C" && pegend == "A")
                {
                    girl = hoy.MoveStep(NumberOfDisks, BETAthird, BETAfirst, BETAsecond);
                    while (girl.Count != 0)
                    {
                        BackProcedure.Add(girl.Dequeue());
                    }
                }
                if (pegname == "B" && pegend == "C")
                {
                    girl = hoy.MoveStep(NumberOfDisks, BETAsecond, BETAthird, BETAfirst);
                    while (girl.Count != 0)
                    {
                        BackProcedure.Add(girl.Dequeue());
                    }
                }
                if (pegname == "C" && pegend == "B")
                {
                    girl = hoy.MoveStep(NumberOfDisks, BETAthird, BETAsecond, BETAfirst);
                    while (girl.Count != 0)
                    {
                        BackProcedure.Add(girl.Dequeue());
                    }
                }

                string zxc = BackProcedure.First();
                BackProcedure.Remove(BackProcedure.First());
                string[] checker = zxc.Split(' '); //641 2 + 53 *
                if (checker[5] == "A" && checker[8] == "C")
                {
                    var b = ALPHAfirst.ElementAtOrDefault(0);
                    ALPHAthird.Insert(0, b);
                    ALPHAfirst.RemoveAt(0);
                    Procedure.Add(zxc);
                    Steps = zxc;
                }
                if (checker[5] == "C" && checker[8] == "A")
                {
                    var b = ALPHAthird.ElementAtOrDefault(0);
                    ALPHAfirst.Insert(0, b);
                    ALPHAthird.RemoveAt(0);
                    Procedure.Add(zxc);
                    Steps = zxc;
                }
                if (checker[5] == "A" && checker[8] == "B")
                {
                    var b = ALPHAfirst.ElementAtOrDefault(0);
                    ALPHAsecond.Insert(0, b);
                    ALPHAfirst.RemoveAt(0);
                    Procedure.Add(zxc);
                    Steps = zxc;
                }
                if (checker[5] == "B" && checker[8] == "A")
                {
                    var b = ALPHAsecond.ElementAtOrDefault(0);
                    ALPHAfirst.Insert(0, b);
                    ALPHAsecond.RemoveAt(0);
                    Procedure.Add(zxc);
                    Steps = zxc;
                }
                if (checker[5] == "B" && checker[8] == "C")
                {
                    var b = ALPHAsecond.ElementAtOrDefault(0);
                    ALPHAthird.Insert(0, b);
                    ALPHAsecond.RemoveAt(0);
                    Procedure.Add(zxc);
                    Steps = zxc;
                }
                if (checker[5] == "C" && checker[8] == "B")
                {
                    var b = ALPHAthird.ElementAtOrDefault(0);
                    ALPHAsecond.Insert(0, b);
                    ALPHAthird.RemoveAt(0);
                    Procedure.Add(zxc);
                    Steps = zxc;
                }

                StepByStepFlag = true;
                return;
            }
            if (StepByStepFlag)
            {
                if (BackProcedure.Count != 0)
                {
                    string zxc = BackProcedure.First();
                    BackProcedure.Remove(BackProcedure.First());
                    string[] checker = zxc.Split(' '); //641 2 + 53 *
                    if (checker[5] == "A" && checker[8] == "C")
                    {
                        var b = ALPHAfirst.ElementAtOrDefault(0);
                        ALPHAthird.Insert(0, b);
                        ALPHAfirst.RemoveAt(0);
                        Procedure.Add(zxc);
                        Steps = zxc;
                    }
                    if (checker[5] == "C" && checker[8] == "A")
                    {
                        var b = ALPHAthird.ElementAtOrDefault(0);
                        ALPHAfirst.Insert(0, b);
                        ALPHAthird.RemoveAt(0);
                        Procedure.Add(zxc);
                        Steps = zxc;
                    }
                    if (checker[5] == "A" && checker[8] == "B")
                    {
                        var b = ALPHAfirst.ElementAtOrDefault(0);
                        ALPHAsecond.Insert(0, b);
                        ALPHAfirst.RemoveAt(0);
                        Procedure.Add(zxc);
                        Steps = zxc;
                    }
                    if (checker[5] == "B" && checker[8] == "A")
                    {
                        var b = ALPHAsecond.ElementAtOrDefault(0);
                        ALPHAfirst.Insert(0, b);
                        ALPHAsecond.RemoveAt(0);
                        Procedure.Add(zxc);
                        Steps = zxc;
                    }
                    if (checker[5] == "B" && checker[8] == "C")
                    {
                        var b = ALPHAsecond.ElementAtOrDefault(0);
                        ALPHAthird.Insert(0, b);
                        ALPHAsecond.RemoveAt(0);
                        Procedure.Add(zxc);
                        Steps = zxc;
                    }
                    if (checker[5] == "C" && checker[8] == "B")
                    {
                        var b = ALPHAthird.ElementAtOrDefault(0);
                        ALPHAsecond.Insert(0, b);
                        ALPHAthird.RemoveAt(0);
                        Procedure.Add(zxc);
                        Steps = zxc;
                    }
                }
                else
                {
                    return;
                }
            }
        }