Traducir el blog

Jugando al Rabino en Excel - Parte 7

Posted on diciembre 24, 2024 by Excel Pedro Wave

🔝To translate this blog post to your language, select it in the top left Google box.


Parte 7 de un juego del Rabino

Esta es la séptima parte de una serie de artículos con los que intento diseñar en Excel un juego de cartas con una variante especial del Rabino.

Al final de este artículo hay un enlace a todos mis juegos de cartas.

En esta Parte 7 explicaré:

♥️  Cómo combina las cartas el motor del juego.

♠️  Cómo jugar una partida completa.

♦️  Cómo decidir qué carta jugar.

♣️  Qué falta por hacer para finalizar el diseño del juego.

Los tres últimos temas están explicado en el vídeo que acompaña a este artículo.

Esta es la imagen del fin de partida jugada durante la grabación del vídeo de la Parte 7. El jugador Pedro Wave (el usuario de mi versión de Excel) ganó la partida, cerrándola con -10 puntos, pues tenía todas las cartas combinadas. Sus cartas son las de abajo, estando ordenadas de mayor a menor, para poder calcular los puntos de las cartas que pudieran no estar combinadas. En este caso hay 6 cartas del mismo palo, formando escalera descendente de diamantes ♦️, y otras 4 cartas del mismo palo en escalera de corazones ♥️.

Sigo mostrando las cartas de arriba, que son las del jugador contra el que juego, el Rabino en Excel. Lo hago a propósito para mostrar cómo funciona el nuevo motor del juego que he añadido en esta fase del desarrollo de la Parte 7.

Las cartas de arriba han finalizado el juego con los 3 puntos del 3 de picas ♠️. El resto de cartas están combinadas por lo que son de 0 puntos. Lo más curioso es que las cartas no están ordenadas formando combinaciones, aunque realmente están combinadas: 5 cartas formando escalera de tréboles ♣️ y 4 cartas formando escalera de picas ♠️, con el rabino como si fuera el 10 de picas. Luego explico por qué no están ordenadas...


Vídeo con la Parte 7 del juego

En este vídeo verás la partida completa, que he jugado como ejemplo de lo que se puede hacer hasta ahora en la Parte 7 de esta fase de desarrollo del juego. Prácticamente será como se podrá jugar cuando finalice este diseño, por lo que es conveniente aprender cómo jugar a esta variante del Rabino en Excel.

Cuando veas este vídeo, comprobarás que no soy un buen jugador del Rabino. Y también dudo que sea un buen programador de juegos, pero estoy seguro que todo se aprende practicando, lo que te animo a hacer en cualquier momento del juego incierto de esta vida finita.

A continuación explicaré lo que no he querido contar en este vídeo para no hacer espóiler.


Cómo combina las cartas el motor del juego

Esta variante del Rabino no la he diseñado en plan profesional sino en plan didáctico, por lo que me he tomado ciertas libertades.

La primera libertad, fundamental desde esta Parte 7 y en adelante, es que uso herramientas propias de Excel para crear el motor del juego, con el que conseguir combinar las cartas de arriba del usuario: Rabino en Excel.

Y como adelantaba en el vídeo: ¡No lo he hecho programando macros VBA!

Y entonces: ¿Cuál es el motor del juego? ¡¡¡ El complemento Solver de Excel !!!

Si aún no conoces el complemento Solver será mejor que antes leas esto:

Resumiendo, y haciendo espóiler, o sea destripando el motor del juego, he usado el complemento Solver para determinar el valor mínimo de la celda que contiene la fórmula con la suma de los puntos de un jugador, después de combinar las cartas, cambiando el valor de otras celdas.

La siguiente imagen es el resultado de aplicar el complemento Solver:


La hoja 'Motor' sirve de motor del juego, valga la redundancia, y contiene bastantes fórmulas complejas que no voy a explicar aquí. Si tienes interés, pregúntame...

En la columna D están las posiciones de las 11 posibles cartas de cada jugador, identificadas con números del 1 al 11.

En la columna E están las cartas según las posiciones determinadas con los valores de la columna D.

Las columnas F a O contienen fórmulas auxiliares con las que determinar las posibles combinaciones de las cartas de un jugador, tanto con escaleras como con cartas del mismo valor.

En la columna P se obtiene los puntos de las cartas que no se han podido combinar.

El total de la suma de puntos del jugador 2, o sea del Rabino en Excel, se obtiene en la celda P14, denominada miSolver, con la fórmula: =SUBTOTALES(9;misPuntosCartas2)

Siendo el rango de celdas misPuntosCartas2: =Motor!$P$3:$P$13

Solver cambia automáticamente los valores de un grupo de celdas, llamadas celdas de variables de decisión, que en este motor del juego están en el rango D3:D13 denominado: miNumCartas2

Solver intenta cumplir 4 restricciones de esas celdas:

  • miNumCartas2 = entero
  • miNumCartas2 <= 11
  • miNumCartas2 >= 1
  • miNumCartas2 = Todos diferentes

O sea, que esas celdas sean números enteros del 1 al 11 y diferentes entre sí, sin importar su orden.

En este pantallazo están los parámetros de Solver definidos para el motor de este juego.

Se establece como objetivo la celda denominada miSolver: =Motor!$P$14, para que la fórmula que contiene sea el valor mínimo óptimo.

Los valores del rango de celdas miNumCartas2 son el resultado obtenido por el complemento Solver, con las posiciones de las cartas combinadas según las reglas del juego.

Se ha elegido como método para encontrar una solución: Evolutionary, ya que el solucionador evolutivo prácticamente no hace suposiciones sobre las relaciones entre las variables de decisión y la función objetivo y las restricciones. Aunque puede ser que encuentre una "buena" solución, pero no necesariamente la solución óptima, lo que es suficientemente bueno para nuestro motor de juego, que realmente busca una buena combinación de las cartas, ya que no es un jugador profesional, de momento...

