ページ 11

クラス化について

Posted: 2010年9月20日(月) 23:11
by 宗一郎
いつもお世話になっておりますm(_ _)m

最近C言語からC++の勉強に移りまして、クラスについて勉強し始めました。
そこで勉強のために龍神録プログラムの館を参考にクラス化してみようと思いましたが、
どこまでクラスのメンバ関数として扱ったほうがいいのかよくわかりません。

参考のため皆さんがするとするならどのようにクラス化するか教えていただけないでしょうか。
また、STGなどで自キャラのクラスを作る場合には、一般的にどのような形で作ったほうがよいのか
教えていただけないでしょうか。

よろしくお願いしますm(_ _)m

Re:クラス化について

Posted: 2010年9月21日(火) 00:05
by たかぎ
> どこまでクラスのメンバ関数として扱ったほうがいいのかよくわかりません。

原則として、メンバ関数でなければ実現できないものだけです。
それ以外は非メンバ関数にしましょう。

Re:クラス化について

Posted: 2010年9月21日(火) 03:38
by momo
私自身初心者なので参考になるかは分かりませんが

class
{
public:
メンバ変数
コンストラクタ用メンバ関数(newと配列とかで問題が出るため関数化)
移動用メンバ関数
描画用メンバ関数
}

こんな感じでやってます

Re:クラス化について

Posted: 2010年9月21日(火) 05:34
by やっくん
私の場合もたかぎさんと同様に、メンバ関数では最低限必要な物しか揃えません。
STGは製作経験がありませんが、もし作るならば・・・ということで
typedef struct
{
  int posX; // x座標
  int posY; // y座標
}Pos;

class Char
{
private:
  int charHp;      // 体力
  Pos charPos;     // キャラクター座標
  Pos *charBullet; // 弾の座標 
public: 
  Char();         // デフォルトコンストラクタ
  Char(int, Pos); // 体力とキャラ座標のセット
  ~Char();        // 弾で使用する動的メモリ開放
  /*-----ゲッタ--------*/
  Pos GetCharPos() const;// 位置情報
  Pos GetCharHp()  const;// HP取得
  /*-----セッタ--------*/
  void SetCharPos(Pos);  // 移動制御
  void SetCharHp(int);   // HP
};
上のように簡単な命令だけ用意しておきます。
キー入力による移動など細かい移動は非メンバ関数で基本的なメンバ関数を呼び出します。
例えば、上のキャラ移動を以下のように定義したときに
// メンバ関数
void Char::SetCharPos(Pos add)
{
  if(/*値が範囲外なら*/)
  {
    /* 値を進めない */
  };
  charPos.posX += add.posX;
  charPos.posY += add.posY;

}
キー操作に対する移動関数をメンバ関数を用いて作ってみます。
Char chData;
// 非メンバ関数
void CharMove()
{
    if(キーが押されたら){
      Pos addPos = {値1,値2}; // キーに対応した値
      chData.SetCharPos(addPos);
    }
}
私ならばこんな感じでクラスを作ります。
個人的な考え方ですが、このように最小限に処理を抑えた方がバグも少なくなりますし(出ても発見しやすい)、汎用性が出るような気がします。(あいまいで申し訳ありません;) 画像

Re:クラス化について

Posted: 2010年9月21日(火) 11:49
by softya
龍神録自体がクラス設計とは非常に無縁なプログラム構造をしていますので、そのまま移植しようとするとオブジェクト指向にできません。一度完全にクラス設計から見直す必要があると思います。

で、参考になりそうなサイトを紹介しておきます。
http://codezine.jp/article/detail/297
http://www.tnksoft.com/reading/classgame/index.php
http://eis.yokkaichi-u.ac.jp/WBT/game/gameOOdesign.html
http://www.sm.rim.or.jp/~shishido/gamedev.html

どう書けば正解ってわけでもないので、色々作っては作り直しで試行錯誤してみることが大事だと思います。

Re:クラス化について

Posted: 2010年9月21日(火) 16:30
by 宗一郎
>softyaさん、やっくん、momoさん、たかぎさん
回答ありがとうございますm(_ _)m

おかげさまで参考になりました^^