このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Stateflow を使用したゲームの設計
この例では、Stateflow® チャートを使用してテトリス ゲームを実装する方法を説明します。このモデルは Stateflow の古典的なデモ sf_tetris
を再設計したバージョンです。新しい設計には次のプログラミング パラダイムが組み込まれています。
パラレル構造。前処理と後処理のタスクをメインのゲーム制御ロジックから分離します。
ステートの階層とサブチャート。チャートの設計を簡略化するセマンティクスの概念化を提供します。
変化検出演算子。キーボードからの入力をクエリします。
パラレル構造を使用したサブコンポーネントの分離
チャート TetrisLogic は、ゲームの背後にあるロジックを実装します。チャートは 3 つのパラレル ステートで構成され、次の順序で実行されます。
WaitingArea
は次の "テトロニモ" (4 つの正方形からなる形状) をランダムに作成するなどの前処理タスクを実行します。シミュレーション時、ゲーム UI の右側にある小さな正方形にこのテトロニモが表示されます。MainArea
はゲームのメインの制御ロジックを実装します。プレイ アリーナを表現するため、このステートは 21 行 12 列の配列arena
を使用します。各シミュレーション ステップで、チャートはゲームのステートとプレーヤーからの入力に基づいて配列を更新します。Draw
は MATLAB® スクリプトsf_tetris_gui
の呼び出しなどの後処理タスクを実行します。このスクリプトはアリーナをイメージとして表示し、プレーヤーのキーストロークをキャプチャします。
階層とサブチャートを使用したチャート設計の簡略化
ステートの階層とサブチャートを使用することで、ゲームのロジックをグラフィカルに概念化し、ゲームのフローのおおまかな概要を提供して、ゲームの各段階における内部の複雑さを隠すことができます。たとえば、パラレル ステート MainArea
の各サブステートは、ゲームのフローにおける個別の段階を表しています。
ゲームの開始時に新しいテトロニモ (サブステート
NewShape
) が生成されます。テトロニモはプレーヤーからの入力に従い、下または左右に移動します (サブステート
Moving
)。テトロニモがアリーナの底部に接触するか、既に下に配置されているテトロニモに接触すると、移動が止まります (サブステート
Stopped
)。テトロニモがアリーナの高すぎる地点で止まると、ゲームは終了します (サブステート
GameOver
)。それ以外の場合、チャートはテトロニモをフリーズし (サブステートFreezeShape
)、スコアを調整して (サブステートScore
)、必要に応じて次のレベルへと進み (サブステートNextLevel
)、次のテトロニモに進みます (サブステートNewShape
)。
変化検出によるキーボード入力のキャプチャ
Moving
サブチャートはプレーヤーからの入力に基づいてテトロニモを移動させます。既定では、サブステート MoveSlowly
はアクティブです。テトロニモがプレイ アリーナをゆっくりと下へ移動する間、MoveSlowly
のパラレル サブステートがキーボードからの入力を監視します。プレーヤーがスペースバーを押すと、サブステート MoveFast
がアクティブになります。テトロニモはアリーナの底部へ落下します。
キーボードからの入力を収集するため、サブチャートは変化検出演算子 hasChanged
を使用します。プレーヤーがキーを押すごとに sf_tetris_gui
によってチャートに入力がインクリメントされ、その結果、対応する hasChanged
演算子は true
の値を返します。MoveSlowly
はパラレル構造をもつため、チャートは各タイム ステップで複数のキーストロークを処理できます。
キー マッピング
ゲーム UI を操作するには、次のキーを使用します。
左へ移動: 左矢印または J
右へ移動: 右矢印または L
時計回りに回転: 上矢印または I
反時計回りに回転: 下矢印または K
底へ落とす: スペース バー
プレイの一時停止と再開: P
終了: Q