Пример #1
0
        // выбрать целевые ходы
        void Select(TRuns Runs)
        {
            int NeedDisk = Hanoi.Stalk[2].ForNeed(); // проверить нет ли необходимого диска

            // если есть необходимый диск, то ищем его
            if (NeedDisk > -1)
            {
                int[] forrun = new int[2]; // создем новй ход
                forrun[0] = -1;            // показатель, что хода нет
                forrun[1] = 2;

                // проверяем нет ли необходимого диска на 0 штыре
                if (Hanoi.Stalk[0].GetTop() == NeedDisk)
                {
                    forrun[0] = 0;
                }

                // проверяем нет ли необходимого диска на 1 штыре
                if (Hanoi.Stalk[1].GetTop() == NeedDisk)
                {
                    forrun[0] = 1;
                }

                // если был найден нужный диск, то делаем ход
                if (forrun[0] != -1)
                {
                    Runs.arr.Clear(); // очищяем  возможные ходы
                    Runs.Add(forrun); // добавляем только один необходимый ход

                    return;
                }
            }

            // проверяем, нет ли среди возможных ходов, которые будут шагом назад
            for (int i = 0; i < Runs.Count; i++)
            {
                int[] run = (Runs[i]);
                if (run[0] == 2)
                {
                    if ((Hanoi.Stalk[2].Disks[0] == 3) && (Hanoi.Stalk[2].Disks[1] != 1))
                    {
                        Runs.arr.RemoveAt(i);
                        i--;
                    }
                }
            }
        }
Пример #2
0
        // найти допустимые ходы
        public TRuns GetMove()
        {
            TRuns Runs = new TRuns();

            int[] res = new int[2];

            ArrayList arr = new ArrayList();
            Random    rnd = new Random();

            res = new int[2]; res[0] = 0; res[1] = 1; if (Can(res[0], res[1]))
            {
                arr.Add(res);
            }
            res = new int[2]; res[0] = 0; res[1] = 2; if (Can(res[0], res[1]))
            {
                arr.Add(res);
            }
            res = new int[2]; res[0] = 1; res[1] = 0; if (Can(res[0], res[1]))
            {
                arr.Add(res);
            }
            res = new int[2]; res[0] = 1; res[1] = 2; if (Can(res[0], res[1]))
            {
                arr.Add(res);
            }
            res = new int[2]; res[0] = 2; res[1] = 0; if (Can(res[0], res[1]))
            {
                arr.Add(res);
            }
            res = new int[2]; res[0] = 2; res[1] = 1; if (Can(res[0], res[1]))
            {
                arr.Add(res);
            }

            while (arr.Count > 0)
            {
                int k = rnd.Next(arr.Count);
                Runs.Add((int[])arr[k]);

                arr.RemoveAt(k);
            }



            return(Runs);
        }