ページ 11

vectorで、全シーンを管理する

Posted: 2013年3月19日(火) 21:35
by dic
お世話になります。dicです。
新しい質問、クールアイスさんと似たようなことをしていてて、次のようなソースを作ったことがあるのですが、
これは使い方としていいのでしょうか?マズいのでしょうか?
vectorクラスで、各シーンの要素を管理し、インデックス値で、それぞれの要素にアクセスします。
ステージ1、ステージ2、ステージ3、、、と、同時に生成するのでメモリ的にはやさしくないですが、
簡素に表現できるので、私にはやさしいです。
手を加えれば、ステージ1のときにステージ2がメモリにないようにもできますが、
ひとまず、この状態で、どのような評価を受けるのか聞きたいです。

私的に思うのは、vectorの使い方ではなくて、シューティングの構成要素をどのように認識するか?
で、違ってくるのではないのかと考えています。

コード:

// 質もん.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"

using namespace std;
#include	<vector>

class	CBase
{
protected:
	int		m_mode;
public:
	virtual	void	Init() = 0;
	virtual	void	Release() = 0;
	virtual	void	Update() = 0;
};

class	CTitle	:	public	CBase
{
public:
	void	Init()		{	printf( "in Title::Init()\n" );		}
	void	Release()	{	printf( "in Title::Release()\n" );	}
	void	Update()	{	printf( "in Title::Update()\n" );	}
};
class	CSetting	:	public	CBase
{
public:
	void	Init()		{	printf( "in CSetting::Init()\n" );		}
	void	Release()	{	printf( "in CSetting::Release()\n" );	}
	void	Update()	{	printf( "in CSetting::Update()\n" );	}
};
class	CStage	:	public	CBase
{
public:
	void	Init()		{	printf( "in CStage::Init()\n" );		}
	void	Release()	{	printf( "in CStage::Release()\n" );	}
	void	Update()	{	printf( "in CStage::Update()\n" );	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	vector<CBase*>	vFunction;

	CBase*	title = new CTitle();
	CBase*	setting = new CSetting();
	CBase*	stage1 = new CStage();
	CBase*	stage2 = new CStage();

	vFunction.push_back( title );
	vFunction.push_back( setting );
	vFunction.push_back( stage1 );
	vFunction.push_back( stage2 );

	int	input = 0;
	while( input != -1 )
	{
		printf( "0: title\n" );
		printf( "1: setting\n" );
		printf( "2: stage\n" );
		printf( "3: stage\n" );
		printf( "-1: end\n" );

		if( (0<=input) && (input<=3) )
			vFunction.at(input)->Update();
		else
			printf( "-1 から 3 の数字を入れてください\n" );
		scanf_s( "%d", &input );
	}

	return 0;
}


// 追加
「評価」ではなく「感想」を聞きたいです。

Re: vectorで、全シーンを管理する

Posted: 2013年3月19日(火) 22:19
by h2so5
インデックスを0〜3で決め打ちするならvectorである必要性がないです。
あとpush_backした順番を知っておかないと、どこに何がはいっているのか分からないのもちょっとどうかと思いますね。

Re: vectorで、全シーンを管理する

Posted: 2013年3月20日(水) 06:31
by dic
なるほど、たしかに決め打ちならそうなりますね。

決め打ちでいくなら

コード:

 CBase* vFunction[4];
でいいですね

感想ありがとうございます。