domingo, 27 de marzo de 2016

Mini-juegos terminados! | Mini-games finished!

Español | English

Luego de tanta tarea y tanto estudio pude volver a trabajar en mi juego para continuar donde había dejado antes, en los mini-juegos. El problema que tenía que resolver era sobre buscar una forma de que las opciones en los mini-juegos de preguntas y respuestas tomen lugares aleatorios cada vez que se cargaba una nueva pregunta.

Uno puede pensar que esto es sencillo ya que le debemos decir al juego que agarre cualquier elemento de la lista de opciones utilizando la herramienta Random.Range(), lo cual es casi acertado ya que hay una sutileza, si utilizamos esta herramienta en el Update() del juego, va a realizarse todo el tiempo. El efecto que crea es que, cuando se carga una pregunta, las opciones se estén cambiando constantemente.

Luego de mucho pensar sobre esto, encontré una sencilla solución que era restringir la función para que ocurra una sola vez, entonces al cargar una pregunta, la función agarra cualquier elemento de la lista de opciones y se lo asigna a un botón, una vez que ya le asignó a todos los botones, se detiene.

Pero esto trae nuevos problemas: ¿Qué pasa si justo se elige el mismo elemento para 2 botones distintos? Como la función es aleatoria, esta probabilidad era bastante grande, por lo que tuve que crear una función que analice si la opción que tiene el botón es única, si es repetida, que la opción se genere de nuevo.

Con esto ya todo solucionado pudimos terminar este inconveniente pero nos quedaba la última complicación, las preguntas se podían repetir. Al igual que con las opciones, las preguntas son elegidas aleatoriamente de una lista de preguntas. Para solucionar esto lo que hice fue crear un listado, en el cual iba a contener como elementos las preguntas que ya se hicieron, de este modo, al generar una nueva pregunta, primero debe analizar la lista para ver si la pregunta no se hizo antes, en el caso de que ya se haya hecho, se genera una nueva pregunta.

De este modo entonces se resolvieron todas las problemáticas que surgían con los mini-juegos, que eran principalmente dadas por utilizar métodos aleatorios para seleccionar los elementos. Lo único que quedaría por mejorar sería la transición de una pregunta a otra, aunque para esto se puede crear un cartel que diga "Correcto" cuando uno acierta, mientras, en el fondo, se genera la nueva pregunta. 

Ya que tengo los mini-juegos creados, una de mis próximas entradas será una guía técnica sobre como crear un tipo de mini-juego en Unity con todas las mejoras y "trucos" que conté en esta entrada.

-L

----------------------------------------------------------------------------------

English


Finally, after a lot of homework and after studying, I could came back to work on my game to continue from where I left it, the mini-games. The problem that I had to solve was about finding a way in which the options of the quiz mini-games take random places whenever a new question was loaded.

One can think that this is simple as we can tell the game to grab any element from the options list using the Random.Range() tool, which is almost true but there is one little problem, when we use this tool on the Update() function of the game, it is going to be done all the time. This creates the effect that, when a question is loaded, the options are constantly changing.

After giving it a lot of though, I found a simple solution which is restricting the function so it is done only once, so, when the question is loaded, the function will grab a random element from the options list and assign it to each button, once every button has its own option, its stops.

But this brings new problems as: What if the same element is chosen for two different buttons? As the function is random, it is very probable that this could happen, so I had to create a function that analyzes each if  each button's option is unique, if it is not, make that option to be generated again.

With all this solved, there was one last problem, the questions can be asked twice. As with the options, the questions are picked randomly from a list of questions. To solve this, what I did was to create a new list, on which, each element are the questions that were already made, this way, when generating a new question, it first needs to analyze if the question wasn't ask before, if that is the case, a new question will be generated.

By these means, all the problems that came with the mini-games are solved, which were mainly caused by using random methods to select the questions and answers. The only thing that could be done better is the transition from one question to the new one, which for this I could use a message that says "Correct" one the player when one succeeds, meanwhile, in the background, a new question is generated.

As I have all the mini-games created, one of my next entries is going to be a technical guide teaching how to create quiz mini-game in Unity with all these fixes and "tricks" I've mentioned.

-L

No hay comentarios.:

Publicar un comentario