Detectar una victoria

I made some edits to include the word "possible" more. I'm not sure I didn't make it more confusing. Need to look again another day. --MF, 6/13/18

I need to review the rest of this lab. Looks different than before. --MF, 5/31/20

PG: I haven't thought deeply (haven't even read carefully!) but would want to check carefully to make sure this is /developmentally/ helpful. Maybe it already is.

En esta página, primero programarás tu proyecto tres en línea para reportar el contenido de un conjunto específico de tres cuadrados que generaría una victoria (como la fila superior), y luego lo usarás para encontrar el contenido de todos los triples ganadores posibles. Usarás esa información para averiguar si uno de los jugadores ha ganado el juego.

Comprobar una forma de ganar

Necesitamos una forma de averiguar si realmente ha ocurrido un posible triple ganador. Podemos usar mapear para verificar cada posición en un triple y ver si algún jugador ha ganado con ese triple.

Aprendiste sobre mapear en Unidad 3 Laboratorio 2, Página 5: Transformar todos los elementos de la lista.

Mapear aplica la función del anillo gris a cada elemento de la lista de entrada y reporta una lista de todos los resultados.
mapear (unir( )(s)) sobre (lista {gato, perro, pájaro}) reporta {gatos, perros, pájaros}

Recuerda que la ranura de entrada en blanco en la función dentro del anillo gris es donde va un elemento de la lista cada vez que se realiza la función.

  1. Haz clic en botón de bandera verde para empezar un juego nuevo. Juega una vez, dejando deliberadamente que x gane.
  2. Luego construye esta expresión y observa lo que reporta:
    mapear (elemento ( ) de (tablero)) sobre (lista{1, 2, 3})
    ¿Cómo funciona mapear aquí?

    Esta expresión mapear funciona de la misma manera que el ejemplo anterior de unir, pero a veces a las personas les resulta un poco más complejo pensar en ello, porque es natural esperar mapear (algo) sobre (tablero), pero eso es no lo que dice la expresión. En su lugar, se mapea sobre una lista constante, no una variable. Como antes, mapear inserta cada elemento de la lista en el espacio en blanco de la función dentro del anillo gris y reporta una lista de los resultados.

    Pero aquí, la función en el anillo gris es elemento () de (tablero), por lo que mapa comprueba los elementos 1, 2 y 3 de la lista tablero, y reporta una lista de lo que hay en esas tres posiciones (cada una de las cuales es X, O o un número si el cuadrado está vacío).

    Si no puedes ver lo que hay dentro de la variable tablero, asegúrate de que su casilla esté marcada en la paleta Variables y expande el observador para ver los elementos de la lista como se muestra en la imagen a continuación.
    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íamapear (elemento ( ) de (tablero)) sobre (lista{1, 2, 3}) reporta {O, O, X}

  3. Habla con tu compañero ¿Qué te dice el resultado de esa expresión sobre el estado del juego?
  4. Si {1, 2, 3} no es el triple en el que x ganó el juego, reemplaza la lista en la expresión mapear con el triple ganador y haz clic en la expresión de nuevo.
  5. Usa esta idea para hacer un bloque estado de triple ( ) que tome un posible triple ganador (un triple como lista{1, 2, 3}) como entrada y reporte una lista de lo que está en esas tres posiciones (X, O o un número). Luego utilízalo para escribir una expresión en el área de secuencias de comandos cuyo valor será Verdadero si X ganó el juego en el triple lista{1, 2, 3}, o Falso, si ocurre lo contrario.
    Aprendiste a especificar el tipo de entrada de lista (tipo de entrada de lista: rectángulo con dos rectángulos naranjas más pequeños dentro) en Unidad 2 Laboratorio 2, Página 2: Planificación de una aplicación de cuestionario.
  6. Guarda tu trabajo Juega otra vez para que el jugador O gane y prueba tu bloque estado de triple con el triple ganador. Soluciona cualquier error.

Comprobar todas las formas de ganar

Ahora vas a usar estado de triple sistemáticamente para comprobar todos los triples.

Por ejemplo, el jugador O ganó el juego a continuación, y el bloque estado de todos los triples ganadores encuentra el estado de cada posible triple. La computadora puede usar este bloque para buscar un triple ganador que tenga todo X o todo O.
Juego de Tic Tac Toe donde el Jugador O ha ganado en la columna del medio. En la fila uno, hay X, O y X. En la fila dos, hay X, O y un espacio vacío. En la fila tres, hay un espacio vacío, O y un espacio vacío. El estado de todos los triples ganadores se reporta en una lista de listas (una tabla). Hay tres columnas y ocho filas, y cada celda contiene una X, una O o un número. Hay texto a la derecha de cada fila que lista el triple correspondiente y dónde aparece en el tablero (como 1, 5, 9 siendo la diagonal de arriba a abajo y de izquierda a derecha). El triple en el que el Jugador O ha ganado este juego (2, 5, 8) muestra O, O, O en la tabla. Esa es la única fila con todas las O o todas las X.

El orden de tus triples y/o la numeración de las posiciones en tu proyecto pueden ser diferentes. Esto está bien siempre que tu proyecto funcione.
  1. Usa mapear junto con algunos de los otros bloques que has creado para construir el bloque estado de todos los triples ganadores. Debe reportar el estado de todos los posibles triples ganadores como una lista de listas, como se muestra arriba.
  2. Haz clic para obtener una sugerencia sobre cómo usar mapear.

    Cuando uses mapear, piensa:

    1. ¿Cuál es la función que está realizando? Eso va en el anillo gris.
    2. ¿En qué datos estás realizando esa función? Esa es la lista sobre la que está mapeando.
    Aquí, necesitas conocer el estado de cada posible triple ganador.

    Haz clic para obtener una pista sobre la construcción de ¿ganó?.

    Ponlo en palabras: ¿Qué es lo que quieres comprobar?

    ¿Hay algún bloque que pueda ser útil para eso?

    Haz clic para obtener otra pista.

    ( ) contiene ( )

  3. Ahora haz un bloque ¿ganó? ( ) que tome la letra X o O como entrada y reporte verdadero si y solo si ese jugador ha ganado el juego.
  4. Guarda tu trabajo
  5. Modifica tu programa para que cuando un jugador gane el juego, el programa notifique a los jugadores.
  6. Juega varias veces para comprobar que funciona y corrige cualquier error. Asegúrate de dejar que cada jugador gane al menos una vez.