/// <summary>
        /// Двигает 0 по направлению к цели, пока не станет его соседом
        /// </summary>
        /// <param name="map"></param>
        /// <param name="actual"></param>
        public static void MoveToNeighbourhood(this Cell[,] map, Cell actual)
        {
            var zero = map.GetNum(0);

            while (!zero.IsNear(actual))//двигаем 0 к цели пока не будем рядом
            {
                switch (zero.GetDirectionToMove(actual))
                {
                case Cell.Direction.Down:    //если 0 сверху цели
                    map.MoveDown(zero);
                    break;

                case Cell.Direction.Left:    //если 0 справа от цели
                    map.MoveLeft(zero);
                    break;

                case Cell.Direction.Up:    //если 0 снизу цели
                    map.MoveUp(zero);
                    break;

                case Cell.Direction.Right:    //если 0 слева от цели
                    map.MoveRight(zero);
                    break;

                default:
                    break;
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Метод размещения последних трёх клеток поля для одной из конечных конфигураций
        /// </summary>
        /// <param name="fourteen"></param>
        private void BlackMagic5(Cell fourteen)
        {
            fourteen.Actual = true;
            var zero = map.GetNum(0);

            while (!zero.IsNear(fourteen))
            {
                switch (zero.GetDirectionToMove(fourteen))
                {
                case Cell.Direction.Down:    //если 0 сверху цели
                    map.MoveDown(zero);
                    break;

                case Cell.Direction.Left:    //если 0 справа от цели
                    map.MoveLeft(zero);
                    break;

                case Cell.Direction.Up:    //если 0 снизу цели
                    map.MoveUp(zero);
                    break;

                case Cell.Direction.Right:    //если 0 слева от цели
                    map.MoveRight(zero);
                    break;

                default:
                    break;
                }
            }
            map.MoveLeft(zero);
            map.MoveDown(zero);
            map.MoveRight(zero);
            map.MoveRight(zero);
            map.MoveUp(zero);
            map.MoveLeft(zero);
            map.MoveDown(zero);
            map.MoveLeft(zero);
            map.MoveUp(zero);
            map.MoveRight(zero);
            map.MoveRight(zero);
            map.MoveDown(zero);
            map.MoveLeft(zero);
            map.MoveUp(zero);
            fourteen.Actual = false;
        }