Hace mas o menos un año, realicé en vivo un «mini-videojuego» en Godot 3.0, lo cual consistía a través de una interfaz, «adivinar el número» que un usuario pensaba (sin que lo ingrese ni diga).
Éste truco lo hice en vivo, mientras lo desarrollaba vía código, y nuestro espectador voluntario para el truco no fue ni más ni menos que el mismo Deybis Melendez.
El juego básicamente te hace pensar un número, y luego a través de operaciones matemáticas que le harás, llegaremos a un resultado.
Con el poder de las matemáticas, y combinándolas en éste caso con la programación, es que pude desarrollar ésta suerte de «mini-juego».
Ingredientes
Ingredientes
El nodo TextEdit es una caja de texto, que va a servir para que el usuario ingrese numeros (para las operaciones matemáticas que serán realizadas).
Creamos el nodo TextEdit, al cual le damos el valor inicial de 0000, y le añadimos al grupo «input», para luego poder buscarlo vía código con ese nombre.
Uno de los Label, va a estar ubicado arriba, y será el que le dará mediante diversos textos, instrucciones al usuario para que prosiga el juego.
Creamos el nodo Label, sin texto (ya que se lo iremos dando vía código) y lo ubicamos en el grupo «diacal».
El TextureButton, será un botón con imagen, que nos va a permitir que el usuario luego de ingresar los cálculos, pueda ir al siguiente paso, hasta llegar al resultado.
Agregamos el nodo TextureButton, y en el Inspector le agregamos las imagenes que le corresponde al boton Normal (cuando está sin presionar) y al Pressed (cuando está presionado).
Agregaremos un último Label para que el boton no carezca de texto, porque sino el usuario desconocería para que sirve.
Agregamos otro nodo Label y lo ubicamos encima del boton. En la propiedad Text del Inspector, le escribimos «SIGUIENTE».
El Script será el código que le vamos a dar a nuestro proyecto para que funcione, tenga instrucciones, cálculos y demás.
A un Nodo cualquiera, puede ser alguno decorativo de nuestro proyecto, o el principal, o inclusive uno de los que acabamos de crear en los anteriores pasos, vamos a darle click derecho y crearle el nuevo Script (le podes asignar el nombre que desees).
Primero vamos a crear una variable llamada dial_cal, donde guardaremos los dialogos o instrucciones que le vamos a dar al jugador en el juego. En este caso, mis instrucciones van a pedirle que sume, reste o multiplique numeros.
Luego de crear esta variable, entonces le vamos agregando los diferentes dialogos que vamos a utilizar en el juego.
Codigo A
var dial_cal = []
Codigo B
dial_cal.append("PENSA UN NUMERO") dial_cal.append("SUMA EL SIGUIENTE NUMERO") dial_cal.append("SUMA EL SIGUIENTE NUMERO") dial_cal.append("RESTA EL SIGUIENTE NUMERO") dial_cal.append("SUMA EL SIGUIENTE NUMERO") dial_cal.append("RESTALE EL NUMERO QUE PENSASTE") dial_cal.append("MULTIPLICA POR EL SIGUIENTE NUMERO") dial_cal.append("RESTA EL SIGUIENTE NUMERO") dial_cal.append("DIVIDI POR EL SIGUIENTE NUMERO")
A continuacion necesitamos encontrar por codigo los nodos que habíamos creado antes. Por un lado tenemos que hacer una «referencia» al nodo que da las instrucciones, para pasarle los dialogos que creamos (y así los muestre), y por el otro, necesitamos una referencia a la caja donde el usuario ingresa los números, así podemos operar con esos datos matemáticamente.
Entonces la variable ninput sera la referencia a la caja de texto, y la variable txt_dialcal sera la referencia al nodo de texto que servira para instrucciones.
Codigo A
var ninput var txt_dialcal
Codigo B
txt_dialcal = get_tree().get_nodes_in_group("diacal")[0] ninput = get_tree().get_nodes_in_group("input")[0]
Cada vez que presione el boton «SIGUIENTE», nuestro codigo deberia proceder con calculos y demas instrucciones. Por lo tanto necesitamos comunicar o «conectar» el boton con el script de codigo. Para ello vamos a la pestaña de Señales, y en la propiedad button_down (boton presionado) le indicamos que queremos conectar con el nodo donde tenemos nuestro script.
Vamos a agregar otro par de datos para operar. Primero necesitamos «recorrer» nuestra lista de dialogos. Vamos a mostrar el dialogo en orden, primero el dialogo 0, luego el 1, luego el 2, el 3, etc. Así que necesitamos un «indice» para ir recorriendo ese orden, algo que guarde en que numero de dialogo estamos. Para eso creamos la variable index.
Inicialmente vamos a proceder cargando el dialogo cero (el primero), así es el primero que se muestra la jugador.
Luego hacemos la creacion de 2 variables, gameover, para indicar si la partida sigue en pie o ya termino, y otra variable llamada resultado, para guardar el resultado de los calculos matematicos.
Codigo A
var index = 0
Codigo B
txt_dialcal.text = dial_cal[index]
Codigo C
var resultado = 0 var gameover = false
func _on_TextureButton_button_down(): if(index < dial_cal.size()-1 && !gameover): index += 1 txt_dialcal.text = dial_cal[index]
Ahora, a la funcion que se creo del boton, le vamos a escribir las primeras directivas. Le vamos a decir que cada vez que presione el botón, me cargue el dialogo siguiente. Para cargar el dialogo siguiente, aumento entonces el valor de index, y se lo cargo al nodo correspondiente.
Primeramente (como se puede ver), condicionamos ésta función diciendo que aún debo estar en el juego (es decir, que aun no es el fin de la partida), y por otro lado, permitirselo siempre y cuando no haya llegado al final de los dialogos posibles, porque sino trataria de cargar algo que no existe.
if(index >= dial_cal.size()-1): dial_cal.append("EL RESULTADO ES " + String(resultado)) index += 1 txt_dialcal.text = dial_cal[index] gameover = true
Debajo, pegamos lo anterior, para continuar con la programacion del boton. Lo que haremos es poner que sucede cuando llegamos al final de los dialogos.
Por ello medimos el tamaño de nuestra lista de dialogos, y si estamos en el ultimo, entonces se puede observar que creamos uno nuevo mostrando el resultado y haciendo que el final de la partida sea verdadero.
if("SUMA" in dial_cal[index-1]): resultado += int(ninput.text) elif("RESTA" in dial_cal[index-1]): resultado -= int(ninput.text) elif("MULTIPLICA" in dial_cal[index-1]): resultado *= int(ninput.text) elif("DIVIDI" in dial_cal[index-1]): resultado /= int(ninput.text)
Entre lo que agregamos a los botones, vamos a agregar estas lineas (no te preocupes si no entendes donde, ahora lo voy a mostrar).
Lo que representarían, son los calculos matemáticos, porque por ahora si bien los textos dicen «suma» tal, o «hace» tal, no le dijimos a la computadora que lo realice.
Lo que hace ésta sección de codigo, es fijarse si en el dialogo que le mostramos al jugador en ese momento, esta la palabra SUMA, RESTA, MULTIPLICA o DIVIDI… en cada caso, si encuentra la palabra, va a hacer la operacion correspondiente entonces y guardar el resultado.
Como prometí, así es como debes agregar el código restante.
Y voila, con eso tendríamos nuestro juego 100% funcional. Podes variar las operaciones (modificando los dialogos) siempre y cuando contengan las palabras clave mencionadas en los If.
También podes decorar y ajustarlo a tu gusto, para sorprender a tus amigos, familia, al perro, a quien sea. Espero hayas disfrutado. Nos seguimos sintonizando con más!
Saludos!