私はC++プログラミングの新人です。私はVisual C++でPongを作っています。私のゲームには、マルチプレイヤーとシングルプレイヤーの2つのゲームモードがあります。今、私は、シングルプレイヤーパドルとマルチプレイヤーパドルのための別のクラスを持つことを計画しています。 (だからPaddleMP RpaddleMP, LpaddleMP;
とPaddleSP RpaddleSP, LpaddleSP;
、ここでRとLはそれぞれ右と左のパドルを表します)。ただし、マルチプレイヤーパドルとシングルプレイパドルのコードは非常に似ています。 1つのクラスを使用する方が良いでしょうか?そして、単純に初期化関数を使用して、それがシングルプレイヤーかマルチプレイヤーパドルかを選択することができますか?類似のクラスの実装
答えて
のもう一方の端でそれを配置するためにクラスを書き換える必要がある場合、あなたはここで二つの問題があり、かなり貧弱なパドルです。まず、あなたが選んだ名前(シングルプレイヤーvs.マルチプレイヤー)は貧弱だと思います。第二に、私はパドル自体がパドルを動かす入力から独立しているべきだと思います。
したがって、実際には1つのパドルタイプしか存在しません。あなたはそれを上または下に移動するように指示することができ、あなたが指示した方向を移動させますが、パドル自体は移動コマンドのソースについては何も知りません。
次に、パドルに入力を作成/送信するものがあります。シングルプレイヤーとマルチプレイヤーではなく、プレイヤー入力とAI入力の間に関連性があると私には思われます。
マウス、キーボード、ジョイスティックなどから関連するデータを読み込み、関連するコマンドに変換してパドルに送信するプレイヤー入力があります。同様のコマンドを生成するが、ユーザからの入力ではなく、それ自身の計算に基づくAI入力もあります。
これは、継承が必要な場所です.AI入力とプレーヤー入力の両方が、コマンドを生成できる汎用入力タイプから継承します。あなたの味に応じて、実際のプレイヤーの入力を望まないかもしれません。むしろ、キーボード入力、ジョイスティック入力、およびマウス入力が互いに分離しているかもしれません。たとえば、マルチタッチ画面のようなもののサポートを追加することを決めた場合、これはおそらくもっと簡単になります。これはおそらく上記のいずれかとは多少異なるでしょう(ただし、同じプロトコルに従います/同じインターフェース)。
これは、どのような種類のコードがクラスに入るかによって大きく異なります。これに応じて、次のいずれかです。
- が同じクラスを使用して、初期化中に(彼らは共有コードの大部分と自然の中で非常に類似している場合)の詳細を渡す
- 実装基本クラスを書きます共有コード、および特定の機能のクラスの派生
ほとんどの場合、後者が理にかなっています。
まあ、すべての種類のパドルのすべての共通コードを持つ抽象基本クラスPaddle
を作成し、それからマルチプレイヤーとシングルプレイヤーのパドルを派生させることが最も適切だと思います。あなたはPaddleSP
からPaddleMP
、およびRpaddleSP
とLpaddleSP
からRpaddleMP
とLpaddleMP
を導き出すことができ
class Paddle {};
class PaddleMP : public Paddle {};
class PaddleSP : public Paddle {};
同じ方法:あなたの階層は次のようになります。このようなアプローチがあなたにとって新しいようであれば、C++での継承についてもっとお読みになることをお勧めします。
オブジェクト指向の観点からは、Paddle
クラス内のマルチプレイヤーまたはシングルプレイヤーのデータを詰めるのは意味がありません。 Paddle
クラスは、パドルに固有の動作のみを記述する必要があります。サイズ、動き、そして何がありますか?
1つ以上のパドルを使用する方法は、パドルの位置が別のパドルの位置に依存するかどうかなど、潜在的にBehavior
クラス内の別のクラスに定義する必要があります。あなたは、おそらくMultiplayerBehavior
とSinglePlayerBehavior
そして最終的に、あなたはこれら二つを接着するコード、Paddle
インスタンスおよび特定のBehavior
の、すなわちセットを持っている可能性を持っている必要があります。これは、Setup
クラスであり、これらの2つを集約します。
- 1. 類似のクラスを実装する方法
- 2. 類似のアイテムとユーザーを見つけるための推奨アルゴリズム(と実装)
- 3. 類似の画像を検出するアルゴリズムの実装はありますか?
- 4. クラスの実装
- 5. ハッシュの類似度
- 6. ビットマップデータの類似アルゴリズム
- 7. MongoDbの類似アイテム
- 8. Mysql、類似のトピック
- 9. Django類似のタグセットに基づく類似のオブジェクト
- 10. XMLドキュメントインターフェイスの実装とクラスの実装
- 11. 類似度
- 12. C#Apache Camelに似たメッセージングの実装
- 13. 類似クラスの入力を追加する際の問題
- 14. Javaの類似クラス間のフィールドをコピーする
- 15. 類似のシステムのデータベーススキーマ
- 16. 類似の値の比較
- 17. HandlerThreadを他の類似クラスよりもベストに使用する
- 18. MySQLの類似した行
- 19. Ruby on Railsの類似モデル
- 20. WordNetの類似点java
- 21. 類似のコード検出器
- 22. skine.manifoldのコサイン類似度TSNE
- 23. mysqlの類似したクエリグループ
- 24. は、2つの類似
- 25. MVC複数の類似モデル
- 26. LuceneのJaccard類似点
- 27. クラス実装のプライベートプロパティ宣言?
- 28. 類似度測定scikit-learnドキュメント分類
- 29. リンクの疑似クラスのテキスト装飾の後のCSS
- 30. Luceneがドキュメントの類似性を実行する
私は参照してください。私のマルチプレイヤーパドルとシングルプレイヤーパドルは、単にコントロールされていた方法と比べてより大きな違いがありましたが、私が探していたものは継承であることがわかります。ありがとう! – Draksis