⚡ Capítulo 6: Control del bucle y optimización

En el capítulo anterior hiciste algo muy importante:

👉 controlaste a Tobi en tiempo real con el teclado.

Pero ahora viene una mejora clave:

👉 hacer que el programa sea más eficiente y controlado.

🧠 El problema del bucle infinito

Recuerda este código:

while True:
  if tobi.iskeypressed("w"):
    tobi.move(10)

👉 Funciona… pero tiene un problema:

  • Va demasiado rápido
  • No hay control del tiempo
  • Puede saturar el programa

1. Controlar la velocidad (delay)

Necesitamos hacer pequeñas pausas en el bucle.

Para eso usamos delay():

tobi = Sprite('Tobi')

while True:

  if tobi.iskeypressed("w"):
    tobi.move(10)

  tobi.delay(0.05) # pausa de 0.05 segundos

¿Qué hace esto?

  • Frena el bucle
  • Hace el movimiento más controlado

👉 Ahora el movimiento es más suave.

2. Evitar acciones excesivas

Mira este problema:

Si mantienes pulsada una tecla…

👉 ejecuta la acción muchas veces seguidas.

Esto puede provocar:

  • Movimientos demasiado rápidos
  • Mensajes repetidos sin control

3. Control básico del flujo

Podemos organizar mejor el código:

tobi = Sprite('Tobi')

while True:

  if tobi.iskeypressed("w"):
    tobi.move(10)

  elif tobi.iskeypressed("s"):
    tobi.move(-10)

  elif tobi.iskeypressed("a"):
    tobi.turn(-10)

  elif tobi.iskeypressed("d"):
    tobi.turn(10)

  tobi.delay(0.05)

¿Qué mejora esto?

  • Solo ejecuta UNA acción cada vez
  • Evita conflictos de teclas

⚠️ Diferencia importante

  • if + if + if → puede ejecutar varias acciones a la vez
  • if + elif → solo ejecuta una

👉 Esto es control real del programa.

4. Movimiento más natural

Podemos ajustar valores para mejorar la experiencia:

tobi = Sprite('Tobi')

velocidad = 5 # control de velocidad

while True:

  if tobi.iskeypressed("w"):
    tobi.move(velocidad)

  elif tobi.iskeypressed("s"):
    tobi.move(-velocidad)

  elif tobi.iskeypressed("a"):
    tobi.turn(-5)

  elif tobi.iskeypressed("d"):
    tobi.turn(5)

  tobi.delay(0.05)

👉 Ahora puedes cambiar la velocidad fácilmente.

🧠 Cómo piensa Python aquí

Python hace esto en bucle:

  • Comprueba teclas
  • Ejecuta UNA acción
  • Espera un poco
  • Repite

👉 Esto hace que el programa sea estable.

🚀 Reto Abutuber: Control profesional

Mejora el control de Tobi:

  • Añade una variable velocidad
  • Haz que el movimiento sea más suave
  • Usa elif en lugar de varios if

Extra: prueba distintos valores de delay

Ver solución
tobi = Sprite('Tobi') # crea el personaje

velocidad = 5 # define velocidad

while True:

  if tobi.iskeypressed("w"):
    tobi.move(velocidad)

  elif tobi.iskeypressed("s"):
    tobi.move(-velocidad)

  elif tobi.iskeypressed("a"):
    tobi.turn(-5)

  elif tobi.iskeypressed("d"):
    tobi.turn(5)

  tobi.delay(0.05)

💡 Consejo Abutuber: Programar no es solo que funcione… es que funcione bien y de forma controlada.