/// <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;
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Метод для размещения первого ряда
        /// </summary>
        internal void PlaceFirstRow()
        {
            map.Print();
            PlaceNum(map.GetNum(1));
            PlaceNum(map.GetNum(2));
            PlaceNum(map.GetNum(3));
            var four = map.GetNum(4);

            if (four.CheckPlace())
            {
                return;
            }
            four.TargRow = 1;
            four.TargCol = 2;
            var zero = map.GetNum(0);

            if (zero.Row == 0 && zero.Col == 3 && zero.Down == four)
            {
                four.Actual = true;
                map.MoveDown(zero);
                four.Actual = false;
            }
            else if (!(four.Row == 0 && four.Col == 3))
            {
                PlaceNum(four);
                BlackMagic1(four);
            }
        }