주요 콘텐츠

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

Stateflow를 사용하여 게임 설계하기

이 예제에서는 Stateflow® 차트를 사용하여 Tetris 게임을 구현하는 방법을 보여줍니다. 이 모델은 기존의 Stateflow 데모 sf_tetris를 재설계한 것입니다. 새로운 설계에 적용된 프로그래밍 패러다임은 다음과 같습니다.

  • 전처리 작업과 후처리 작업을 기본 게임 제어 논리에서 분리하는 병렬 분해.

  • 차트 설계를 간소화하는 의미 체계 추상화를 제공하는 상태 계층 구조와 서브차트.

  • 키보드의 입력을 쿼리하는 변경 감지 연산자.

병렬 분해를 사용하여 하위 컴포넌트 분리하기

차트 TetrisLogic은 게임의 논리를 구현합니다. 차트는 다음 순서로 실행되는 세 개의 병렬 상태로 구성됩니다.

  • WaitingArea는 다음 tetronimo(네 개의 정사각형으로 구성된 도형)의 무작위 생성과 같은 전처리 작업을 수행합니다. 시뮬레이션 중에 게임 UI 오른쪽에 있는 크기가 더 작은 정사각형이 이 tetronimo를 나타냅니다.

  • MainArea는 게임의 기본 제어 논리를 구현합니다. 이 상태는 게임 플레이 영역을 나타내기 위해 21×12 배열 arena를 사용합니다. 각 시뮬레이션 단계에서, 차트는 게임의 상태와 플레이어의 입력에 따라 배열을 업데이트합니다.

  • Draw는 MATLAB® 스크립트 sf_tetris_gui 호출과 같은 후처리 작업을 수행합니다. 이 스크립트는 게임 플레이 영역을 이미지로 표시하고 플레이어의 키 입력을 캡처합니다.

계층 구조와 서브차트를 사용하여 차트 설계 간소화하기

상태 계층 구조와 서브차트를 사용하여 게임 논리를 시각적으로 추상화하고, 게임 흐름의 개요를 제공하고, 게임에서 각 단계의 내부 복잡도를 숨길 수 있습니다. 예를 들어, 병렬 상태 MainArea의 각 하위 상태는 게임 흐름의 개별 단계를 나타냅니다.

  • 게임은 새 tetronimo(하위 상태 NewShape)를 생성하는 것으로 시작됩니다.

  • tetronimo는 플레이어의 입력(하위 상태 Moving)에 따라 아래로 또는 옆으로 이동합니다.

  • tetronimo가 게임 플레이 영역의 바닥에 닿거나 아래에 쌓여 있는 이전 tetronimo에 도달하면 tetronimo가 이동을 중지(하위 상태 Stopped)합니다.

  • tetronimo가 게임 플레이 영역의 너무 높은 지점에서 멈추게 되면 게임이 종료(하위 상태 GameOver)됩니다. 그렇지 않으면, 차트는 tetronimo를 고정(하위 상태 FreezeShape)하고, 점수를 조정(하위 상태 Score)하고, 필요한 경우 다음 레벨로 이동(하위 상태 NextLevel)하고, 다음 tetronimo로 진행(하위 상태 NewShape)합니다.

변경 감지를 통해 키보드 입력 캡처하기

Moving 서브차트가 플레이어의 입력에 따라 tetronimo를 이동시킵니다. 기본적으로, 하위 상태 MoveSlowly는 활성화되어 있습니다. MoveSlowly의 병렬 하위 상태가 키보드 입력을 모니터링하는 동안 tetronimo는 게임 플레이 영역에서 천천히 아래로 내려옵니다. 플레이어가 스페이스바를 누르면 하위 상태 MoveFast가 활성화됩니다. tetronimo가 게임 플레이 영역의 바닥으로 빠르게 떨어집니다.

키보드 입력을 수집하기 위해 서브차트는 변경 감지 연산자 hasChanged를 사용합니다. 플레이어가 키를 누를 때마다 sf_tetris_gui는 차트에 대한 입력을 증가시키며, 이에 따라 대응하는 hasChanged 연산자가 true 값을 반환합니다. MoveSlowly에는 병렬 분해가 있으므로 차트는 각 시간 스텝에서 여러 키 입력을 처리할 수 있습니다.

키 매핑

게임 UI와 상호 작용하려면 다음 키를 사용하십시오.

  • 왼쪽으로 이동: 왼쪽 화살표 또는 J

  • 오른쪽으로 이동: 오른쪽 화살표 또는 L

  • 시계 방향으로 회전: 위쪽 화살표 또는 I

  • 반시계 방향으로 회전: 아래쪽 화살표 또는 K

  • 아래로 떨어뜨림: 스페이스바

  • 플레이 일시 중지 또는 재개: P

  • 종료: Q

참고 항목

도움말 항목