ページ 11

ゲーム全体で使用する変数を一つのファイルにまとめておきたい。

Posted: 2012年3月22日(木) 18:24
by ネオニート
プレイヤーの名前など、各箇所で使用するデータを一つのファイルに保存しておきたいのですがやり方がわかりません。

調べてみるとパブリック変数がそれに近いのですがいまいちよくわかりません。

やりたいこととしては

・変数を int ATK = 100; のようにファイル(例えばinfo)にまとめておいて、別のファイルからint nowATK = info.ATK;

のような感じです。

Re: ゲーム全体で使用する変数を一つのファイルにまとめておきたい。

Posted: 2012年3月22日(木) 18:32
by softya(ソフト屋)
ネオニート さんが書きました:プレイヤーの名前など、各箇所で使用するデータを一つのファイルに保存しておきたいのですがやり方がわかりません。

調べてみるとパブリック変数がそれに近いのですがいまいちよくわかりません。

やりたいこととしては

・変数を int ATK = 100; のようにファイル(例えばinfo)にまとめておいて、別のファイルからint nowATK = info.ATK;

のような感じです。
使用言語は何でしょうか?

Re: ゲーム全体で使用する変数を一つのファイルにまとめておきたい。

Posted: 2012年3月22日(木) 20:50
by ネオニート
C++です

Re: ゲーム全体で使用する変数を一つのファイルにまとめておきたい。

Posted: 2012年3月22日(木) 20:54
by softya(ソフト屋)
情報を1つのクラスに集中して、クラスのインスタンスをグローバル変数として参照可能にすれば良いんじゃないでしょうか?
ただし、メンバ変数をpublicにするのは避けるべきだと思いますが。

変更が全くないならenumやconst値でpublicで良いと思いますが。

Re: ゲーム全体で使用する変数を一つのファイルにまとめておきたい。

Posted: 2012年3月23日(金) 01:29
by UN
externやシングルトンでの実装等方法は色々あるでしょうが、
そのへんは好き嫌い別れるところなのでどれでもいいきがします。
一応ざっくりとした例だけ書きます。

コード:

 
#include <stdio.h>

class Player
{
public:
	Player(){}
	~Player(){}

	void	SetAttack( int nAttack )		{ m_Attak = nAttack;	}
	int		GetAttack()						{ return m_Attak;		}

protected:
	int		m_Attak;
};

class CGlobal
{
public:
	Player* GetPlayer( int nID )
	{
		return &m_PlayerList[ nID ];
	}

	inline static CGlobal* GetInstance()
	{
		static CGlobal s_Instance;
		return &s_Instance;
	}

protected:
	CGlobal(){}
	~CGlobal(){}

	static const int	MAX_PLAYER = 32;

protected:
	Player		m_PlayerList[ MAX_PLAYER ];
};

// 上のクラスのヘッダーさえ読み込めばどこでもアクセス可能。

void main()
{
	Player* pPlayer = CGlobal::GetInstance()->GetPlayer( 0 );
	pPlayer->SetAttack( 100 );
}


大分適当に書きましたが、こんなかんじでもやりたいことはできると思います。
externについては省きました。本などのほうが詳しいと思いますので。

大きなお世話かもしれませんが、これらの方法はどこでもアクセスできて便利な反面、
いざソースを個別に切り離すときに、どこのソースにもこのグローバルなアクセサがでてきて
切り離せず、全部芋づるのようにソースがついてきて、別なプログラムで
ソースが流用できないなんて弊害も生むので、極力は避けたほうがいいきはします。

ただこのへんは使ってみて、自分なりに判断することをお勧めします。