クラス管理について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
nayo

クラス管理について

#1

投稿記事 by nayo » 16年前

現在C++でDirectXを用いた見た目3Dの2D格闘ゲームを作っています
やっとDirectXの処理が出来たのでいざプレイヤーを作ろうと思ったところで少し困りました
簡単に書くと

Objクラス ← Playerクラス ← キャラクターA・キャラクターB・キャラクターC・……

とPlayerクラスを派生させて各キャラクターを作ろうと思ったのですが、
これらのキャラクターのクラスを管理するにはどうすればよいのでしょうか

例えばプレイヤーの選択に応じて
必要なキャラクターのクラスをインスタンス化し、ゲーム内で対戦に使う、ということです
同じ型のクラスなら宣言一つで終わりますが
複数のキャラクタークラスがある場合、全部のクラスのポインタを宣言しておかないといけないのでしょうか

何か上手い実装方法があったらご教授お願いします

Justy

Re:クラス管理について

#2

投稿記事 by Justy » 16年前


>複数のキャラクタークラスがある場合、全部のクラスのポインタを宣言しておかないといけないのでしょうか

 その方法だと 100種類いたら、100個の異なるポインタを宣言しなくてはならなく
なるので、まずNGでしょう。

 プレイヤークラスが十分に抽象化されているのであれば、
オーソドックスな1対1の場合、対戦するキャラクタークラス2つのインスタンスを
プレイヤークラス2つのポインタとして、保存しておけば事足りると思います。

nayo

Re:クラス管理について

#3

投稿記事 by nayo » 16年前

早速の回答ありがとうございます

しかし自分の力が付いていかず…
プレイヤークラスが十分に抽象化されていた場合、
キャラクタークラスのインスタンスをプレイヤークラスのポインタとして保存できるのでしょうか

それともプレイヤークラスから派生せず、プレイヤークラス内で処理を分けて同じ型として管理しておくのでしょうか

せっかくお答えしていただいたのに申し訳ないです

Justy

Re:クラス管理について

#4

投稿記事 by Justy » 16年前


>キャラクタークラスのインスタンスをプレイヤークラスのポインタとして保存できるのでしょうか

 出来ます。
[color=#d0d0ff" face="monospace]

class Object
{
public:
virtual ~Object() {}
};

class Player : public Object {};

class CharacterA : public Player {};
class CharacterB : public Player {};


Player *playerA = new CharacterA;
Player *playerB = new CharacterB;
Object *objA = playerA;
Object *objB = new CharacterB;

[/color]

 派生したクラスのインスタンスは基底クラスのポインタや参照で受けることができますよ。
 試してみてください。

6章:継承
http://www5c.biglobe.ne.jp/~ecb/cpp/06_07.html

nayo

Re:クラス管理について

#5

投稿記事 by nayo » 16年前

うをw まさかこんなテクニックがあったとは…
自分のやりたかったことがこれで実現できます

C++便利ですね
毎回素晴らしい回答ありがとうございます

閉鎖

“C言語何でも質問掲示板” へ戻る