未テストのタスククラス

アバター
TororoShinku
記事: 67
登録日時: 15年前
住所: 伊勢神宮のある美し国
連絡を取る:

未テストのタスククラス

投稿記事 by TororoShinku » 14年前

CODE:

class CTask
{
private:
	string m_ID;
public:
	CTask(void);
	CTask(string control_name);
	CTask(int control_number);
	int GetControlNum(){return atoi(m_ID.c_str());}
	string GetControlStr(){return m_ID;}
	virtual void Process(){};
	~CTask(void);
};


CTask::CTask(void)
{
	m_ID = "";
}

CTask::CTask(string control_name)
{
	m_ID = control_name;
}

CTask::CTask(int control_number)
{
	std::ostringstream stream;
	stream  m_Tasks;
public:
	void PushObject(CTask* obj); 
	void PopObject(CTask* obj);
	void PopObject(int control_number);
	void PopObject(string control_name);
	CTask* GetObject(int control_number);
	CTask* GetObject(string control_name);
	void DoAllProcess();
	CTaskList(void);
	~CTaskList(void);
};


CTaskList::CTaskList(void)
{
}

CTaskList::~CTaskList(void)
{
}

void CTaskList::PushObject(CTask *obj)
{
	m_Tasks.push_back(obj);
}

void CTaskList::PopObject(CTask *obj)
{
	vector::iterator it;
	for(it = m_Tasks.begin(); it!=m_Tasks.end();)
	{
		if((*it) == obj)
		{
			it = m_Tasks.erase(it);
			continue;
		}
		it++;
	}
}

void CTaskList::PopObject(int control_number)
{
	vector::iterator it;
	for(it = m_Tasks.begin(); it!=m_Tasks.end();)
	{
		if((*it)->GetControlNum() == control_number)
		{
			it = m_Tasks.erase(it);
			continue;
		}
		it++;
	}
}

void CTaskList::PopObject(string control_name)
{
	vector::iterator it;
	for(it = m_Tasks.begin(); it!=m_Tasks.end();)
	{
		if((*it)->GetControlStr() == control_name)
		{
			it = m_Tasks.erase(it);
			continue;
		}
		it++;
	}
}

CTask* CTaskList::GetObject(int control_number)
{
	vector::iterator it;
	for(it = m_Tasks.begin(); it!=m_Tasks.end(); it++)
	{
		if((*it)->GetControlNum() == control_number)
		{
			return (*it);
		}
	}
}

CTask* CTaskList::GetObject(string control_name)
{
	vector::iterator it;
	for(it = m_Tasks.begin(); it!=m_Tasks.end(); it++)
	{
		if((*it)->GetControlStr() == control_name)
		{
			return (*it);
		}
	}
}

void CTaskList::DoAllProcess()
{
	vector::iterator it;
	for(it = m_Tasks.begin(); it!=m_Tasks.end(); it++)
	{
		(*it)->Process();
	}
}
個人的には、CTaskのコンストラクタの文字列を数値に変換するところが、お気に入りですw
次は、テストしてみてからゲーム本体に取り掛かろう!
最後に編集したユーザー TororoShinku on 2010年10月21日(木) 19:46 [ 編集 1 回目 ]

アバター
Justy
副管理人
記事: 122
登録日時: 15年前

Re: 未テストのタスククラス

投稿記事 by Justy » 14年前

 毎回 GetControlNumで atoiというのはどうなんでしょうね。
 特に m_IDが数値に変換出来なかった場合を考えるとちょっと……。

アバター
TororoShinku
記事: 67
登録日時: 15年前
住所: 伊勢神宮のある美し国
連絡を取る:

Re: 未テストのタスククラス

投稿記事 by TororoShinku » 14年前

たしかに、エラー処理を考えてないんですよね。

全角なら、半角に
文字なら、エラーを出すようにしたほうが
安全かもしれません。。

アバター
Justy
副管理人
記事: 122
登録日時: 15年前

Re: 未テストのタスククラス

投稿記事 by Justy » 14年前

 いっそのこと、文字列か数値のどちらかで一本化してしまうのがいいかと思いますよ。

アバター
TororoShinku
記事: 67
登録日時: 15年前
住所: 伊勢神宮のある美し国
連絡を取る:

Re: 未テストのタスククラス

投稿記事 by TororoShinku » 14年前

文字だけにしてしまうと、
GetObject関数内で、文字列がかぶっている場合があるからです。

敵キャラを毎回登録するたびに、Enemy1,Enemy2と
するのは、大変なので・・・

どうしましょう。。