Tutorial:Listas, Secuencias y Guiones para Jugar

De GeoGebra Manual
Saltar a: navegación, buscar
Tutorial: Listas, Secuencias y Guiones para ir a Jugar ... o crear un juego

Jugando al Nim

El siguiente applet permite jugar al Nim en un ambiente dinámico preparado en basea listas, secuencias y guiones articulados adecuadamente, tal como puede apreciarse en la aplicación que aparece más adelanteO aquí... en francés fr:Tutoriel:Listes, Séquence, scripts pour créer un jeu..

La estrategia ganadora puede descubrirse o encontrarse en uno de los tantos enlaces descriptivos del juego, en el que pierde quien no tiene más remedio que tomar la última pieza de las que, por turno, se pueden quitar de uno a tres por vez.

Tendiendo las Piezas del Juego

Para tender las piezas del juego:

  • Crear algunos deslizadores enteros y ajustables como el que establecerá...
    • si será primero el equipo que opera automáticamente a través del applet o quien humanamente juegue, es decidido al azar
    • de 6 a 21, el número de piezas denominado N es decidida aleatoriamente
    • el número de piezas, de 0 a 3, que toma el equipo que opera automáticamente a través del applet de GG, llamado n_1
    • el número de piezas tomadas por el jugador, de 0 a 3, n_2
    • el número de palillos que se han tomado y que se ilustran cruzados

Ilustrando las Piezas

  • Los n palillos que componen el juego aparecen dispuestos en el centro de la pantalla. Son los segmentos creados por:
  • Las n1 varillas que toma el equipo vía GG aparecen horizontalmente en la zona superior de la pantalla.
    • Mi_lista = Secuencia[Segmento[(5floor((i - 1) / 5), 4 - Resto[i - 1, 5] / 5), (5floor((i - 1) / 5) + 4, 4 - Resto[i - 1, 5] / 5)], i, 1, n1]
  • Las n2 varillas que toma quien juega se distribuyen horizontalmente en la zona inferior de la pantalla, en montones de a 5:
    • listaJugador = Secuencia[Segmento[(5floor ((i-1) / 5), -3,5 + Resto[i-1, 5 ] / 5), (5floor ((i-1) / 5) + 4, -3,5 + Resto[i - 1, 5] / 5)], i, 1, n2]
  • Los palillos situados en la zona superior de la pantalla, indican lo que ha retirado el equipo GG: en montones de a cinco
    • listaSóloMía = Secuencia[(i / 2, 2.2), i, n, n - prisoyo + 1, -1]
  • Los palillos situados en la zona inferior de la pantalla, indican lo que ha retirado el jugador:
    • listaSóloJugador = Secuencia[(i / 2, -2.2), i, n, n - priesjugador + 1, -1]

Aplicación Interactiva

Acaso sea importante ensayar estrategias sobre el escenario interactivo del applet antes de seguir adelante con la descripción de variables, botones y guiones.



Variables a Definir

  • jugador = AleatorioEntre[0, 1] es un entero que indica si es mano el equipo GG, cuando el valor es 0, o el que humanamente juega cuando es 1.
  • msg es el valor booleano que indica que el equipo GG ya ha calculado su jugada y por lo tanto pasa a mostrarse el botón de OK para concretarla con acuerdo de su contrincante.
  • ajugador = Si[restan ≟ 1, Mínimo[AleatorioEntre[1, 3], n], Si[restan ≟ 0, 3, restan - 1]] es el entero que calcula, basándose en el número de palillos aún disponibles, qué cantidad de piezas debe tomar el equipo GG
  • restan = Resto[n, 4] entero que establece el resto respecto de 4 de los n palillos en juego
  • juegoganado = jugador ≟ 0 ∧ n ≟ 1 booleana que establece si es cierto que el juego se ha ganado
  • juegoperdido = jugador ≟ 1 ∧ n ≟ 1 booleana que establece si es cierto que el juego se ha perdido
  • terminado = juegoganado ∨ juegoperdido variable booleana que indica si el juego, ganado o perdido, se ha terminado.

