Diferencia entre revisiones de «Tutorial:Listas, Secuencias y Guiones para Jugar»

De GeoGebra Manual
Saltar a: navegación, buscar
(Página creada con «{{tutorial| title=Listas, Secuencias y Guiones para ir a Jugar <small>... o crear un juego</small> }} Tutorial: L Estoy empezando un nuevo tutorial para mostrar cómo, c...»)
 
m (Revertidos los cambios de Lilai (disc.) a la última edición de LailaTov)
 
(No se muestran 49 ediciones intermedias de 6 usuarios)
Línea 1: Línea 1:
{{tutorial|
+
<!--{{DISPLAYTITLE:Tutorial de Lista Secuenciada}}-->
 +
__NoToc__ {{tutoriales|
 
title=Listas, Secuencias y Guiones para ir a Jugar  <small>... o crear un juego</small>
 
title=Listas, Secuencias y Guiones para ir a Jugar  <small>... o crear un juego</small>
 
}}
 
}}
 
+
<h4>Jugando al '''''Nim'''''</h4>
Tutorial: L
+
{{DISPLAYTITLE:Listas, Secuencias y Guiones para Jugar}}
Estoy empezando un nuevo tutorial para mostrar cómo, con algunas listas creadas con el comando de secuencia y algunas secuencias de comandos que se pueden crear fácilmente un pequeño juego en el que nos enfrentamos a la computadora. El punto de vista didáctico, el interés es encontrar a los estudiantes con la estrategia ganadora: una especie de pequeña, abierta y divertida para los estudiantes de sexto problema.
+
{{Interfaz|Barra de Entrada}}
 
