Excel: Programa juegos para que corran en una planilla de cálculo

Hay muchos ejemplos de juegos que corren sobre archivos de Excel y creados con funciones y macros.
JUE, 17 / NOV / 2016

En uno de nuestros libros de proyectos desarrollamos una planilla para jugar Master Mind (“el juego de los números”).

Como ese libro está descatalogado desde hace muchos años, vamos a explicar cómo armar la planilla.

Una partida de Master Mind. Después de seis intentos, averiguamos el número oculto en la celda [C1].

oct-01

El Master Mind es ese juego donde tenemos que adivinar un número pensado por nuestro oponente a partir de pistas que él mismo nos brinda. Por ejemplo, supongamos que él piensa en el número 5831. Nosotros tratamos de adivinar y arriesgamos: “¿es el número 1234?”. A lo que él contesta: “uno bien y uno regular”. Eso significa que una de las cifras de nuestro número está también en el suyo, en la misma posición (en el ejemplo, el tres) y otra está, pero en otra posición (el uno). Con esta información, intentamos con otro número, y así hasta dar con el número pensado por nuestro oponente.

El objetivo es crear una planilla contra la cual jugaremos. La planilla tendrá que hacer dos cosas:

* Generar el número para adivinar, manteniéndolo oculto.

* Evaluar nuestros intentos por adivinar, en términos de “bien” y “regular”.

Comencemos por el primer problema. Para generar el número hay que elegir cuatro dígitos del 0 al 9 y armar con ellos un número que no comience con cero. Una forma sencilla de hacer esto consiste en preparar una tabla de dos columnas y diez filas:

* En la primera columna escribimos los números del cero al nueve.

* En la segunda columna escribimos la función =ALEATORIO().

oct-02

Al ordenar esta tabla según los números aleatorios de la columna [B], el resultado es desordenar los dígitos de la columna [A].

Si ordenamos esta tabla según el contenido de la segunda columna, el resultado será, en realidad, desordenarla. Así obtendremos, en las primeras cuatro celdas de la primera columna, cuatro dígitos aleatorios. Con ellos podemos armar el número por adivinar con la fórmula =1000*A1+100*A2+10*A3+A4. Solamente tenemos que asegurarnos de que el número no comience con cero. Es decir, que [A1] (el primer dígito) sea mayor que cero. Para eso escribimos la fórmula dentro de una condicional: =SI(A1>0;1000*A1+100*A2+10*A3+A4; “Otra vez”).

oct-03

La fórmula de la celda [D1] arma un número con los primeros cuatro dígitos de la columna [A], siempre que el primero no sea cero.

Esta fórmula arma el número si el primer dígito es mayor que cero. Si no, muestra el texto que pide ordenar nuevamente la lista para generar otro número.

Esta fórmula la escribimos en [D1], con una columna de separación respecto de la tabla anterior. De lo contrario, la fórmula podría moverse al ordenar la tabla. Más tarde habrá que ocultar las celdas donde estén la tabla y el número generado, para que no las podamos ver mientras tratamos de adivinar.

Ahora es el momento de armar algunas fórmulas que comparen el número pensado con cada uno de nuestros intentos y nos informen cuántos dígitos están “bien” y cuántos “regular”.

Podemos hacer esta evaluación con funciones estándar de Excel. Pero es bastante complicado. Es más práctico crear funciones específicas en el editor de Visual Basic, con herramientas de programación de macros.

Comencemos con la función BIEN:

Function BIEN(objetivo, intento)

BIEN = 0

For i = 1 To 4

If Mid(objetivo, i, 1) = Mid(intento, i, 1) Then

BIEN = BIEN + 1

End If

Next

End Function

oct-04

Estas dos funciones evalúan en términos de “bien” y “regular” nuestros intentos por descubrir el número generado por el programa, según las leyes del Master Mind.

Esta función recorre los cuatro dígitos de cada número con un ciclo For… Next. Usa la función Mid (equivalente a la función EXTRAE de Excel) para separar cada dígito. Para cada separación hace la comparación entre los dígitos del número por adivinar (objetivo) y los de nuestro intento por adivinarlo (intento). Si la comparación es satisfactoria, quiere decir que ambos números tienen el mismo dígito en la misma posición. Entonces, cuenta ese dígito como “bien”.

