ねえ-私はPython用のPygameライブラリを使用して最初のゲームを設計しようとしていますが、一般的なレベルデザインのベストプラクティスは何であるか疑問に思いました。レベルを管理するための優れたオブジェクト指向のデザインパターンであると皆さんが考えていることを聞きたいと思います。また、私はPythonにかなり慣れていません-ありがとう!
3 に答える
このタイプのゲームでは、マップはタイル単位になります (レベルとは、すべてのレベルを管理するのではなく、個々のレベルを意味すると想定しています)。各タイルには
- 関連付けられた画像 (ディスプレイ上でどのように見えるか)
- タイプ (つまり、壁、地面、トラップなど)
Pygame でタイル ベースのゲームを作成する場合、通常Map
、現在のマップを含むクラスがあります。
- マップの
pygame.Surface
(ディスプレイにブリットするもの) - 各項目が Tile オブジェクトであるリストのリスト (つまり、マトリックス) (私は、タイルの種類を示す文字列だけを持っているゲームもやったことがあります。その場合、別の Tile は必要ありません)クラス)
マップは比較的静的である必要があります-トラップを踏んだ後、トラップを通常のタイルにすることができます(これは非常に簡単です-衝突検出を行ってヒットした場合、そのタイルを別のタイルオブジェクトに変更するだけです(おそらく空のタイル))、しかし、できることなら、キャラクターや移動可能なブロックをマップに入れたくありません。可動ブロックには移動方法に関する独自のルールがあるため、タイルを変更するだけでは簡単ではありません。一連のロジックがあり、少なくとも 2 つのタイルを変更する必要があります。ブロックをトラップに移動できます-その下にあるものを個別に覚えておく必要があります-ブレ)。私の意見では、移動するオブジェクトとアイテムごとにクラスを作成する方が簡単です。
つまり、次のものがあります。
Tile
Map
Block
- その他の可動オブジェクト/スプライト
そして、それは基本的にあなたのレベル全体です。複数のレベルの場合、個々のレベルが常に同じであれば、Map
レベルごとに 1 つのオブジェクトのリストを作成できます。
これが初めての Pygame アプリケーションである場合は、「レベルを管理するためのオブジェクト指向設計パターン」について心配することに時間を費やす必要はありません。あなたが今しなければならないことは、あなたがやりたいことを Pygame にさせる方法を理解することです。
- 表示したいものをすべて表示できますか?
- ディスプレイのちらつきはありませんか?
- ユーザー入力コントロールを正しく読み取ることができますか?
- 等
レベルを管理するためのオブジェクト指向パターンは、かなり後になって登場します。
一般的に言えば、これを行う簡単な方法は、行列 (または多次元配列 - ここでも同じように機能します) を使用することです。
基本的に、各 Map は配列であり、配列内の各項目はグリッド上の正方形です。たとえば、3 x 3 のグリッドは次のようになります。
(疑似コード)
var マップ = [[1,2,3][1,2,3][1,2,3]];
数値の代わりに、関数の文字列を配置して、セルの値に基づいて解析および描画したり、アクションを実行したりできます。