+
El siguiente ''applet'' permite jugar al '''''Nim''''' en un ambiente dinámico preparado en base a [[:Categoría:Comandos de Listas|listas]], [[Tutorial:Visibilidad_Condicional_y_Secuencias#Introducción_a_Secuencias|secuencias]] y '''''guiones''''' articulados adecuadamente, tal como puede apreciarse en la aplicación que aparece [[#Aplicación Interactiva|más adelante]]<sup><small><small>O [https://www.geogebra.org/m/zzjguyAG aquí... en francés]</small></small></sup><br><br>
El juego está inspirado en el espectáculo Fort Boyard. En el espectáculo, hay una serie de mini-juegos en la "sala de juntas". En este juego se disponen una serie de barras, elaborado como el jugador inicial. Cada jugador puede apagar uno, dos o tres vástagos. El que toma el último palillo perdido. Este juego tiene una estrategia ganadora que funciona exactamente tres cuartas partes de los casos. No spoiler, le toca a usted para encontrarlo! (Nivel 6).
+
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 una a tres por vez.<br>
Se detallan recomendaciones para procurar que todo ''applet'' de GeoGebra pueda desarrollarse adecuadamente en todos los dispositivos de destino correctamente.
+
<h3>Tendiendo las Piezas del Juego</h3>
 
+
Para ''tender'' las piezas del juego:
<u>Clave</u>: Es conveniente ir haciendo los controles a medida que se avanza en lugar de hacerlo recién al terminar. De detectar demoras u otro tipo de dificultad, conviene reportarlo para que los responsables de desarrollo lo verifiquen. Por el momento, HTML5 suele ser más lento que lo que corre bajo Java incluso en el mismo ''hardware''.
+
*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
==Sugerencias Generales==
+
**de 6 a 21, el número de piezas denominado '''''N''''' es decidida aleatoriamente
*Todos los elementos que no sos necesarios para operar en la interfaz debieras esconderse
+
**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'''''
*Los estilos más ambiciosos (como los sombreados más sofisticados o las imágenes de fondo) debieran limitarse a lo estrictamente necesario
+
**el número de piezas tomadas por el jugador, de 0 a 3, '''''n_2'''''
*Es preferible no incluir texto dentro del applet. En GeoGebra se pueden incluir instrucciones para el empleo de la hoja dinámica antes y detrás del ''applet''
+
**el número de palillos que se han ''tomado'' y que se ilustran cruzados
*Conviene ocultar los rótulos de los objetos
+
<h4>Ilustrando las Piezas</h4>
*Es mejor ocultar la cuadrícula y los ejes a menos que se los precise
+
*Los '''''n''''' ''palillos'' que componen el juego aparecen dispuestos en el centro de la pantalla. Son los segmentos creados por:<br>
*Si se emplea en numerosas ocasiones un valor que debe ser calculado, es mejor asignarle su valor a una variable
+
**'''<code>listaBanca = [[Tutorial:Visibilidad_Condicional_y_Secuencias#Introducción_a_Secuencias|Secuencia]]'''('''[[Comentarios:Comando_Segmento#Ejemplos_y_Variantes|Segmento]]'''('''(i / 2, -2), (i / 2, 2)), i, 1, n)</code>'''
 
+
*Las '''''n1''''' varillas que toma el ''equipo vía GG'' aparecen horizontalmente en la zona superior de la pantalla.
*[[Vista Algebraica]]:  
+
**'''<code>Mi_lista = [[Tutorial:Visibilidad_Condicional_y_Secuencias#Introducción_a_Secuencias|Secuencia]]'''('''[[Comentarios:Comando_Segmento#Ejemplos_y_Variantes|Segmento]]'''('''(5floor((i - 1) / 5), 4 - [[Comando Resto|Resto]]'''('''i - 1, 5) / 5), (5floor((i - 1) / 5) + 4, 4 - [[Comando Resto|Resto]]'''('''i - 1, 5) / 5)), i, 1, n1)</code>'''
**Si sólo se precisa la descripción de unos pocos objetos, es preferible describirlos a través de textos dinámicos y esconder la [[Vista Algebraica]]
+
*Las '''''n2''''' varillas que toma quien juega se distribuyen horizontalmente en la zona inferior de la pantalla, en ''montones de a 5'':<br>
**Se puede reducir el tiempo necesario para el trazado actualizado de cada Vista cerrando algunas categorías. Por ejemplo, pasando en la [[Vista Algebraica]] para ordenar los objetos por tipo y esconder todas las listas o indicado varios objetos como auxiliares.
+
**'''<code>listaJugador  = [[Tutorial:Visibilidad_Condicional_y_Secuencias#Introducción_a_Secuencias|Secuencia]]'''('''[[Comentarios:Comando_Segmento#Ejemplos_y_Variantes|Segmento]]'''('''(5floor ((i-1) / 5), -3,5 + [[Comando Resto|Resto]]'''('''i-1, 5 ) / 5), (5floor ((i-1) / 5) + 4, -3,5 + [[Comando Resto|Resto]](i - 1, 5) / 5)), i, 1, n2''')'''</code>
 
+
*Los palillos situados en la zona superior de la pantalla, indican lo que ha retirado el ''equipo GG'': en ''montones de a cinco''<br>
==Consejos para Guiones-Scripts==
+
**'''<code>listaSóloMía = [[Tutorial:Visibilidad_Condicional_y_Secuencias#Introducción_a_Secuencias|Secuencia]]'''('''(i / 2, 2.2), i, n, n - prisoyo + 1, -1''')'''</code>'''
*Valor[a,c+b] resulta mucho más rápido que a=c+b (para evitar que toda la construcción sea re-trazada) y ggbApplet.setValue() será aún más veloz.
+
*Los palillos situados en la zona inferior de la pantalla, indican lo que ha retirado el jugador:<br>
*Valor[a, [[Comando Si|Si]]'''['''x<3,4,5]] es mejor que [[Comando Si|Si]]'''['''x<3,Valor[a,4],Valor[a,5]]
+
**'''<code>listaSóloJugador = [[Tutorial:Visibilidad_Condicional_y_Secuencias#Introducción_a_Secuencias|Secuencia]]((i / 2, -2.2), i, n, n - priesjugador + 1, -1''')'''</code>'''
 
+
<h4>Aplicación Interactiva</h4>
==[[Listas]]==
+
Acaso sea importante ensayar estrategias sobre el escenario interactivo del ''applet'' antes de seguir adelante con la descripción de variables, [[:Categoría:Objetos_de_Acción#Botones|botones]] y guiones.
Los comandos como [[Comando Secuencia|Secuencia]] y [[Comando Zip|Zip]] son todavía lentos en algunos casos. Se está trabajando para lograr acelerarlos pero, entre tanto, es conveniente emplear la [[Vista de Hoja de Cálculo|Hoja de Cálculo]] para producir secuencias y/o la “Condición para Mostrar el Objeto” para simular una secuencia.
+
<hr>
 
+
<center>'''<ggb_applet width="512" height="562"  version="4.2" ggbBase64="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"/>'''</center><hr>
==Animaciones==
+
<h3>Variables a Definir</h3>
Es preferible preparar, en las animaciones de múltiples pasos, cada objeto por separado a manejar por su correspondiente deslizador, en lugar de plasmarlo todo en el mismo y único.<br>{{Note|1=Al respecto, vale revisar el tutorial [[Tutorial:Animándose|Animándose]].}}
+
*'''<code>jugador = AleatorioEntre(0, 1)</code>''' es un entero que indica si es ''mano'' el ''equipo GG'', cuando el valor es 0, o el que ''humanamente'' juega cuando es ''1''.
 
+
*'''<code>msg</code>''' es el valor ''booleano'' que indica que el ''equipo GG'' ya ha calculado su jugada y por lo tanto pasa a mostrarse el [[:Categoría:Objetos_de_Acción#Botones|botón]] de {{KeyCode|OK}} para concretarla con acuerdo de su contrincante.
Se han desarrollado también, ejemplos en los que se resuelve, de un modo eficiente, EDOs usando un deslizador para velocidad variable que es mucho más ágil que apelar a guiones ''scripts'' con eventos de actualización<sup><small>Ver este [http://www.geogebra.org/student/m23587 applet]</small></sup>.
+
*'''<code>ajugador = Si(restan ≟ 1, Mínimo(AleatorioEntre(1, 3), n), Si(restan ≟ 0, 3, restan - 1))</code>''' 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''
 
+
*'''<code>restan = Resto(n, 4)</code>''' entero que establece el resto respecto de 4 de los ''n'' palillos en juego
==[[LaTeX]]==
+
*'''<code>juegoganado = jugador ≟ 0 ∧ n ≟ 1</code>''' booleana que establece si es ''cierto'' que el juego se ha ganado
Mejor que emplear los comandos [[Comando TablaTexto|TablaTexto]] y [[Comando FórmulaTexto|FórmulaTexto]] es apelar a [[LaTeX|LaTeX básico]] que puede consultarse en [[Código LaTeX para las fórmulas más comunes]] y que también se ejecuta
+
*'''<code>juegoperdido  = jugador ≟ 1 ∧ n ≟ 1</code>''' booleana que establece si es ''cierto'' que el juego se ha perdido
[http://www.geogebra.org/student/m33487?mobile=true en HTML5]
+
*'''<code>terminado = juegoganado ∨ juegoperdido</code>''' variable ''booleana'' que indica si el juego, ganado o perdido, se ha terminado.
 
+
<h3>Interacción en Juego</h3>
==[[Imágenes]]==
+
Es preciso prever los siguientes [[:Categoría:Objetos_de_Acción#Botones|botones]]:<br>
Es preferible no emplear alta resolución, intentando en lo posible una menor. Especialmente cuando se trabaja con comandos como [[Comando Secuencia|Secuencia]].
+
*uno para dar inicio a una {{KeyCode|Nueva Partida}} que desencadene este guion:<br>
 +
<hr>
 +
  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))
 +
<hr>
 +
: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''<br>
 +
:{{Notes|1=<br><br>Se ha anotado...<br>'''<code>[[Comando Valor|Valor]]'''('''n, [[Comentarios:Comando_IndiceElegido|AleatorioEntre]](6,21''')''' ''')'''</code>''' y no...<br>'''<code>n=[[Comentarios:Comando_IndiceElegido|AleatorioEntre]]'''('''6,21''')'''</code>'''<br>... 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 {{KeyCode|F9}} a lo largo de la partida, cambiaría el valor de '''''n'''''<br>La primera variante, en cambio, solo se modifica el valor de '''''n''''' en tanto se lo conserva como objeto libre.<br><br>}}
 +
*uno para establecer en un guion - ''script'' -  'al clic' sobre la lista de palillos, cuántos seleccionará quien disputa el juego<br>
 +
*uno que permite aceptar al pulsar en {{KeyCode|OK}} que el ''equipo GG'' tome la cantidad de palillos que ha calculado conveniente o determinado aleatoriamente. Desencadenará el siguiente ''guion'':<br>
 +
<hr>
 +
  n=n-prisoyo
 +
  n1=n1+prisoyo
 +
  jugador=1
 +
  priesjugador=0
 +
<hr>: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.
 +
<h4>Puntos de cada Jugada</h4>
 +
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:<br>
 +
<hr>
 +
  clic=!clic
 +
  priesjugador=Resto(priesjugador+1,4)
 +
<hr>: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.<br>
 +
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:<br>'''<code>listaSóloJugador =  Secuencia((i / 2, -2.2), i, n, n - priesjugador + 1, -1)</code>'''<br>Lo que será mostrado bajo la correspondiente condición de visibilidad;<br>'''<code>jugador ≟ 1 ∧ (priesjugador > 0)</code>'''<br>... 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í:<br>
 +
<hr>
 +
  clic=!clic
 +
  priesjugador=Resto(priesjugador+1,4)
 +
<hr>
 +
<h3>Señalética Sincronizada</h3>
 +
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:<br><br>'''''Turno de quien Juega''''' será...<br>'''''jugador ≟ 1 ∧ (¬terminado)'''''<br><br>A su vez, la condición de:<br>'''''Tomando {{KeyCode|ajugador}}''''' será...<br>jugador ≟ 0 ∧ msg ∧ (¬terminado)<br><br>Finalmente,  la condición de:<br>'''''¡Partida Ganada!''''' será...<br>'''''juegoganado''''' y viceversa, la de:<br>'''''Partida Perdida''''' será...<br>'''''juegoperdido'''''<br><br>
 +
<h3>Fin de la Partida</h3>
 +
Detectar el final de cada partida es relativamente sencillo. Se termina cuando se ha ganado o perdido:<br>'''''juegoganado ∨ juegoperdido'''''<br>Se ha ganado si se verifica la siguiente condición:<br>'''''jugador ≟ 0 ∧ n ≟ 1''''' y viceversa, cuando:<br>'''''jugador ≟ 1 ∧ n ≟ 1'''''<br><br>
 +
Ambos finales son un buen principio para una {{KeyCode|Nueva Partida}}.
 +
[[Category:Tutoriales_Avanzados]]

Revisión actual del 21:38 12 ago 2020

Plantilla:Tutoriales

Jugando al Nim

Plantilla:Interfaz El siguiente applet permite jugar al Nim en un ambiente dinámico preparado en base a listas, secuencias y guiones articulados adecuadamente, tal como puede apreciarse en la aplicación que aparece más adelanteO aquí... en francés

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 una 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.

© 2024 International GeoGebra Institute