ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

テトリス

このモデルでは、現代的なプログラミングのパラダイムと機能をいくつか使用するために、Stateflow® に付属の古典的なテトリス ゲームを再度取り上げます。入力値の変更をクエリする hasChanged 関数演算子や、アルゴリズムのサブコンポーネントを抽象化する MATLAB® 関数、階層ステートや内部遷移などのセマンティクスの便利な概念化を使用する方法を示します。

Stateflow チャート TetrisLogic は、ゲームにおけるロジックを実装します。アリーナやプレイ フィールドは、プレイ アリーナを表す [21x12] の配列で表現されます。チャートでは、シミュレーション ステップごとにこの配列が更新され、MATLAB のみを使用して配列がイメージとして表示されます。

テトリス ゲームのフローは、プレイ フィールド現在のステートを表すサブステート MainArea によって本質的に表現されます。ゲームは、「新しい形状」(またはテトロニモ (4 つの正四角形を組み合わせてできる多角形)) を取得することから始まります。次に、ピースがユーザーの入力に応じて落下し続けます (または左右に移動します)。ピースが下部にあるもののいずれかに触れると (isTouching 条件)、ピースの動きは止まります。ピースが高すぎる位置で停止すると、ゲームは終了です。そうでない場合は、その形状の「動きを止めて」、必要に応じて、次のレベルに移動し、新しい形状を取得して続行します。

この階層でゲーム ロジックをグラフィカルに概念化すると、さまざまな階層で詳細を非表示にする便利な方法が提供されます。各サブステートでは、内部の複雑さを隠すことができます。

たとえば、Moving サブステートはユーザーの入力に基づいたテトロニモの動きに関与します。再び、ステートを使用してゲーム フローを概念化できます。テトロニモは、ゆっくりと動く (既定) か、素早く落ちます (ユーザーがスペース バーを押し、hasChanged(drop) が true を返した場合)。

ユーザーの入力を集約するには、hasChanged を使用します。ユーザーがキーを押すたびに、MATLAB UI はチャートに入力を繰り上げ、これにより hasChanged はそのタイムステップで true を返すことになります。

MoveSlowly のパラレル サブステートは、タイム ステップごとに複数のユーザー キーストロークを処理しようとしていることを捕捉します。

最後に、ユーザーからのキーストロークも捕捉する単純な MATLAB スクリプトを使用して UI が実装されます。

キー マッピング

  • 左に移動する場合は j または LEFT

  • 右に移動する場合は l または RIGHT

  • 時計回りに回転する場合は i または UP

  • 反時計回りに回転する場合は k または DOWN

  • 高速で落とす場合は SPACE

  • プレイまたは一時停止する場合は p

  • 終了する場合は q

右側の小さい四角形の軸には、次のテトロニモが示されます。

関連するトピック