예제 #1
0
파일: TRun.cs 프로젝트: rwsh/AI-Hanoi
        // сделать ход, если этот приводит к решению, то вернуть true
        public bool Run(bool Optimize, bool Target)
        {
            TRuns Runs = Hanoi.GetMove(); // вернуть допустимые ходы

            // если задан режим отбора целевых ходов
            if (Target)
            {
                Select(Runs); // выбрать целевые ходы
            }

            // если задан режим оптимизации ходов
            if (Optimize)
            {
                THanoi Test; // создаем класс для пробного состояния

                for (int i = 0; i < Runs.Count; i++)
                {
                    Test = Hanoi.Copy();                   // создать копию

                    Test.Move((Runs[i])[0], (Runs[i])[1]); // делаем пробный ход

                    // если получаемое состояние не было ранее
                    if (!IsPrev(Test))
                    {
                        Hanoi = Test.Copy();    // сохраняем тестовое состояние
                        Hanoi.Draw();           // рисуем новые состояние

                        Prev.Add(Hanoi.Copy()); // сохраняем получаемое состояние

                        // проверяем нет ли выигрыша
                        if (Hanoi.IsWin())
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                }
            }

            // если не было хода, то делаем случайный ход

            int k = rnd.Next(Runs.Count);           // выбираем случайный ход

            Hanoi.Move((Runs[k])[0], (Runs[k])[1]); // сделать ход
            Hanoi.Draw();                           // рисуем новую ситуацию

            // проверить нет ли выигрыша
            if (Hanoi.IsWin())
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #2
0
파일: TRun.cs 프로젝트: rwsh/AI-Hanoi
        Random rnd;          // генератор случайных чисел

        // конструктор класса
        public TRun(int N, Canvas g)
        {
            Hanoi = new THanoi(N, g); // создать класс для игры
            Hanoi.Draw();             // нарисовать начальную ситуацию

            Prev = new THanois();     // создать массив для пре

            rnd = new Random();       // инициализировать генератор слуайных чисел
        }
예제 #3
0
        // создать копию
        public THanoi Copy()
        {
            THanoi Res = new THanoi(N, g);

            Res.Stalk[0] = Stalk[0].Copy();
            Res.Stalk[1] = Stalk[1].Copy();
            Res.Stalk[2] = Stalk[2].Copy();

            return(Res);
        }
예제 #4
0
파일: TRun.cs 프로젝트: rwsh/AI-Hanoi
        // проверить, есть ли данная ситуация в сохраненных
        bool IsPrev(THanoi R)
        {
            for (int i = 0; i < Prev.Count; i++)
            {
                if (Prev[i].IsEqual(R))
                {
                    return(true);
                }
            }

            return(false);
        }
예제 #5
0
        // проверить на равенство
        public bool IsEqual(THanoi Hanoi)
        {
            for (int i = 0; i < 3; i++)
            {
                if (!Hanoi.Stalk[i].IsEqual(Stalk[i]))
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #6
0
파일: TRun.cs 프로젝트: rwsh/AI-Hanoi
 // добавить новый элемент
 public void Add(THanoi Hanoi)
 {
     arr.Add(Hanoi);
 }