// Mueve un bloque, según las normas que diga el gestor public MovableBlock Move(MovableBlock block) { if (block == null) { throw new ArgumentNullException(nameof(block)); } if (!CanMove(block)) { throw new InvalidOperationException("The required movement is not possible"); } Position originPosition = block.position; Debug.Log(ToString() + " moves " + block.ToString() + "."); var targetPosition = puzzle.MoveByDefault(block.position); // Si hemos tenido éxito ha cambiado la matrix lógica del puzle... pero no ha cambiado la posición (lógica), ni la mía ni la del hueco. Toca hacerlo ahora block.position = targetPosition; MovableBlock targetBlock = board.GetBlock(targetPosition); targetBlock.position = originPosition; UpdateInfo(); return(targetBlock); }