Para la función REGULAR hay que comparar cada dígito del número objetivo con todos los dígitos de nuestro intento. Para eso necesitamos dos ciclos For… Next. Uno, para recorrer los dígitos del objetivo, y otro, para recorrer los de nuestro intento:

Function REGULAR(objetivo, intento)

REGULAR = 0

For i = 1 To 4

For j = 1 To 4

If Mid(objetivo, j, 1) = Mid(intento, i, 1) And (j <> i) Then

REGULAR = REGULAR + 1

End If

Next

Next

End Function

La comparación entre dígitos es similar a la de la función BIEN, pero agregamos una segunda condición: además de ser iguales los dígitos que se comparan, deben ser distintos los índices de ambos ciclos, que corresponden al orden del dígito dentro de los números.

Estas dos funciones se escriben dentro de un módulo en el editor de macros:

1. Seleccionamos la ficha [Programador].

2. Hacemos clic en el botón [Visual Basic]. Esto abre el editor de macros.

3. Una vez dentro del editor, tomamos las opciones [Insertar/Módulo]. Esto abre una ventana de texto.

4. Escribimos el código dentro de la ventana.

5. Cerramos el editor y volvemos a Excel.

Ya tenemos todos los elementos para completar la planilla:

* Tenemos los dígitos del 0 al 9 en [A1:A10].

* Tenemos la función ALEATORIO en [B1:B10].

* Tenemos la expresión =SI(A1>0;1000*A1+100*A2+10*A3+A4; “Otra vez”) en [D1].

* Tenemos las funciones BIEN y REGULAR escritas en el editor de macros.

Para completar el armado de la planilla necesitamos los siguientes elementos:

* En [E1] escribimos el título Bien.

* En [F1] escribimos el título Regular.

* En [E2] escribimos la fórmula =BIEN(D$1;D2) y la extendemos hacia abajo tantas filas como intentos queramos hacer.

* En [F2] escribimos la fórmula=REGULAR(D$1;D2) y la extendemos hacia abajo tantas filas como intentos queramos hacer.

Las fórmulas escritas en [E2] y [F2] evaluarán nuestros intentos (escritos a partir de [D2]), comparándolos con el número objetivo (escrito en [D1]).

Si ahora ordenamos la tabla, obtendremos el número objetivo en [D1]. A medida que escribamos nuestros pálpitos a partir de [D2], aparecerán las evaluaciones (dígitos “regular” y “bien”) a partir de [E2] y [F2]. Cuando obtengamos una puntuación de “cuatro bien” será que habremos encontrado el número.

Queda el problema de ocultar tanto la tabla como la celda [D1], que contiene el número por adivinar. Ocultar la tabla es fácil: podemos aplicarle un relleno negro u ocultar sus columnas.

oct-05

Así ocultamos las columnas donde se desordenan los dígitos que formarán el número objetivo.

Ocultar la celda [D1] es un poco más complicado, porque no debe dejarnos ver el número por adivinar, pero sí, el cartel Otra vez, que nos indica que el número obtenido comienza con cero y que tenemos que reordenar la tabla. Una forma de hacer esto es aplicar un formato personalizado:

1. Con el cursor en la celda [D1], oprimimos la combinación <Control+1>. Esto abre el cuadro de diálogo de [Formato].

2. Seleccionamos la ficha [Número].

3. Dentro de [Categoría], seleccionamos [Personalizada].

4. Dentro de [Tipo] escribimos “;;;@” (tres veces el punto y coma, seguidos de un arroba, sin las comillas).

5. Hacemos clic en [Aceptar].

oct-06

Este formato personalizado oculta los valores numéricos, pero muestra los textos.

Los formatos personalizados tienen cuatro códigos, separados por punto y coma. El primero se aplica a los números positivos; el segundo, a los negativos; el tercero, a los ceros, y el cuarto, a los textos. Los caracteres que escribimos dentro de [Tipo] no indican ningún código para números (positivos, negativos o ceros), pero sí, para textos: el arroba indica dejar el texto tal como es.

¡A jugar!

¡Comparte esta noticia!

Últimos lanzamientos Ver más