Si quieres saber más sobre los tres tipos de métodos del complemento Solver, abre este enlace en inglés:


Motor del juego compatible

Para que el motor del juego sea compatible con todas las versiones de Excel, desde Excel 2010 hasta Excel para Microsoft 365, he tenido que sudar un poco...

Pero todo se ha resuelto leyendo esta página en inglés:

Si escribes código convencional para ejecutar Solver solamente funcionará en tu computadora, y en cualquier computadora con las mismas versiones de Excel y Solver. ¿A que no queremos eso?

Para que Solver funcione en cualquier versión de Excel, no debe haber referencias a una versión concreta, lo que se consigue llamando al método: Application.Run

Este método permite ejecutar dinámicamente cualquier procedimiento de Solver, llamando al nombre del procedimiento entre comillas dobles, seguido de una lista separada por comas de los argumentos que se pasan al procedimiento, ordenados por posición.

El código está incluido en las macros y funciones del módulo: modMotor

  • ActivarSolver: Activa y configura el complemento Solver.
  • ConfigurarSolver: Configura el complemento Solver.
  • ResolverCartas: Resuelve las combinaciones de las cartas de un jugador con el complemento Solver.
  • CheckSolverIntl: Chequea si existe el complemento Solver en cualquier versión internacional de Excel.
  • IsInstalled: Test si está instalado Solver.
  • AddInInstall: Instala el complemento Solver.

He separado la activación del complemento Solver de la resolución del problema con Solver, con lo que solamente hay que llamarlo en dos ocasiones:

  • La macro IniciarRabino llama a ActivarSolver, con lo que queda activado y configurado el complemento Solver.
  • La macro CombinarCartas llama a ResolverCartas, con lo que ejecuta el complemento Solver, previamente configurado, cada vez que intenta encontrar las posibles combinaciones de las cartas del jugador Rabino en Excel.

Si no se alcanza una solución, en un tiempo prefijado por las opciones (SolverOptions) que veremos a continuación, aparece un mensaje de advertencia y el jugador presionará el botón Continuar o Detener, según le convenga:

NOTA: Cuando se configura Solver, se modifican sus opciones con esta llamada:

Application.Run "Solver.xlam!SolverOptions", 16, , 0.1, , , , , , 99, , , , , , , , , , , , 8

Lo que modifica, de momento y a falta de más pruebas, los siguientes valores en este juego:

  • MaxTime: La cantidad máxima de tiempo (en segundos) que Solver empleará para resolver el problema. El valor es un número entero positivo definido a 16 segundos.
  • Precision: Un número entre 0 (cero) y 1 que especifica la precisión con la que se deben cumplir las restricciones. El valor está definido a 0.1
  • IntTolerance: Un número decimal entre 0 (cero) y 100 que especifica la tolerancia porcentual de optimalidad de enteros. El valor está definido a 99.
  • MaxTimeNoImp: Cuando se utiliza el método de resolución evolutiva, la cantidad máxima de tiempo (en segundos) que Solver continuará resolviendo sin encontrar soluciones significativamente mejoradas para agregar a la población. El valor es un entero positivo definido a 8 segundos.

Los argumentos separados por comas y ocupan el lugar descrito en esta página en inglés:

En esta página hay más información del complemento Solver usado con VBA:


Qué falta por hacer

Para poder finalizar el diseño del juego aún falta bastante por hacer:

  1. Ocultar las cartas del jugador Rabino en Excel, que juega las cartas de arriba.
  2. Decidir automáticamente que ese jugador robe una carta de la pila de descartes o del mazo de cartas.
  3. Saber qué carta descartar automáticamente.
  4. Ordenar las cartas combinadas por el motor del juego para el jugador Rabino en Excel.
  5. Decidir cuándo puede y quiere acabar la partida cualquiera de los dos jugadores.
  6. Guardar estadísticas con los jugadores que van ganando las series de partidas.

Todo eso lo iremos viendo en las siguientes Partes de este curso sobre el diseño de un juego de cartas en Excel.


Descarga la Parte 7 de un Rabino en Excel

Descarga la Parte 7 de una variante del Rabino, compatible con las versiones de escritorio desde Excel 2010 hasta Excel para Microsoft 365.

Las macros del archivo descargado están bloqueadas por defecto. Para desbloquear las macros debes modificar las Propiedades del archivo siguiendo estas instrucciones:

Las macros de Internet están bloqueadas de forma predeterminada en Office - Deploy Office | Microsoft Learn

Abre el archivo y presiona el botón: Habilitar edición cuando aparezca el aviso de VISTA PROTEGIDA.

Presiona el botón: Habilitar contenido cuando aparezca la ADVERTENCIA DE SEGURIDAD Las macros se han deshabilitado o se deshabilitó parte del contenido activo.

Las macros VBA no están protegidas, por lo que puedes analizarlas. Las hojas están protegidas con una contraseña que es fácil conocer, pues está guardada en VBA escrita en la constante: sContra.

ATENCIÓN: Se puede modificar este libro de Excel respetando esta licencia:

Creative Commons — Atribución-NoComercial-CompartirIgual-No portada — CC BY-NC-SA 4.0


Más juegos de cartas en Excel

En este enlace encontrarás todos mis juegos de cartas programados en Excel:

Me ayudarás si me indicas las erratas que encuentres en este artículo, y si me comentas qué es lo que te gustaría ver en los próximos artículos.

No Response to "Jugando al Rabino en Excel - Parte 7"

Leave A Reply

Indícame las erratas que encuentres y qué es lo que te gustaría ver en los próximos artículos.

Mi lista de blogs