Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Diseñar un juego con Stateflow

Este ejemplo muestra cómo implementar el juego de Tetris utilizando un gráfico de Stateflow®. Este modelo es una versión rediseñada de la clásica demo de Stateflow sf_tetris. El nuevo diseño incorpora estos paradigmas de programación:

  • Descomposición paralela para separar las tareas de preprocesamiento y posprocesamiento de la lógica de control principal del juego.

  • Jerarquía de estados y subgráficos para proporcionar abstracciones semánticas que simplifiquen el diseño del gráfico.

  • Operadores de detección de cambios para solicitar entradas desde el teclado.

Separar subcomponentes utilizando descomposición paralela

El gráfico TetrisLogic implementa la lógica del juego. El gráfico consta de tres estados paralelos que se ejecutan en este orden:

  • WaitingArea realiza las tareas de preprocesamiento, como generar aleatoriamente el siguiente tetromino (una forma compuesta por cuatro cuadrados). Durante la simulación, el cuadrado más pequeño a la derecha de la IU del juego muestra este tetromino.

  • MainArea implementa la lógica de control principal para el juego. Para representar el área de juego, este estado utiliza un arreglo arena de 21 por 12. En cada paso de la simulación, el gráfico actualiza el arreglo en función del estado del juego y de la entrada del jugador.

  • Draw realiza tareas de posprocesamiento, como llamar al script de MATLAB® sf_tetris_gui. Este script muestra el área de juego como una imagen y captura las pulsaciones de tecla del jugador.

Simplificar el diseño del gráfico utilizando jerarquía y subgráficos

Mediante la jerarquía de estados y subgráficos, puede abstraer gráficamente la lógica del juego, presentar una visión general de alto nivel del flujo del juego y ocultar la complejidad interna de cada fase del juego. Por ejemplo, cada subestado del estado paralelo MainArea representa una fase separada del flujo del juego.

  • El juego comienza generando un tetromino nuevo (subestado NewShape).

  • El tetromino se mueve hacia abajo o hacia los lados en función de la entrada del jugador (subestado Moving).

  • Cuando el tetromino toca al fondo del área de juego u otro tetromino debajo de él, este deja de moverse (subestado Stopped).

  • Si el tetromino se detiene en un punto demasiado alto del área de juego, el juego finaliza (subestado GameOver). De lo contrario, el gráfico congela el tetromino (subestado FreezeShape), ajusta la puntuación (subestado Score), avanza al siguiente nivel si fuera necesario (subestado NextLevel) y pasa al siguiente tetromino (subestado NewShape).

Capturar las entradas del teclado mediante la detección de cambios

El subgráfico Moving mueve el tetromino en función de la entrada del jugador. De forma predeterminada, el subestado MoveSlowly está activo. El tetromino se mueve lentamente hacia abajo por el área de juego mientras los subestados paralelos de MoveSlowly supervisan la entrada del teclado. Si el jugador pulsa la barra espaciadora, el subestado MoveFast se convierte en activo. El tetromino baja rápidamente al fondo del área de juego.

Para recopilar las entradas del teclado, el subgráfico utiliza el operador de detección de cambios hasChanged. Cada vez que el jugador pulsa una tecla, sf_tetris_gui añade una entrada al gráfico, lo que hace que el correspondiente operador hasChanged devuelva un valor de true. Dado que MoveSlowly tiene una descomposición paralela, el gráfico puede procesar varias pulsaciones de tecla en cada unidad de tiempo.

Asignaciones de teclas

Para interactuar con la IU del juego, utilice estas teclas:

  • Mover a la izquierda: flecha izquierda o J

  • Mover a la derecha: flecha derecha o L

  • Rotar en el sentido de las agujas del reloj: flecha hacia arriba o I

  • Rotar en el sentido contrario a las agujas del reloj: flecha hacia abajo o K

  • Bajar hasta el fondo: barra espaciadora

  • Pausar y reanudar el juego: P

  • Salir: Q

Consulte también

Temas relacionados