私は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. 推奨のMahoutスパーク類似アルゴリズムを実装する方法
- 4. Neo4j OGM&複数の類似クラス
- 5. HMACの実装 - 擬似コード
- 6. 実装の種類は?
- 7. 類似のアイテムとユーザーを見つけるための推奨アルゴリズム(と実装)
- 8. 類似の画像を検出するアルゴリズムの実装はありますか?
- 9. メンテナンスにやさしい方法で多くの類似した(サブ)クラスを実装してください
- 10. クラスの実装
- 11. XMLドキュメントインターフェイスの実装とクラスの実装
- 12. MongoDbの類似アイテム
- 13. 類似性のマッチングアルゴリズム
- 14. ビットマップデータの類似アルゴリズム
- 15. Mysql、類似のトピック
- 16. ハッシュの類似度
- 17. 数2列の類似しており、非類似の値を
- 18. Django類似のタグセットに基づく類似のオブジェクト
- 19. java.awt.Graphicsクラスの実装
- 20. PHPクラスの実装
- 21. 種類別ブリッジパターン別実装
- 22. C#Apache Camelに似たメッセージングの実装
- 23. Slack.comに似たUITextFieldの実装方法
- 24. 類似::前と::後の擬似要素
- 25. CSSの前後に類似した疑似クラスがありますか?
- 26. Javaの類似クラス間のフィールドをコピーする
- 27. Kotlin:類似のクラスの二重コロンとラムダ
- 28. 類似クラスの入力を追加する際の問題
- 29. 類似度
- 30. 類似性メトリック
私は参照してください。私のマルチプレイヤーパドルとシングルプレイヤーパドルは、単にコントロールされていた方法と比べてより大きな違いがありましたが、私が探していたものは継承であることがわかります。ありがとう! – Draksis