ページ 1 / 1
武器とアイテムの実装方法について
Posted: 2013年4月06日(土) 14:53
by taketoshi
こんにちは。
SRPGを作っており、ユニットが装備する武器と所持できるアイテムを実装したいと思っています。
そこで、実装方法についてご質問があります。
今は武器データをcsvから読み込んだ所で、どのように実装するべきか迷って止まっています。
将来的に、ユニットが所持できるアイテムはアイテム+武器含め8個にし
まとめて管理したいと思っていますが武器クラスとアイテムクラスに分けるとそれが難しそうだと感じています。
また、武器は装備できユニットの影響を及ぼし、アイテムは使用できるといった切り分けもしたいと思います。
このような場合は、どのように実装するとベストでしょうか?
稚拙ですが実装中のコードを晒しておきます、アドバイスをお願いいたします。
► スポイラーを表示
コード:
//アイテム管理
class ItemTask{
protected:
static WeponData WeponOriginal[WeponMax];//武器のひな形データが入った構造体
public:
static int LoadWeponData();//csvから武器データを読み込む
};
//キャラクターにアイテムと武器情報を持たせて
//装備できるアイテム、使用できるアイテムといったことを切り分けるにはどのように実装していけばいいでしょうか?
class Wepon : public ItemTask{
};
class Item : public ItemTask{
};
Re: 武器とアイテムの実装方法について
Posted: 2013年4月06日(土) 15:07
by softya(ソフト屋)
武器は装備属性を持つアイテムに過ぎないという考えて良いと思います。わざわざ専用クラスを設けるとセーブロードで管理が面倒になる気がしますけど。
Re: 武器とアイテムの実装方法について
Posted: 2013年4月06日(土) 18:02
by dic
もし、クラスを使いたいというのなら、私のやり方ですが、どうでしょうか?
最初の書き込みのクラスを宣言、定義して以下のように追加します。
► スポイラーを表示
コード:
class Unit
{
private:
int m_HP;
int m_MP;
protected:
// パターン1
ItemTask *item[8];
// パターン2
Wepon item_1[4];
Item item_2[2];
*** item_3[2];
};
Re: 武器とアイテムの実装方法について
Posted: 2013年4月06日(土) 18:27
by taketoshi
お二方ご返信ありがとうございます。
専門の方のご意見を聞けて少し前に進んだと思います。
実装方法に関して武器に関して装備できるフラグを設ければ解決するというのは少しだけ考えていました。
ただヒットポイントを回復する傷薬に対しても「命中率とかを設けなければいかないのか・・・」とも思っていました。
クラス継承とかはあまり得意ではないので、softyaさんに教えて頂いた方法は近道だと思っています。
>>dicさん
ご提示いただいた方法は、今考えている方法を進めた結果になると思います。
ここの宣言よくが分からないので教えていただけないでしょうか。(それ以外はなんとなく理解できております)
ここは何を定義しているのでしょうか?
Re: 武器とアイテムの実装方法について
Posted: 2013年4月06日(土) 18:35
by h2so5
taketoshi さんが書きました:実装方法に関して武器に関して装備できるフラグを設ければ解決するというのは少しだけ考えていました。
ただヒットポイントを回復する傷薬に対しても「命中率とかを設けなければいかないのか・・・」とも思っていました。
普通のアイテムについては命中率100%にすればいいのでは?
ゲームによってはアイテムにも効果の成功率とか有りそうですが。
Re: 武器とアイテムの実装方法について
Posted: 2013年4月06日(土) 19:00
by ISLe
わたしなら所持アイテムの下に装備アイテム・使用アイテムという関係にすると思います。
それに装備・使用というのはアイテムではなくアクションだと思います。
メンバを共有する必要もないですし。
クラス継承を勉強する良い機会なのでは。
Re: 武器とアイテムの実装方法について
Posted: 2013年4月06日(土) 19:40
by dic
>>taketoshiさん
taketoshiさん さんが書きました:
ご提示いただいた方法は、今考えている方法を進めた結果になると思います。
ここの宣言よくが分からないので教えていただけないでしょうか。(それ以外はなんとなく理解できております)
ここは何を定義しているのでしょうか?
上にはほかに宣言しているクラスがなかったので、「その他」という意味で *** と表現しました。
Weapon, Item, ときているので、盾(Shiled) でもなんでもいいです。という意味です。
実装方法にはいろいろありますから、いろいろメリット、デメリット、技術的に難しいか、判断して
選ぶのがいいと思います。
Re: 武器とアイテムの実装方法について
Posted: 2013年4月07日(日) 13:22
by taketoshi
>皆様アドバイスありがとうございます。
結果的に読み込む武器データにすべてが0のアイテムを持っていない状態を定義することと
武器とアイテムの区別は装備フラグをつけて対応しました。
また、以下のようにクラス設計してアイテムを実装しました
キャラクタークラスでアイテムクラスのポインタを所持し、インスタンス化して使っています。
dicさんに教えていただいた形で実装できました。
► スポイラーを表示
コード:
/////////////////////////////////////////////////////ItemTask/////////////////////////////////////////////////////////////////
//アイテム管理
class ItemTask : public ColorTask{
protected:
static enum ItemDefine {NO_ITEM = 0};//アイテムがない場合は0番を代入する
static ItemData ItemOriginal[ItemMax];//アイテムのひな形データが入った構造体
public:
static int LoadItemData();//csvからアイテムデータを読み込む
};
class Item : public ItemTask{
ItemData ItemInst;//アイテムデータの実態
public:
int InitialItem();//所持アイテムを所持していないフラグを示す0番で初期化/削除する
int ShowCarryItem(int i);//ステータス画面で所持アイテムを表示する
int UpdataItem(int);//アイテム情報をItemData構造体へ追加/所持させる};
ありがとうございます。解決とさせていただきます。
これから、アイテムの使用・装備の処理を施していきます。