武器のカスタマイズの選択画面について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
LisetteLander
記事: 147
登録日時: 13年前
住所: 東京

武器のカスタマイズの選択画面について

#1

投稿記事 by LisetteLander » 10年前

武器(銃や剣)をカスタマイズできるシューティングゲームを作っています。
武器はそれぞれ特殊な動きや効果をつけたかったので、ハードコードでいいやと思い武器1種類につきクラスを1つ定義しました。

カスタマイズ画面で武器のクラス名string配列から選んで選択したクラスをインスタンス化して、キャラクターにセットしたいと思っているのですが、
string文字列からクラス名に変換することになるのですが、これは正しいのでしょうか?

↓こんな感じの処理を武器の種類数分記述することになって、泥臭いコードになるような・・・

コード:

if(SelectWeaponStr == "CHandGun"){
 new CHandGun();
}
Stringの比較なんてやるべきじゃなく、別の方法を探すほうがいいでしょうか?

アバター
spaaaark・∀・
記事: 66
登録日時: 10年前
住所: 埼玉
連絡を取る:

Re: 武器のカスタマイズの選択画面について

#2

投稿記事 by spaaaark・∀・ » 10年前

どうでしょう、比較するものがstring型である必要がないようには思います。

僕の場合なら、名前を比較するより、それぞれの武器にハンドル(0,1,2,...)を打ち、決定した際にそのハンドルに対応した武器のインスタンスを生成すると思います。そうすることにより、
LisetteLander さんが書きました:

コード:

if(SelectWeaponStr == "CHandGun"){
 new CHandGun();
}
のようなif構文のネストで比較する必要がなくなり、さらに状況によっては関数ポインタを利用してインスタンスを生成をすることが可能になると思います。
クリエイティブな生活で刺激的な毎日を!

アバター
LisetteLander
記事: 147
登録日時: 13年前
住所: 東京

Re: 武器のカスタマイズの選択画面について

#3

投稿記事 by LisetteLander » 10年前

回答ありがとうございます。

ハンドルというのはどのようなものでしょうか?
いまいちピンと来ないです。
関数ポインタの配列みたいなものでしょうか?
あ、というか関数ポインタの配列って結構いいですね

アバター
spaaaark・∀・
記事: 66
登録日時: 10年前
住所: 埼玉
連絡を取る:

Re: 武器のカスタマイズの選択画面について

#4

投稿記事 by spaaaark・∀・ » 10年前

例えば、武器Aなら0,武器Bなら1,武器Cなら2,... というように、武器の種類にあらかじめ0から番号を振ったものをハンドルとして、そのハンドルを使って条件の分岐を行います。なおハンドルにはもちろんint型(またはshort型)を推奨します。

そのハンドルを使って、たとえば以下のように処理を分けてやればいいのです。

コード:

void WeaponA(){    //// ハンドル0番
    //// 武器Aのインスタンスを生成
}
void WeaponB(){    //// ハンドル1番
    //// 武器Bのインスタンスを生成
}
void WeaponC(){    //// ハンドル2番
    //// 武器Cのインスタンスを生成
}

int main(){
    void (*SetWeapon[])() = {     //// 関数ポインタの宣言
        &WeaponA,&WeaponB,&WeaponC
    };
    int Handle = 1;    //// ここでは武器Bを選択したことになる
    (*SetWeapon[ Handle ])();    //// 関数ポインタから関数を呼び出す
   return 0;
}
このようにすることで、それぞれのインスタンスを生成できます。
また、もし関数ポインタが難しいと思いましたら、switch構文を使うのもありだと思います。
クリエイティブな生活で刺激的な毎日を!

アバター
LisetteLander
記事: 147
登録日時: 13年前
住所: 東京

Re: 武器のカスタマイズの選択画面について

#5

投稿記事 by LisetteLander » 10年前

ありがとうございます!関数ポインタ使ってみます!

アバター
LisetteLander
記事: 147
登録日時: 13年前
住所: 東京

Re: 武器のカスタマイズの選択画面について

#6

投稿記事 by LisetteLander » 10年前

おっと、解決解決

閉鎖

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