2011-06-26 27 views
1

私はC++プログラミングの新人です。私はVisual C++でPongを作っています。私のゲームには、マルチプレイヤーとシングルプレイヤーの2つのゲームモードがあります。今、私は、シングルプレイヤーパドルとマルチプレイヤーパドルのための別のクラスを持つことを計画しています。 (だからPaddleMP RpaddleMP, LpaddleMP;PaddleSP RpaddleSP, LpaddleSP;、ここでRとLはそれぞれ右と左のパドルを表します)。ただし、マルチプレイヤーパドルとシングルプレイパドルのコードは非常に似ています。 1つのクラスを使用する方が良いでしょうか?そして、単純に初期化関数を使用して、それがシングルプレイヤーかマルチプレイヤーパドルかを選択することができますか?類似のクラスの実装

答えて

2

のもう一方の端でそれを配置するためにクラスを書き換える必要がある場合、あなたはここで二つの問題があり、かなり貧弱なパドルです。まず、あなたが選んだ名前(シングルプレイヤーvs.マルチプレイヤー)は貧弱だと思います。第二に、私はパドル自体がパドルを動かす入力から独立しているべきだと思います。

したがって、実際には1つのパドルタイプしか存在しません。あなたはそれを上または下に移動するように指示することができ、あなたが指示した方向を移動させますが、パドル自体は移動コマンドのソースについては何も知りません。

次に、パドルに入力を作成/送信するものがあります。シングルプレイヤーとマルチプレイヤーではなく、プレイヤー入力とAI入力の間に関連性があると私には思われます。

マウス、キーボード、ジョイスティックなどから関連するデータを読み込み、関連するコマンドに変換してパドルに送信するプレイヤー入力があります。同様のコマンドを生成するが、ユーザからの入力ではなく、それ自身の計算に基づくAI入力もあります。

これは、継承が必要な場所です.AI入力とプレーヤー入力の両方が、コマンドを生成できる汎用入力タイプから継承します。あなたの味に応じて、実際のプレイヤーの入力を望まないかもしれません。むしろ、キーボード入力、ジョイスティック入力、およびマウス入力が互いに分離しているかもしれません。たとえば、マルチタッチ画面のようなもののサポートを追加することを決めた場合、これはおそらくもっと簡単になります。これはおそらく上記のいずれかとは多少異なるでしょう(ただし、同じプロトコルに従います/同じインターフェース)。

+0

私は参照してください。私のマルチプレイヤーパドルとシングルプレイヤーパドルは、単にコントロールされていた方法と比べてより大きな違いがありましたが、私が探していたものは継承であることがわかります。ありがとう! – Draksis

3

これは、どのような種類のコードがクラスに入るかによって大きく異なります。これに応じて、次のいずれかです。

  • が同じクラスを使用して、初期化中に(彼らは共有コードの大部分と自然の中で非常に類似している場合)の詳細を渡す
  • 実装基本クラスを書きます共有コード、および特定の機能のクラスの派生

ほとんどの場合、後者が理にかなっています。

0

まあ、すべての種類のパドルのすべての共通コードを持つ抽象基本クラスPaddleを作成し、それからマルチプレイヤーとシングルプレイヤーのパドルを派​​生させることが最も適切だと思います。あなたはPaddleSPからPaddleMP、およびRpaddleSPLpaddleSPからRpaddleMPLpaddleMPを導き出すことができ

class Paddle {}; 
class PaddleMP : public Paddle {}; 
class PaddleSP : public Paddle {}; 

同じ方法:あなたの階層は次のようになります。このようなアプローチがあなたにとって新しいようであれば、C++での継承についてもっとお読みになることをお勧めします。

6

パドルは、どこに配置しても、誰が制御するかにかかわらず、パドルです。

対照(AIまたはヒト制御)はではなく、はパドルの一部でなければならないため、パドルクラスに影響を与えるべきではありません。

と同様に、それはあなたが画面IMO

+0

複数回投票ができたらいいですか? – davka

+0

ダン - はるかに簡潔で、あなたは4分で私を打つ! –

+0

今のところ、私はパドルがどんな側にあるべきかを決めるinit関数を持っていました。私はAI用に別のクラスを持っていました。 – Draksis

1

オブジェクト指向の観点からは、Paddleクラス内のマルチプレイヤーまたはシングルプレイヤーのデータを詰めるのは意味がありません。 Paddleクラスは、パドルに固有の動作のみを記述する必要があります。サイズ、動き、そして何がありますか?

1つ以上のパドルを使用する方法は、パドルの位置が別のパドルの位置に依存するかどうかなど、潜在的にBehaviorクラス内の別のクラスに定義する必要があります。あなたは、おそらくMultiplayerBehaviorSinglePlayerBehavior

そして最終的に、あなたはこれら二つを接着するコード、Paddleインスタンスおよび特定のBehaviorの、すなわちセットを持っている可能性を持っている必要があります。これは、Setupクラスであり、これらの2つを集約します。