Mastermind con php
Resuelto
renjie
-
k.hicham -
k.hicham -
salamo elikom
quiero programar el juego mastermind en php que contiene 3 niveles
1-> principiante: que no permite la repetición de los números (los 4 números deben ser distintos)
2-> experto: que permite la repetición de los números
3) -> inteligente: la posibilidad de que un espacio se quede vacío
no he encontrado las funciones que pueden ayudarme en este script para permitir la repetición de los valores y también la posibilidad de un espacio vacío.
gracias de antemano por querer ayudarme,
quiero programar el juego mastermind en php que contiene 3 niveles
1-> principiante: que no permite la repetición de los números (los 4 números deben ser distintos)
2-> experto: que permite la repetición de los números
3) -> inteligente: la posibilidad de que un espacio se quede vacío
no he encontrado las funciones que pueden ayudarme en este script para permitir la repetición de los valores y también la posibilidad de un espacio vacío.
gracias de antemano por querer ayudarme,
Configuración: Windows XP Internet Explorer 7.0
14 respuestas
-
-
Hola
Lo siento, no vi tu publicación.
No te doy la sintaxis de PHP, sino un método para elegir 4 números distintos.
Supongo que hay 6 colores (0,1,2,3,4,5) diferentes.
Haces un array de 6 posiciones inicializadas a 0, 1, 2, 3, 4, 5.
Mezclas este array intercambiando índices al azar. Y tomas las 4 primeras posiciones del array.
Si quieres 4 números que pueden ser iguales. Sacas un número aleatorio. Para la posición vacía, puedes, por ejemplo, elegir arbitrariamente 7 como posición vacía. Si el número elegido al azar es 7, entonces inicializas la posición a null.
Espero haber respondido a tu pregunta
Buenas noches
--
Google es tu amigo -
salamoelikom
muchas gracias por tu ayuda
para los 4 números es obligatorio utilizar rand() que elige por defecto los números sin que yo los sepa (el ordenador incluso los elige) así que el método que me diste es inútil en este caso,
y para la casilla vacía voy a intentarlo y te mostraré el resultado
de nuevo, gracias por tu respuesta -
Sí, rand() elige números aleatorios.
Pero dijiste que al principio, todos los números deben ser diferentes. Con rand() no hay nada que te garantice que solo obtendrás números diferentes.
--
Google es tu amigo. -
salam:
Hola, renjie & fidddy;
es cierto que rand() no necesariamente genera números diferentes, pero podemos con un pequeño 'truco' probar si tenemos dos variables o más con el mismo valor, si es así:
ALGO:
cada vez que rand() genera un valor, lo almacenamos en el arreglo,
inicializamos el contador c en 0,
y buscamos recorriendo todos los elementos anteriores del arreglo si ya existe un valor idéntico a este valor generado.
incrementamos el contador c,
y finalmente, si el contador ha sido incrementado
disminuimos el índice i para volver a hacer el rand().
PHP:
srand();
// echo "lanzar rand";
for($i=0; $i<4; $i++)
{
$haz[$i]=rand(0,9);
$c=0;
for($j=0; $j<$i; $j++)
{
if($haz[$i]==$haz[$j])
$c++;
}
if($c>0) $i--;
}
espero que mi 'truco' sea comprensible.
hasta pronto ------ k.hicham ------ESTE -
Hola kab_hicham,
Sí, es el método que parece más lógico. Pero el problema de este es que no es un buen hábito a tomar cuando hay muchos números que elegir. De hecho, el compilador podría caer varias veces en números que ya se han seleccionado. Además, es un algoritmo que no tiene una buena complejidad.
El método que consiste en inicializar un arreglo y mezclarlo por índice tiene una complejidad de O(n).
Atentamente
--
Google es tu amigo -
Salam,
hola Fiddy;
Te entiendo bien lo que quieres decir ("inicializamos el tablero con cuatro cifras y las mezclamos por índice") pero tú aún no has comprendido el objetivo del juego, no deben ser las cifras elegidas las que inicialice el programador, solo la máquina tiene derecho a elegir aleatoriamente las cuatro cifras dentro del intervalo [0-9].
En nuestro caso, solo tenemos que sacar 4 cifras, lo que hace que la probabilidad de obtener cifras que ya existen sea muy baja.
Espero que ya hayas jugado a este tipo de juegos "Master mind" para comprender bien el principio. Lo has dicho
google es tu amigo, diviértete con PHP
hasta pronto ------ k.hicham ------ESTE -
Hola kab_hicham,
Creo que no has entendido bien mi algoritmo entonces.
Inicializas un array. El programa lo mezcla tomando dos índices al azar. Y se realizan varias iteraciones.
Por lo tanto, los valores elegidos son también valores aleatorios.
Saludos
--
Google es tu amigo -
salamoelikom;
hola hicham y fiddy, gracias por sus participaciones. Creo que la mejor manera de evitar la repetición de los valores elegidos por rand es ponerlos en un archivo y así podemos mantener los mismos valores. -
Hola
renjie. Bueno, con tu solución, no veo dónde está el aspecto aleatorio. A menos que no haya entendido lo que querías decir.
Saludos cordiales
--
Google es tu amigo -
salamoelikom;
estoy hablando sobre las repeticiones de los valores que cada vez que el jugador repite el juego (antes de que supere las 10 veces) las valores elegidas por rand() deben permanecer las mismas (no es el mismo problema de la repetición de números), pero aun así es la solución de mastermind para evitar el cambio de los valores de rand() porque cada vez que se ejecuta el programa rand() toma nuevos valores. -
Re,
Si quieres que mantenga los mismos valores, tú mismo los eliges al azar y los pones en tu programa. Al fin y al cabo, poner eso en un archivo es complicarse la vida. Pero tú eres el programador ;)
Cdt
--
Google es tu amigo -
salamoelikom,
no es complicado, es simple trabajar con los archivos, pero es una solución mejor será mejor ... -
Salam:
Hola, renjie & fidddy;
Yo al principio creí que el problema discutido era que rand() debía generar 4 números aleatorios sin repetición. :s
bueno, ahora es otro problema que se ha planteado, el hecho de que los cuatro números generados deben permanecer iguales durante la partida del juego (10 intentos), sí lo que te dijo renjie:(" para evitar la repetición de los valores elegidos por rand, se guardan en un archivo y así podemos mantener los mismos valores.") es viable, claro, pero no hay que ignorar que el archivo local donde vas a poner tus valores no debe ser accesible por el usuario y luego tus 4 números serán revelados, y posteriormente se pierde el principio del juego. "Master Mind"
Por eso te propongo dos soluciones: o los pones en un archivo pero encriptados mediante una de las funciones (md5(), crypt(), ..) y hay muchas otras.
Si no, si no quieres hacer encriptación, debes poner tu archivo en un servidor (hosting) así proteges tranquilamente tus 4 números :).
espero haber sido objetivo en mi análisis, es mi punto de vista y es discutible.
hasta pronto ------ k.hicham ------ESTE