こんばんは!かふぇしたです!
今回は製作レポート2回目ですが、戦闘処理系ではなくダンジョンの構成をしっかりまとめようと思います。
[hr]
~ダンジョンクラス~
ダンジョンのすべての事象を管理するクラスです。
ダンジョンにあるマップ、敵、物体、パーティすべてを管理します。
CODE:
class Dungeon
{
private:
int exe_stat;
Thing* ex_thing[EX_THING_MAX];
Enemy ex_enemy[EX_ENEMY_MAX];
Article ex_article[EX_ARTICLE_MAX];
Map map;
Enemy* Encount_enemy;
void ThingDraw();
void ThingMove();
void ArticleExecute();
public :
Party ex_party;
Dungeon();
void Initialize(char* a_dungeon_name);
int Execute();
bool Collition(int pos_x, int pos_y, Thing* thing);
MapHeaderData_t GetMapData(){return map.data;};
Enemy* JudgeEncount();
Thing* GetThingByPlace(int pos_x, int pos_y);
void ThingSetLive(Thing* thing, char a_live);
};
ダンジョンすべての事象を関連付けるため、ダンジョンを構成する要素のほとんどをスレイブとしています。
具体的にやることは、
マップ処理
敵、物体、パーティ固有の動作処理
Thingクラスで括り出したモノの処理
となっています。
Thingクラスで一旦括りだしているのは、モノに共通する動作(描画、当たり判定など)を一括で処理するためです。
レポートはしませんが、MapクラスとThingクラスのコードも置いておきます
↓Mapクラス↓
► スポイラーを表示
CODE:
class Map
{
private:
char* all_layer;
char* draw_layer;
char* collition_layer;
int image_handle;
char GetLayerValue(int num_x, int num_y, char* layer);
public :
MapHeaderData_t data;
void Initialize(char* mapname);
void Finalize();
bool Collition(int pos_x, int pos_y);
void Draw();
};
↓Thingクラス↓
► スポイラーを表示
CODE:
class Thing
{
protected:
char* class_name;
char* image_name;
char* first_name;
char live;
int m_posx;
int m_posy;
char m_bodydir;
char m_movedir;
bool m_move_enable;
int img_han;
int move_count;
public :
Thing();
virtual void Initialize(char* a_class_name, int o_px, int o_py); //分類名を用いて初期化,場所も指定
void SetLive(char arg_live){live = arg_live;};
void Draw();
bool Collition(int pos_x, int pos_y);
char* GetClassName(){return class_name;};
char* GetFirstName(){return first_name;};
int GetLive(){return live;};
int SetMove(char dir, bool forward = TRUE);
void CalcMove();
bool QueryMoveEnable();
char GetBodyDirect(){return m_bodydir;};
int GetPositionX(){return m_posx;};
int GetPositionY(){return m_posy;};
void SetBodyDirect(char a_dir){m_bodydir = a_dir;};
void SetPositionX(int a_px){ m_posx = a_px;};
void SetPositionY(int a_py){ m_posy = a_py;};
};
コードを見ると分かるとおり、メンバメソッド以外でも隠蔽されていないものがあります。
map.dataはdataのメンバがすべて定数であるので、さほど問題がないのですが、パーティオブジェクトに関しては、本来は隠蔽すべきです。
しかし、パーティオブジェクトはアクセス頻度が高く、隠蔽されていると処理に困るので・・・。
いっそのことダンジョンクラスから外してやろかとも考えましたが、そうすると今度はダンジョン処理との連携がとれなくなってしまうのです。
なので、パーティオブジェクトに関しては隠蔽していません。問題アリですが・・・。どうしたものか
[hr]
肝心の製作の方ですが、キャラクタを操作して迷路を進み、敵と隣接したら戦闘・・・。といったところまでは完成しています。
ある程度形になったら、一度テストプログラムとしてアップしようと考えています。
次こそは戦闘処理系についてレポート・・・したいです。
ではまた。