2016-06-17 3 views
0

私は約1年半の間Javaでコーディングしており、小さなゲームやプログラムを作っていると思います。問題は私がほとんど独学で教えていることと、コードとクラス構造の大部分が組織化されていないか、「正しく構造化されている」ことです。これは私が作ったより小さいものについては私にとって重要ではありませんでしたが、私が大きなプロジェクトを引き受けるなら、それを正しく構造化して整理したいと思います。私はjavaのクラスの正しい構造は何ですか?

  • メインクラス(メインループ+ Mainメソッド)を有していた以前のミニRPGゲームで

  • プレーヤークラス
  • エンジンクラス(含むマップ(プレイヤーの位置とプレーヤーの統計情報を含む)と、プレイヤーとマップ間の衝突検出
  • マップクラス(含む地図データ)

マイのメインクラスはプレーヤーのエンジン、およびのインスタンスを含んエンジン地図のインスタンスを持っていました。問題は、プレーヤーはその後、それがあった、と何かが地図に起こったときエンジンプレーヤーの位置と統計の調整ができませんでしたエンジンを伝えるcould'tということです。そこで、PlayerとEngineの両方で静的な変数とメソッドを使用して、通信できるようにしました。

私の全体的な質問は、これがクラスの正しい構造であると思います。静的メソッドと変数をここで使用するのは正しいですか?もしそうでなければ、これらのクラスをどのように構造化するのでしょうか、それとも多かれ少なかれクラスが必要でしょうか?

私の全体的な目的は、この前のゲームでクラスを構造化する方法を理解することで、私が取りたい大きなプロジェクトでクラスをよりよく構築できるようにすることです。

+0

私はエンジンにマップとプレーヤーの両方の参照があると思います。これは、Mapからの情報を使用してState(おそらくPlayer-Objects内のデータ)を変更する義務を負うクラスです。 – Fildor

+0

下の回答を見てください。しかし、私はシングルトンを見ることになると思います。あなたがこれらのことに精通しているかどうかはわかりませんが、確かに役に立つはずです。特にあなたの 'map'と' engine'クラスのために。 – creulcat

+1

「クラスの構造」と呼ぶものを改善することに本当に関心があるのであれば、「ソフトウェアアーキテクチャー」についての記事を読んでみてください。ゲーム開発で使われている構造があり、他の場所では惑わされる可能性があることを覚えておいてください。叔父のボブのクリーンコーダーの書籍は、常に読む価値があります。 – Fildor

答えて

0

おそらくあなたのエンジンのインスタンスとインスタンスをあなたのエンジンに入れたいと思うでしょう。そうすれば、あなたのエンジンはすべてのもの(プレーヤーと地図)をコントロールします。希望が助けてくれる!

1

いくつかのデザインパターンを見てみましょう。
使用するデザインパターンは、好みに応じて異なります。いくつかはhere on Wikipediaです。

また、あなたはOOPをよく知っていますか?より一般的な情報はhere on Wikipediaです。

あなたの特定の話を見ると、MVCデザインは素晴らしいソリューションだと思います。

MVCはModel View Controllerを意味します。
ここには、さまざまな形式のデータを保持するモデルクラスがあります。
コントローラはモデルを制御し、すべての実際のロジックを含みます。
ビューは、アプリケーションのグラフィックの最後です。

+1

オブジェクト参照のみを持つのではなく、イベント駆動型プログラミングを使用することもお勧めします。それはクラス間の結合を失うので非常に強力です。 – Wallkan

+1

実際、多くのソリューションがあります。私の個人的なMVCは私が最初に学んだのは私の意見ではもう少し基本的なものです。私はOPがどのように一般的にコーディングをしているかわからないので、MVCを提案したのです。しかし、イベント駆動は確かに良い選択です! – creulcat

+0

さらに、彼は彼の 'engine'クラスのsingletonインスタンスを使うべきだと思います。このようにして、プレイヤーはスタティックリファレンスを使用できます。 – creulcat

3

かなり広い質問ですが、一般的な答えはノーです。

通常、静的フィールドを使用してインスタンスを接続しないでください。 OOPの基本的な考え方は、誰もがメッセージを送信したいと思っている人を参照しているということです。したがって、Playerが何かをEngineに伝える必要がある場合は、それが属しているインスタンスへの参照を持つ必要があります。または、EngineだけがMapPlayerにメッセージを送信するようにアーキテクチャを再設計することができます。この場合、適切であるかどうかについての詳細がわかりにくいです。

もう1つの一般的なアドバイスは、紙で座って、3つのクラスすべての名前を書き留めて、別の列にシステムがしなければならないすべてのことを書いてみることです。そして、あなたは誰が何を担当しているのか把握しようとするべきです。優れたデザインでは、この決定は簡単です。異なることを1つのクラスにまとめると、より多くのクラスでより詳細なモデルが必要になるはずです。

また、observer patternpublish-subscribe patternをご覧になることをお勧めします。

+0

アドバイスをありがとう、私はそれを見てみましょう –

0

これを処理する方法はいくつかあります。 1つは、メッセージングシステムを使用することです。私はJava Messaging Service(JMS)を調べます。もう1つは、あなたのアプリイベントを動かすことです。ここでは、スプリングを使用してこれを行う方法に関するちょっとしたチュートリアルです:https://spring.io/guides/gs/messaging-reactor/。あなたの意図がJavaを使った問題解決のよりよい理解を得るならば、私は最初にこれらの2つのアプローチを大きなフレームワークなしであなた自身で模倣しようと思います。

関連する問題