¡Hola! Para un final de la facultad que entrego el miércoles, tengo que desarrollar un juego basado en web utilizando:
Obligatoriamente: HTML, CSS, JavaScript vanilla y jQuery.
Opcional: PHP, librerías JS a elección.
El juego consiste en adivinar un número aleatorio de X cantidad de cifras. El juego está subido y lo pueden jugar acá: www.juegodescifralo.com
Si lo juegan, notarán que hay tres tipos de "cifras" dentro del número que ingrese el usuario:
Buenas: son aquellos dígitos que coinciden con la posición del dígito del número a adivinar. Por ejemplo:
Si el número a adivinar es 8512
Y el número ingresado es 8365... El 8 es una cifra "buena"
Regulares: supongo que van entendiendo... En el ejemplo anterior, el 5 es una cifra regular, ya que está dentro del aleatorio pero no en la posición correcta.
Malas: son las cifras que no están dentro del número aleatorio.
Me cuesta explicar el inconveniente que tengo. Paso a dejar mi código para chequear cada cifra y ver si es buena, regular o mala.
En su momento tuve otra versión de este código, pero lo que ocurría era lo siguiente:
Supongan que el número aleatorio es 8544
Y yo arriesgo el número 8455
Me va a decir: 8 bueno, 4 regular, 5 regular, 5 regular. Lo cual es incorrecto e ilógico. La falla está en que el código busca el número 5, y como lo encuentra dentro del número aleatorio, dice que el 5 es regular, sin importar la cantidad de veces que esté en el aleatorio.
Como dije, eso ocurría en una versión previa del código que puse arriba. Esta versión tiene algo de ese bug corregido, pero en ocasiones se sigue bugueando de formas básicamente impredecibles.
Todo empeora cuando en el juego se puede elegir la dificultad "personalizada", donde el usuario elige la cantidad de cifras que tenga el número a adivinar. Entonces puede elegir adivinar un número de 20 cifras, donde sí o sí habrá repetición de números, y no habrá números malos sino sólo regulares y buenos.
Mi pregunta se resume a: ¿de qué manera podría realizar este algoritmo de una manera más inteligente, y funcional sean cuantas seas las cifras del número a adivinar?
Sé que es extraño y difícil de entender. Mi recomendación es que jueguen (www.juegodescifralo.com), seguramente lo entiendan con mayor claridad.
¡Desde ya, muchas gracias por la ayuda!
Obligatoriamente: HTML, CSS, JavaScript vanilla y jQuery.
Opcional: PHP, librerías JS a elección.
El juego consiste en adivinar un número aleatorio de X cantidad de cifras. El juego está subido y lo pueden jugar acá: www.juegodescifralo.com
Si lo juegan, notarán que hay tres tipos de "cifras" dentro del número que ingrese el usuario:
Buenas: son aquellos dígitos que coinciden con la posición del dígito del número a adivinar. Por ejemplo:
Si el número a adivinar es 8512
Y el número ingresado es 8365... El 8 es una cifra "buena"
Regulares: supongo que van entendiendo... En el ejemplo anterior, el 5 es una cifra regular, ya que está dentro del aleatorio pero no en la posición correcta.
Malas: son las cifras que no están dentro del número aleatorio.
Me cuesta explicar el inconveniente que tengo. Paso a dejar mi código para chequear cada cifra y ver si es buena, regular o mala.
Código:
function checkNumeros(randomArray, miArray) {
for (var x = 0; x < randomArray.length; x++) {
var posRepetido = randomArray.indexOf(miArray[x]); //El número que recorro ahora está dentro del random??
if (posRepetido == -1) {
console.log("el numero" + miArray[x] + "no está dentro del conjunto");
malos++;
} else { //Está dentro del conjunto
regulares++;
if (miArray[x] == randomArray[x]) { //El actual es igual al aleatorio en la misma posicion
console.log("el numero" + miArray[x] + "está en la misma posición");
buenos++;
regulares--;
} else { //No es igual en la misma
if (randomArray[posRepetido] != miArray[posRepetido]) {
console.log("el numero" + miArray[x] + "está dentro del conjunto pero no en la misma posición");
} else {
regulares--;
malos++;
console.log("el numero" + miArray[x] + "no está dentro del conjunto");
}
}
}
}
var obj = {
buenos: buenos,
regulares: regulares,
malos: malos
};
return obj;
}
En su momento tuve otra versión de este código, pero lo que ocurría era lo siguiente:
Supongan que el número aleatorio es 8544
Y yo arriesgo el número 8455
Me va a decir: 8 bueno, 4 regular, 5 regular, 5 regular. Lo cual es incorrecto e ilógico. La falla está en que el código busca el número 5, y como lo encuentra dentro del número aleatorio, dice que el 5 es regular, sin importar la cantidad de veces que esté en el aleatorio.
Como dije, eso ocurría en una versión previa del código que puse arriba. Esta versión tiene algo de ese bug corregido, pero en ocasiones se sigue bugueando de formas básicamente impredecibles.
Todo empeora cuando en el juego se puede elegir la dificultad "personalizada", donde el usuario elige la cantidad de cifras que tenga el número a adivinar. Entonces puede elegir adivinar un número de 20 cifras, donde sí o sí habrá repetición de números, y no habrá números malos sino sólo regulares y buenos.
Mi pregunta se resume a: ¿de qué manera podría realizar este algoritmo de una manera más inteligente, y funcional sean cuantas seas las cifras del número a adivinar?
Sé que es extraño y difícil de entender. Mi recomendación es que jueguen (www.juegodescifralo.com), seguramente lo entiendan con mayor claridad.
¡Desde ya, muchas gracias por la ayuda!