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