desarrollo,  lua-love2d basico

VIDEOJUEGOS CON LUA+LOVE2D, BASICS VIII – Bucles

¿que son los Bucles o Ciclos en un programa?

Estaba deseando llegar a esta entrada, sin duda conocer los bucles marca un antes y un después en la programación.

Sin ellos la programación como la conocemos seria impensable. Con ellos el trabajo se modula, el código se simplifica y reutiliza.

Un bucle es un trozo de código que se repite. Puede repetirse un número específico de veces o hasta que se cumpla una condición.

Veamos un ejemplo, vamos a mostrar por pantalla los números del 1 al 10:

print("altaruru lua - basics - bucles")

print(1)
print(2)
print(3)
print(4)
print(5)
print(6)
print(7)
print(8)
print(9)
print(10)

Vemos por pantalla la lista de números del 1 al 10.

Sin embargo hemos tenido que escribir 10 lineas, una por número. ¡Imagina que en vez de 10, queremos mostrar 10000 lineas! ¿tardaríamos bastante no?

Ahora haremos lo mismo y en esta ocasión usaremos un bucle.

Bucle for

Los bucles for se utilizan generalmente cuando sabemos el número de ciclos que vamos a realizar.

print("www.altaruru.com lua - basics - bucles")

for i=1,10,1 do
  print(i)
end

La salida es la misma, pero hemos escrito 3 lineas en vez de 10.

Hemos utilizado un bucle for, for i=1,10,1 do…, donde indicamos:

  • i: variable que contiene el valor en cada ciclo
  • 1: valor de inicio
  • 10: valor máximo
  • 1: paso en cada ciclo, valor que incrementa a cada ciclo

Si en vez de en uno en uno, quiero dar pasos de dos en dos:

print("www.altaruru.com lua - basics - bucles")

for i=1,10,2 do
  print(i)
end

El último valor del bucle es 9, el máximo posible es 10 y al ir de dos en dos del 9 pasa al 11 que esta fuera del rango.

Veamos otro ejemplo, valores del 24 al 236 en saltos/pasos de 7:

print("www.altaruru.com lua - basics - bucles")

for i=24,236,7 do
  print(i)
end

Bucle while

Si necesitamos un bucle que se ejecute siempre hasta que se cumpla una condición utilizamos while.

Como en otras ocasiones al programar, podemos lograr lo mismo desde distintos enfoques. Un while puede hacer lo mismo que un for si lo preparamos para ello, aunque según el caso puede requerir alguna linea más de código.

print("www.altaruru.com lua - basics - bucles")

i=1
while(i<11)
do
   print(i)
   i = i + 1
end

El resultado es la misma lista de números del 1 al 10 que vimos con el bucle for

Ya que tenemos una idea de que son los bucles, vayamos un poco más allá.

La mayoría de las aplicaciones, incluidos los juegos, se ejecutan hasta que decidimos salir, y durante ese tiempo siempre se están realizando tareas, vemos menús, suena música de fondo… Eso es así porque todo el código está contenido dentro de un bucle con una condición.

Vamos a verlo con un ejemplo más complejo, un pequeño juego donde tenemos que adivinar un número del 1 al 10.

Ejemplo mini juego con bucle condicional.

print("www.altaruru.com lua - basics - bucles")

print("mini juego - adivina un número")
print("hola, he pensado un número del 1 al 10")
print("intenta adivinarlo! :-D")

adivina = 7
numero = 0
while(adivina ~= numero)
do
	print("dime tu numero")
	numero=io.read("*n")
end
print("enhorabuena, acertaste!")

Al ejecutarlo el programa permite introducir números hasta que escribes el 7 que es el que «ha pensado».

El bucle se mantiene mientras adivina es distinto ~= de número:while(adivina ~= numero)

El programa no termina y sigue preguntando hasta que se introduce un 7.

Importante!!!

Los bucles ETERNOS son el motivo de cuelgue de juegos y programas por excelencia, si creamos un bucle cuya condición de salida no se cumple tendremos que «matar» la tarea, a todos nos ha pasado alguna vez.

En el caso de Lua con un Control+C desde el Terminal desde el que hemos iniciado suele bastar 😉

Conclusiones

Todos los programas contienen bucles que realizan operaciones cíclicas hasta que se cumple la condición que termina el bucle.

Cada vez que se pinta pon pantalla para representar una escena de un juego se está recorriendo un bucle que se encarga de las operaciones de pintado. Los famosos fps (frames por segundo) indican el número de veces por segundo que se repite dicho bucle.

Del mismo modo, el juego debe calcular los desplazamientos, colisiones, etc de los elementos del juego, cálculos que se realizan durante el ciclo de juego.

Espero haber sabido plasmar la idea, cualquier duda en comentarios y la resolveré encantado.

Próxima entrada, funciones en Lua!

Saludos!!!

Deja un comentario

Tu dirección de correo electrónico no será publicada.