ページ 11

各キャラクターのパラメータのもたせ方について

Posted: 2012年12月28日(金) 14:26
by sachi
初めての投稿となります。sachiです。
宜しくお願い致します。

早速ですが、
各キャラのパラメータの持たせ方と初期化方法について悩んでいます。
現在は以下のように、パラメータの構造体を持たせています。

コード:

namespace Character
{

// 共通パラメータ
struct CmnParam
{
    CmnParam()
    {
        m_Hp = 0;
        m_Mp = 0;
        ・
        ・
    }
    m_Hp;
    m_Mp;
    ・
    ・
}

// キャラクタークラス
class Character
{
public:
    Character();
    ・
    ・
private:
    CmnParam    m_CmnParam; //!< 共通パラメータ
};



======================================================================

// プレイヤー専用パラメータ
struct PlayerParam
{
    PlayerParam()
    {
        m_Special = 0;
        ・
        ・
    }
    m_Special;
    ・
    ・
}

// プレイヤークラス
class Player : public Character
{
public:
   Player();
   ・
   ・
private:
   PlayerParam    m_playerParam; //!< プレイヤー専用パラメータ
};



}// namespace Character
これをふまえて幾つか質問があります。
①構造体ではなく、パラメータ自体をクラスとして作成し、それを持たせるほうがいいのか。
②もしこのまま構造体をもたせる場合、初期化はCharacterクラスのコンストラクタ経由で、構造体の引数付きコンストラクタを使用するのか。
③そもそも、この方法が好ましくなく、他の方法をとったほうがいいのか。
④③の場合何か良い案がありましたら教えてもらえると助かります。

以上です。宜しくお願い致します。

Re: 各キャラクターのパラメータのもたせ方について

Posted: 2012年12月28日(金) 14:35
by beatle
質問の意味が良くわからないのですが、細いところを注意しておきます。
  • C++ではstructもclassも、デフォルトのアクセス権限(private or public)が違うだけで、他は同じものです。
  • コンストラクタでのメンバの初期化は初期化子を使うといいでしょう

    コード:

    struct A {
        A() : foo_(0) {}
        int foo_;
    };
    
「パラメータ自体をクラスとして作成し、それを持たせる」のがどういう意味か、具体例を示してくださると嬉しいです。

Re: 各キャラクターのパラメータのもたせ方について

Posted: 2012年12月28日(金) 15:06
by sachi
回答有り難うございます。

structも初期化子が使えたというのを初めて知りました。
ここで知れて良かったです。ありがとうございます。

「パラメータ自体をクラスとして作成し、それを持たせる」の具体例としてですが、

コード:

class Param
{
public:
    getHp();
    getMp();
private:
    m_Hp;
    m_Mp;
};

class PlayerParam : public Param
{
public:
    getTp();
private:
    m_Tp;
};

class EnemyParam : public Param
{
public:
    getLuck();
private:
    m_Luck;
};
というのを作成し、これらを持たせるというように考えていたのですが、どうでしょうか?