miércoles, 20 de julio de 2011

Juego: el que quite la última piedra, pierde

Descargar el fichero: piedras.xlsm


Juguemos en Excel. Podemos programar una macro que nos permita jugar contra el ordenador a un juego que consiste en ir quitando piedras y donde el último que quite es el que pierde.

Al iniciar el juego, el ordenador genera de forma aleatoria un conjunto de piedras que oscilan entre 9 como mínimo y 30 como máximo. Al pulsar sobre el botón denominado 'Nuevo Juego' se generan las piedras iniciales que hay en el montón. Gráficamente, este montón inicial de piedras se muestra mediante celdas de color verde de la fila 9.


Ud. juega contra el ordenador. Se dispone de un montón de piedras. Cada jugador quita 1, 2 o 3 piedras en cada tirada. Comienza quitando Ud.. El último en quitar pierde.

Son varias macros enlazadas las que nos permiten que el juego funcione.
Código:

Private tuquitas, quitadass As Integer
Private mi, tu As Integer
Private n, yoquito As Integer
Sub piedras()
Dim c As Integer
Worksheets("Hoja1").Activate
Range("Q2").ClearContents
Worksheets(2).Range(Cells(9, 3), Cells(39, 32)).Clear
Randomize
n = Int(Rnd * 22 + 9)
Worksheets(2).Range(Cells(9, 3), Cells(9, n + 2)).Interior.Color = RGB(0, 255, 0)
Worksheets(2).Range(Cells(9, 3), Cells(9, n + 2)).Borders.Color = RGB(0, 0, 0)
Range("ah23").Value = n
Range("B9").Value = "Piedras Iniciales"
Range("A1").Select
ActiveWorkbook.Names.Add Name:="jugadas", RefersToR1C1:="=Hoja1!R10C2:R39C2"
Worksheets(2).Range("jugadas").ClearContents
tu = 1: mi = 2
End Sub
Public Sub Quito1()
quitadass = 1
Call quitadas
End Sub
Public Sub Quito2()
quitadass = 2
Call quitadas
End Sub
Public Sub Quito3()
quitadass = 3
Call quitadas
End Sub
Sub maquina()
yoquito = (n - 1) Mod 4
If yoquito = 0 Then
  yoquito = Int(Rnd * 3 + 1)
End If
n = n - yoquito
If n <= 0 Then
  Range("Q2").Value = "TU GANAS. FELICIDADES!!!"
Else
  Worksheets(2).Range("jugadas").Cells(mi, 1).Value = "Maquina quita " & yoquito
  Range("ah23").Value = n
  Call colores("Rojo")
  mi = mi + 2
End If
End Sub
Sub colores(micolor As String)
If micolor = "Amarillo" Then
  Worksheets(2).Range(Cells(9 + tu, 3), Cells(9 + tu, n + 2)).Interior.Color = RGB(255, 255, 0)
  Worksheets(2).Range(Cells(9 + tu, 3), Cells(9 + tu, n + 2)).Borders.Color = RGB(0, 0, 0)
ElseIf micolor = "Rojo" Then
  Worksheets(2).Range(Cells(9 + mi, 3), Cells(9 + mi, n + 2)).Interior.Color = RGB(255, 0, 0)
  Worksheets(2).Range(Cells(9 + mi, 3), Cells(9 + mi, n + 2)).Borders.Color = RGB(0, 0, 0)
End If
End Sub
Sub quitadas()
Worksheets(2).Range("jugadas").Cells(tu, 1).Value = "Tu quitas " & quitadass
n = n - quitadass
If n <= 0 Then
  Range("Q2").Value = "LA MÁQUINA GANA"
Else
  Call colores("Amarillo")
  tu = tu + 2
  Call maquina
End If
End Sub

¿Cuál es la clave del juego?

 Para ganar el juego se ha de .....

Spoiler. Al igual que al hablar de cine o de novelas, en las siguientes líneas desvelaremos el secreto del juego. Este aviso se hace por si usted desea descubrir por sí mismo cómo ganar a la máquina.

Para ganar el juego, se han de quitar en cada tirada un número de piedras tal que las que queden en el montón, menos una, sean múltiplo de cuatro. Esto se puede ver en la celda AI23 donde se utiliza la fórmula siguiente: =RESIDUO(AH23-1;4)

Truco

La celda AI23 oculta su contenido debido a que utiliza tinta blanca sobre fondo blanco. Podemos utilizar un truco mientras jugamos. Se trata de pulsar con el ratón sobre el indicador de columna AI, de esta forma queda seleccionada toda la columna AI, lo cual permite ver ligeramente el contenido de la celda AI23.

¡Espero que disfrutes con el juego de la última piedra!

2 comentarios: