Recordar movimientos y posibles victorias

En este laboratorio, continuarás con tu Proyecto "tres en línea" para hacer que el programa analice el tablero de juego para detectar victorias y empates.

En esta página, te prepararás permitiendo que el programa registre los movimientos que se realizan y enseñándole los grupos ganadores de tres casillas.

Cuando escribiste Tres en línea por primera vez, era fácil detectar movimientos ilegales (moverse a un cuadrado que ya lleva un disfraz de X u O) porque cada objeto podía probar eso sin conocer el resto del tablero de juego. Pero para detectar victorias y empates, el programa necesita una forma de probar el estado del tablero de juego completo, no solo de una pieza individual. Por eso, usarás una variable global, tablero, para rastrear si el cuadrado en cada posición está vacío o si contiene una X o una O.

Aprendiste sobre variables globales en Unidad 2 Laboratorio 1, Página 4: Mantener la puntuación con variables globales.

imagen de: visualizador del tablero con la variable que muestra {O, O, X, 4, X, 6, X, 8, 9}; y el juego de tres en línea con X, X, O en la primera fila; vacío, X, fila del medio vacía; y X, vacío, fila inferior vacía

  1. Abre tu proyecto U3L1-TresEnLínea y guárdalo como U3L3-TrenEnLínea para que conserves la versión anterior cuando edites la nueva.
  2. Haz una variable global llamada tablero que, al comienzo del juego, contenga una lista con los números del 1 al 9.

Cada objeto necesita conocer su propia posición en el tablero para que pueda usar el bloque objeto de para reemplazar esa posición con una X o una O. Entonces, crearás una variable de objeto, número de posición, y cada clon tendrá su propia versión de esta variable.

: Variable del objeto

Una variable del objeto (sprite variable) es como una variable global en el sentido de que no pertenece a un programa en particular, pero sí pertenece a un objeto en particular.

  1. Crea una variable de objeto número de posición.

    La forma de hacer una variable de objeto es similar a la forma de hacer variables globales:

    • Haz clic en botón para hacer una variable en la paleta Variables.
    • Luego, mientras escribes el nombre de la variable, selecciona "solo para este objeto" para convertirlo en una variable de objeto.

    ventana de diálogo de nombre de la variable con la opción “solo para este objeto” seleccionada
  2. A medida que creas los clones, establece el número de posición de cada uno en el valor apropiado (1-9).
    En el bucle que hace los clones, aumenta la variable del programa principal en uno para cada nuevo clon para que cada clon tenga un valor único.
    Asegúrate que el número de posición del padre no termine siendo un número del 1 al 9 para que no entre en conflicto con un clon.
  3. Cuando se haga clic en un cuadrado, reemplaza la entrada de ese cuadrado en la lista tablero con X u O según corresponda.
  4. Observa los valores almacenados en la variable tablero mientras juegas un juego de tres en línea. Asegúrate que se actualiza como esperas y corrige cualquier error.

Almacenamiento de todas las formas de ganar

Para programar una forma de detectar una victoria, debes determinar qué se considera una victoria. Almacenarás cada triple ganador posible como una lista de tres números de posición (un triple). Por ejemplo, este triple ganador podría representarse como lista{3, 5, 7} porque la victoria está en las posiciones 3, 5 y 7:
victoria diagonal desde la esquina inferior izquierda hasta la esquina superior derecha

  1. Habla con tu compañero
    1. ¿Cuántos triples ganadores son posibles?
    2. Anota cada uno de los triples ganadores posibles.

Podrías verificar cada posible ganancia por separado:
¿hay una victoria? (Comentario: ¡No construyas esto! Solo léelo): si (¿hay una victoria en (1) (2) (3) ?) reportar (verdadero); si (¿hay una victoria en (4) (5) (6) ?) reportar (verdadero); ...; si (¿hay una victoria en (3) (5) (7) ?) reportar (verdadero); reportar (falso)

Pero eso es demasiado código, especialmente porque tendrás que hacer algo muy similar más adelante, cuando la computadora juegue contra ti. En su lugar, crearás una lista para almacenar todos los posibles triples ganadores para que puedas compararla con el estado actual del juego almacenado por tablero.

    Guarda tu trabajo
  1. Crea un reportero que genere una lista de todos los posibles triples ganadores. Se verá parecido a lo siguiente:
    bloque de posibles triples ganadores que muestra una lista con al menos dos listas dentro de él {1,2,3} y {2,5,8}
  2. Guarda tu trabajo. Lo usarás más adelante.