miércoles, 19 de agosto de 2015

Jugando a los dados con Excel.

Hace unos días recordé tiempos de mi infancia en los que pasaba buenos ratos jugando al Risk (un juego de mesa de estrategia y azar)...
Eso si, nos encontramos que se había perdido un dado de este juego, y aunque pudimos rescatar uno de otro juego, se me ocurrió que quizá Excel podría solventar el problema en futuras ocasiones...
De ahí nace la entrada del día. Vamos a replicar la tirada de unos dados... en especial pensado para este juego que tan buenos momentos me hizo pasar (Risk).


Este será el resultado final:

Jugando a los dados con Excel.



El desarrollo consistirá en:
1- montar unos controles tipo 'botones de opción' de formulario sobre la hoja de cálculo, para que los jugadores marquen el número de dados con los que jugarán (1,2 ó 3).
2- reflejar una tirada aleatoria con imágenes de las caras de unos dados.
3- sustentar las tiradas con las funciones ALEATORIO.ENTRE, K.ESIMO.MAYOR y SI.


Para añdir los controles de formularios sobre nuestra hoja de cálculo deberemos tener a la vista la Ficha Desarrollador, y dentro de ella el grupo Controles > botón Insertar > sección 'Controles de formulario' > Botón de opción:

Jugando a los dados con Excel.



Insertaremos igualmente un Cuadro de grupo que contenga nuestros tres botones de opciones primeros... a los que hemos modificado el texto por Uno, Dos y Tres.
Muy importante, desde el Formato del control indicaremos como celda vinculada la celda E1:

Jugando a los dados con Excel.



Repetimos la misma operativa para el segundo de los Cuadros de grupo, esta vez solo con dos botones de opción, y vinculados a la celda E9.

Jugando a los dados con Excel.



El siguiente paso consiste en generar un número aleatorio entero entre 1 y 6, lo que conseguimos con la función ALEATORIO.ENTRE... pero asociaremos el valor devuelto a la selección realizada mediante los controles 'botón de opción' anteriores.
En las celdas F2:F4 del jugador 'atacante' añadimos las siguientes fórmulas:
celda F2: =SI($E$1>=1;ALEATORIO.ENTRE(1;6);"")
celda F3: =SI($E$1>=2;ALEATORIO.ENTRE(1;6);"")
y celda F4: =SI($E$1>=3;ALEATORIO.ENTRE(1;6);"")

Mientras que en las celdas F10:F11 correspondientes al jugador 'defensor' incorporamos:
celda F10: =SI($E$9>=1;ALEATORIO.ENTRE(1;6);"")
y celda F11: =SI($E$9>=2;ALEATORIO.ENTRE(1;6);"")

Como fórmula final, que en modo texto nos indica qué ha sucedido.. esto es, qué jugador a perdido o ganado, usamos dos cálculos auxiliares en F7:
=K.ESIMO.MAYOR($F$2:$F$4;1)>K.ESIMO.MAYOR($F$10:$F$11;1)
que compara el valor del dado más alto de ambos jugadores. Lo conseguimos empleando la función K.ESIMO.MAYOR(rango;1).
y en F8 para comparar el valor del segundo dado K.ESIMO.MAYOR(rango;2):
=K.ESIMO.MAYOR($F$2:$F$4;2)>K.ESIMO.MAYOR($F$10:$F$11;2)

En la celda H7, que dejaremos visible, insertamos la fórmula condicional SI anidada:
=SI(Y(E1>=2;E9=2);SI(Y(F7;F8);"mueren dos defensores";SI(Y(NO(F7);NO(F8));"mueren dos atacantes";"muere un atacante y un defensor"));
SI(Y(F7);"muere un defensor";SI(Y(NO(F7));"muere un atacante";"")))

que aplica las reglas del juego...

Jugando a los dados con Excel.


A estas alturas el juego ya es plenamente funcional.. pero le añadiremos algo de vistosidad mostrando imágenes de caras de dados que representen los valores obtenidos aleatoriamente en F2:F4 y en F10:F11.

Para conseguirlo necesitaremos las imágenes correspondientes a las seis caras de los dados, por ejemplo en otra hoja de nuestro libro de trabajo en Excel:

Jugando a los dados con Excel.


Importante fijarse que cada imagen está insertada completamente en una sola celda independiente!!!, esto es una imagen por celda.

El siguiente paso es una técnica que ya hemos empleado en varias ocasiones en este blog.
Crearemos los siguiente nombres definidos:
A_Dado1 =SI(Juego!$F$2="";INDIRECTO("ImgDados!A7");INDIRECTO("ImgDados!A"&Juego!$F$2))
A_Dado2 =SI(Juego!$F$3="";INDIRECTO("ImgDados!A7");INDIRECTO("ImgDados!A"&Juego!$F$3))
A_Dado3 =SI(Juego!$F$4="";INDIRECTO("ImgDados!A7");INDIRECTO("ImgDados!A"&Juego!$F$4))
D_Dado1 =SI(Juego!$F$10="";INDIRECTO("ImgDados!B7");INDIRECTO("ImgDados!B"&Juego!$F$10))
D_Dado2 =SI(Juego!$F$11="";INDIRECTO("ImgDados!B7");INDIRECTO("ImgDados!B"&Juego!$F$11))
sabiendo que la hoja 'ImgDados' es la que contiene nuestras imágenes. Y la hoja 'Juego' donde están nuestros cálculos...


A continuación seleccionaremos una celda de la hoja 'ImgDados', por ejemplo A1, y la copiaremos (un sencillo Ctrl+C), y de vuelta a la hoja 'Juego' pegaremos de manera especial como Imagen vinculada:

Jugando a los dados con Excel.


Repetiremos la acción las veces necesarias.. tres en total para el jugador 'atacante', y dos más para el jugador 'defensor'.

Ahora iremos imagen por imagen, seleccionándola y desde la barra de fórmula cambiando su referencia por los distintos nombres definidos creados anteriormente (A_Dado1, A_Dado2, A_Dado3 y D_Dado1, D_Dado2):

Jugando a los dados con Excel.



Ya tenemos nuestro juego de dados terminado. Si queremos podemos ocultar las columnas E:F de la hoja 'Juego' y desmarcar la Líneas de cuadrícula desde la ficha Vista...
Y listo, para cada tirada bastará Calcular la hoja presionando la tecla de función F9.

No hay comentarios:

Publicar un comentario en la entrada