/// <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; } } }
/// <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); } }