El juego del ahorcado

Hace tiempo que mi hijo de 10 años  me venía diciendo que le "enseñara a programar juegos",  quería programar algo así como el Doom o el Need For Speed y no se explicaba como yo, que me creo tan buen programador (ja-ja) no podía hacerlos. Dispuesto a bajarle los humos le dije que íbamos a programar un juego del ahorcado para que se diera cuenta de que la cosa no es tan fácil. 

El asunto es que nos pusimos a hacerlo entre los dos y en poco rato lo tuvimos listo. Lo publico aquí porque puede resultar de interés para los que recién están aprendiendo el asunto de los arrays de controles. 

Por lo demás el programa es bastante trivial, pero vamos viendo: empezamos por crear las partes del ahorcado con el editor de iconos de Microangelo, Muy a la rápida Tomás Jr. dibujó los 6 iconos correspondientes a la cabeza, el tronco, dos brazos y dos piernas como muestra las figuras siguientes:

 

Luego hicimos la form principal con el dibujo de la horca (usando el control "line" de la caja de herramientas) colocando un array de imágenes llamados Image1() con iconos en el orden determinado, un textbox con la propiedad Maxlengt=1 para entrar la letra y un array de cinco labels llamado label1()

Para hacer el array de imágenes primero se coloca un control de imágen (la cabeza) y despues se hace ctrl-c y ctrl-v para copiar y pegar, el editor preguntará si queremos crear un array y le contestamos "Si", para el array de labels lo mismo, se hace el primer label y los demás se copian indicando que se tratará de un array. Así el icono con la cabeza se llamará Image1(0), el del tronco Image1(1), etc... El primer label se llamará Label1(0), el segundo Label1(1)...etc.

Finalmente un label para poner el mensaje que anuncie que se ganó o perdió el juego y un controlbutton para ingresar la palabra que hay que adivinar, la form queda finalmente así

 

Los label no están visibles ya que les borramos la propiedad "Caption"

Luego cramos el form para ingresar la palabra secreta como se muestra a continuación:

Ahora viene el código, Para el Form principal queda:

Private Sub Command1_Click()
     'Carga la Form para ingresar la palabra secreta
     Load Form2
     Form2.Show
End Sub


Private Sub Form_Activate()
     Text1.SetFocus
     iniciar
End Sub

Private Sub Form_Load()
     indice = 0
     aciertos = 0
     iniciar
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
     If KeyAscii = 13 Then
          'Si la letra está dentro de la palabra secreta la escribe en la
          'posición que corresponde y sale de la subrutina
          If Text1.Text = letra(1) Then pos = 1: escribe: Exit Sub
          If Text1.Text = letra(2) Then pos = 2: escribe: Exit Sub
          If Text1.Text = letra(3) Then pos = 3: escribe: Exit Sub
          If Text1.Text = letra(4) Then pos = 4: escribe: Exit Sub
          If Text1.Text = letra(5) Then pos = 5: escribe: Exit Sub
          'Si la letra no está en la palabra secreta muestra una parte del ahorcado
          muestra
     End If
End Sub

Sub muestra()
     Beep
     'Muestra una parte del ahorcado dada por el indice, luego incrementa este indice
     Image1(indice).Visible = True
     indice = indice + 1
     'Limpia la caja de texto y le vuelve el foco
     Text1.Text = ""
     Text1.SetFocus
     If indice = 6 Then
          'Indice = 6 significa que el ahorcado está completo
          Label2.Caption = "Fin del Juego ¡Perdiste!"
          Label2.Visible = True
          Exit Sub
     End If
End Sub

Sub escribe()
     'Coloca la letra en la posición que corresponde
     Label1(pos - 1).Caption = letra(pos)
     Text1.Text = ""
     'Incrementa el contador de aciertos
     aciertos = aciertos + 1
     If aciertos = 3 Then
          'Si hay tres aciertos la palabra está completa
          Label2.Caption = "¡Felicitaciones por Adivinar!"
          Label2.Visible = True
     End If
     Text1.SetFocus
End Sub

Sub iniciar()
     For z% = 1 To 5
          'Almacena cada letra en el array letra()
          letra(z%) = Mid(palabra, z%, 1)
     Next z%
     'Escribe la primera y última letra de la palabra
     Label1(0).Caption = letra(1)
     Label1(4).Caption = letra(5)
End Sub

En el form de la palabra secreta colocamos el siguiente código

Private Sub Text1_KeyPress(KeyAscii As Integer)
     If KeyAscii = 13 Then
          palabra = Text1
          Unload Form2
          Load Form1
          Form1.Show
     End If
End Sub

Finalmente en el módulo de las variables globales 

'No es fácil abandonar las malas prácticas
'de programación :-)
G
lobal palabra
Global letra(20)
Global indice
Global pos
Global aciertos

Probamos nuestro programa y ya está todo Ok

En fin, mi objetivo de intimidar a Tomás Jr. no se cumplió para nada, porque su único comentario fué "yo creí que podías programar juegos buenos". Cría cuervos que te sacarán los ojos.