⚡ 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:
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():
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:
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:
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
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.