Ejercicio: Modelo y scaffolding del juego

Completado

Un juego no es diferente del sistema de facturas mencionado en una unidad anterior. Todavía tiene los mismos elementos en el mundo de la programación orientada a objetos (OOP). Estos elementos son los objetos, los datos y el comportamiento. Como ha hecho con el sistema de facturación, puede modelar un juego como "Piedra, papel, tijeras" si primero describe su dominio y, después, intenta enumerar qué es cada cosa. El siguiente paso consiste en modelar el juego. También escribirá código que podrá compilar más adelante.

Análisis de "Piedra, papel, tijeras" para el modelado de OOP

Este es un ejercicio de modelado. Se le proporcionará la descripción de un dominio de problema. Después se le pedirá que extraiga las palabras clave importantes del texto y las organice en una tabla.

Sugerencia

Si tiene que recordar cómo modelar, vea la sección "Búsqueda de objetos, datos y comportamiento" en la segunda unidad. Recuerde que el modelado empieza por formular las preguntas quién interactúa con quién o quién hace qué a quién.

Descripción del problema

"Piedra, papel, tijeras" es un juego con dos participantes. El juego consta de rondas. En cada ronda, un participante elige un símbolo entre piedra, papel o tijeras, y el otro participante hace lo mismo. Después, para determinar el ganador de la ronda, se comparan los símbolos elegidos. Las reglas del juego determinan que la piedra gana a las tijeras, las tijeras ganan al papel (lo cortan) y el papel gana a la piedra (la envuelve). Al ganador de la ronda se le concede un punto. El juego continúa durante tantas rondas como los participantes acuerden. El ganador es el participante con más puntos.

Modelado del juego

  1. Copie y pegue el texto anterior en un documento. Para resaltar las palabras clave importantes puede aplicarles negrita o cursiva.

    Sugerencia

    Dedique unos minutos a intentar subrayar las que crea que son las palabras clave importantes. Cuando haya terminado, desplácese hacia abajo hasta el texto que resalta las partes importantes.

    Este es el texto de la descripción del problema con las partes resaltadas:

    "Piedra, papel, tijeras" es un juego con dos participantes. El juego consta de rondas. En cada ronda, un participante elige un símbolo entre piedra, papel o tijeras, y el otro participante hace lo mismo. Después, para determinar el ganador de la ronda, se comparan los símbolos elegidos. Las reglas del juego determinan que la piedra gana a las tijeras, las tijeras ganan al papel (lo cortan) y el papel gana a la piedra (la envuelve). Al ganador de la ronda se le concede un punto. El juego continúa durante tantas rondas como los participantes acuerden. El ganador es el participante con más puntos.

  2. A continuación, cree una tabla con las columnas Phase, Actor, Behavior y Data. Organice las palabras resaltadas en las posiciones que crea que deben ocupar.

    Sugerencia

    Dedique unos minutos a pensarlo y, después, desplácese hacia abajo.

    Este es el aspecto que puede tener una tabla resultante:

    Fase Actor Comportamiento data
    Entrada Participante Elige el símbolo Símbolo guardado como opción en Participant(choice)
    Processing GameRound Compara las opciones con las reglas del juego Resultado inspeccionado
    Processing GameRound Se conceden puntos según el valor del resultado Se agregan puntos al objeto Participant(point) ganador
    Processing Juego Se comprueba la respuesta para continuar Si la respuesta es true, se continúa; de lo contrario, se sale
    Output Juego Nueva ronda del juego o crédito final del juego

Creación de clases y estado

En la tabla anterior se describe cómo progresa el juego a través de distintas fases. Al centrarse en las columnas Behavior y Data, puede aplicar scaffolding a código inicial como base sobre la que crear el juego.

  1. Copie el código siguiente en el terminal y presione Intro para crear un archivo rock-paper-scissor.py y abrir el editor:

    touch rock-paper-scissor.py
    code .
    

    Sugerencia

    Use el menú contextual (clic con el botón derecho del mouse) para pegar código en el terminal.

  2. Asígnele el contenido siguiente y guarde el archivo (Ctrl+S o Comando+S en macOS):

    class Participant:
    class GameRound:
    class Game:
    

    Sugerencia

    Use Ctrl+V para pegar el código en el editor.

    Tiene las clases necesarias creadas para el juego. A continuación, debe pensar en qué datos tiene y en qué clase colocarlos.

  3. Siga trabajando con el mismo archivo, expanda el código de la manera siguiente y, a continuación, guarde el archivo:

    class Participant:
        def __init__(self):
            self.points = 0
            self.choice = ""
    
    class GameRound:
    
    class Game:
        def __init__(self):
            self.endGame = False
            self.participant = Participant()
            self.secondParticipant = Participant()
    
    

    Sugerencia

    • Puede arrastrar el separador entre el editor y el terminal para ajustar el espacio disponible.
    • Puede cerrar el editor en el menú ....
    • Puede escribir code . en el terminal para volver a abrir el editor.

    Hemos asignado los atributos points y choice a la clase Participant, como se indica en la primera y tercera línea de la tabla.

    Hemos dado el campo endGame a Game debido a la cuarta línea. Además, la clase Game tiene dos participantes, participant y secondParticipant. Una variable de un objeto podía tener dos roles. Los roles pueden ser un estado, como el piso de un ascensor, o bien un atributo descriptivo. En este contexto, los atributos points y choice son variables de estado. Los participantes en la clase Game son atributos descriptivos porque un juego tiene participantes.

    ¡Enhorabuena! Ha agregado clases al juego y ha creado los atributos de datos que ha asignado a las clases creadas. Llegado a este punto, tiene un buen código de inicio. Todavía no hace demasiado porque necesita un comportamiento. Agregará el comportamiento en la siguiente unidad del ejercicio.