0

私は大学の課題のために Java でマルチプレイヤー パックマン ゲームを作成する必要があります。

だから私はMVCスタイルを下ろそうとしています.これは私がスケッチしたものです.

私は MVC を使用して何かを設計したことがないので、私の知識は実際にはプラグマティック プログラマーと短い講義から得たものに過ぎないため、誤解したり、少し誤解したりする可能性は十分にあります。

また、単純なゲームを設計するために私が見たほとんどのチュートリアルでは、MVC についてまったく言及されていません。これは、MVC を使用するのに適したパターンではないということでしょうか?

これまでの私の考えでは、Game Stateクラスはいわばデータ ストレージの主要なソースであり、2 次元配列を使用してゲームの状態、ゴーストがどこにいるのか、pacman がどこにあるのかなどを保存するというものです。

Gameクラスは、メインのゲーム ループを含み、データ (ゲームの状態) とビュー (おそらく GUI 表現 - 実際に例としてテキスト ベースを追加しただけ) の間のすべての相互作用を制御するメイン コントローラークラスなります

ゲームが動作するようになったら、クライアント/サーバーに分割する必要があります。このモデルを使用することで、ほとんどのデータと処理をサーバーに保持し、クライアントにコントローラーと対話させて独自のビューを描画させることはそれほど難しくないように思えます。これがネットワーク上でのゲームのパフォーマンスにどのように影響するかは (まだ) わからないので、シングル プレイヤー バージョンが完成したら、さらに調査する必要があります。

これまでの私の設計に基づいたヒントやアドバイスをいただければ幸いです。また、最終的にはマルチプレイヤー ゲームになる必要があることも念頭に置いてください。

乾杯、

アダム

4

2 に答える 2

2

それどころか、MVCは実際にはこのタイプの問題に使用するのに非常に優れており、Swingフレームワークはそれをサポートする上で非常に優れた役割を果たします。

おそらく最初にMVCを読む必要があります。概要と同様に、ゲームが内部でどのように表現されるか(モデル)、描画される方法(ビュー)、およびその状態がどのように変化するか(コントローラー)を分離しようとします。

まず、ゲームの現在の状態をモデル化するために必要なすべてについて考えます。基本的な動作を定義するエンティティを用意し、それをPacManとGhostのようにサブクラス化することから始めるのはおそらく良い方法ですが、マップをGameBoardなどと呼ぶことをお勧めします(ライブラリと同じ名前を付けます)。クラスは一般的に悪い考えです:java.util.Mapと混同したくないです)。モデルセクションをまとめるには、ゲームの状態全体を「知っている」1つのクラスにすべてをまとめることができます。これはGameStateクラスなので、おそらく矢印を再描画する必要があります。

ビューを決定するのはかなり簡単である可能性が高いので、そこに行くことができます。GameStateにdraw(Graphics)メソッドを与えて、ビューが何であれ(後で決定します)からこれを呼び出すことができます。これにより、各エンティティが委任され、エンティティが所有するスプライトまたはイメージオブジェクトに委任される場合があります。これで、JPanelなどである可能性が高いビューは、paintComponent()メソッド内から独自のGraphicsオブジェクトを使用してdraw()を呼び出すことができます。

今でも、実際に何かを実現するにはコントローラーが必要です。これは、ビューにフックされたKeyListenerと、他のプレーヤーとの通信を処理するためのInputStreamおよびOutputStreamを持つオブジェクトである可能性があります(ゲーム状態の同期についても心配する必要があります)。また、ユニットに定期的に更新するように指示できるように、タイマーも必要です。移動が合法であるかどうかを誰が決定するかを決定する必要があります。コントローラーがそれを実行できるか、GameStateが実行できるか、またはエンティティに必要な情報を提供して自分で実行させることができます。

これらのパーツがすべて揃ったら、すべてを理解し、すべてをセットアップする1つの最終クラスにまとめることができます。私が説明していることはもっとたくさんあり、あなたがしなければならないいくつかの決定がありますが、それはあなたを動かすはずです。

于 2009-01-15T16:06:01.773 に答える
1

私は James に完全に同意します。また、ゲーム状態用のこの 2 次元配列が、タイルを占有する複数のゴースト、同じタイル内のパックマンとゴーストなどのいくつかのエッジ ケースを処理できることも確認したい場合があることを追加したいと思います (コードでの処理方法に応じて)、パックマンのフード ドットなど。

多くの場合、優れた計画は最高のプログラムを生み出します。図から始めてよかったと思います。

于 2009-01-15T16:09:55.743 に答える