Interacción en Juego

Es preciso prever los siguientes botones:

  • uno para dar inicio a una Nueva Partida que desencadene este guion:

 Valor[n,AleatorioEntre[6,21]]
 n1=0
 n2=0
 Valor[priesjugador,ajugador]
 priesjugador=0
 jugador=AleatorioEntre[0,1]
 Valor[msg,Si[jugador==0,true,false]]

Como se aprecia, echa a la suerte la cantidad de palillos dado que n tendrá un valor entre 6 y 21 y pone a cero los valores de n1 y de n2. También establece, aleatoriamente, quién será mano
Notas:

Se ha anotado...
Valor[n, AleatorioEntre[6,21] ] y no...
n=AleatorioEntre[6,21]
... porque en este último caso se estaría cambiando la definición misma del objeto n inicialmente un número libre a uno limitado por la definición. Incluso cada vez que se pulsara F9 a lo largo de la partida, cambiaría el valor de n
La primera variante, en cambio, solo se modifica el valor de n en tanto se lo conserva como objeto libre.

  • uno para establecer en un guion - script - 'al clic' sobre la lista de palillos, cuántos seleccionará quien disputa el juego
  • uno que permite aceptar al pulsar en OK que el equipo GG tome la cantidad de palillos que ha calculado conveniente o determinado aleatoriamente. Desencadenará el siguiente guion:

 n=n-prisoyo
 n1=n1+prisoyo
 jugador=1
 priesjugador=0

:Como puede apreciarse, disminuye en número n de palillos disponibles según los que se hayan tomado e incrementa, en la misma medida, los que se van amontonando
  • uno para mostrar la cantidad de palillos restantes tras cada jugada
  • uno para establecer la cantidad de palillos disponibles aún.

Puntos de cada Jugada

Con cada clic sobre la hilera de palillos disponibles, quien juega puede establecer la cantidad que va a tomar, entre 1 y 3 a partir del siguiente guion:


 clic=!clic
 priesjugador=Resto[priesjugador+1,4]

:Como se aprecia, si se superan las tres pulsaciones o clic, el contador de palillos a tomar se reinicia de modo que no se pueda contar más que hasta 3.

Cuando sea el turno del equipo GG, serán visibles los puntos que señalarán el número de palillos que tomará este contrincante que opera según la siguiente formulación:
listaSóloJugador = Secuencia[(i / 2, -2.2), i, n, n - priesjugador + 1, -1]
Lo que será mostrado bajo la correspondiente condición de visibilidad;
jugador ≟ 1 ∧ (priesjugador > 0)
... teniendo en cuenta que lo que da valor a priesjugador es determinado por el guion asociado a la hilera de palillos disponibles que se formula así:


 clic=!clic
 priesjugador=Resto[priesjugador+1,4]

Señalética Sincronizada

Cada uno de los textos que se exponen a lo largo de la partida estará sincronizado de modo tal que las condiciones de visibilidad sean las propicias. Así, la condición de:

Turno de quien Juega será...
jugador ≟ 1 ∧ (¬terminado)

A su vez, la condición de:
Tomando ajugador será...
jugador ≟ 0 ∧ msg ∧ (¬terminado)

Finalmente, la condición de:
¡Partida Ganada! será...
juegoganado y viceversa, la de:
Partida Perdida será...
juegoperdido

Fin de la Partida

Detectar el final de cada partida es relativamente sencillo. Se termina cuando se ha ganado o perdido:
juegoganado ∨ juegoperdido
Se ha ganado si se verifica la siguiente condición:
jugador ≟ 0 ∧ n ≟ 1 y viceversa, cuando:
jugador ≟ 1 ∧ n ≟ 1

Ambos finales son un buen principio para una Nueva Partida.

© 2018 International GeoGebra Institute