プレイヤーの名前など、各箇所で使用するデータを一つのファイルに保存しておきたいのですがやり方がわかりません。
調べてみるとパブリック変数がそれに近いのですがいまいちよくわかりません。
やりたいこととしては
・変数を int ATK = 100; のようにファイル(例えばinfo)にまとめておいて、別のファイルからint nowATK = info.ATK;
のような感じです。
ゲーム全体で使用する変数を一つのファイルにまとめておきたい。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: ゲーム全体で使用する変数を一つのファイルにまとめておきたい。
使用言語は何でしょうか?ネオニート さんが書きました:プレイヤーの名前など、各箇所で使用するデータを一つのファイルに保存しておきたいのですがやり方がわかりません。
調べてみるとパブリック変数がそれに近いのですがいまいちよくわかりません。
やりたいこととしては
・変数を int ATK = 100; のようにファイル(例えばinfo)にまとめておいて、別のファイルからint nowATK = info.ATK;
のような感じです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: ゲーム全体で使用する変数を一つのファイルにまとめておきたい。
情報を1つのクラスに集中して、クラスのインスタンスをグローバル変数として参照可能にすれば良いんじゃないでしょうか?
ただし、メンバ変数をpublicにするのは避けるべきだと思いますが。
変更が全くないならenumやconst値でpublicで良いと思いますが。
ただし、メンバ変数をpublicにするのは避けるべきだと思いますが。
変更が全くないならenumやconst値でpublicで良いと思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ゲーム全体で使用する変数を一つのファイルにまとめておきたい。
externやシングルトンでの実装等方法は色々あるでしょうが、
そのへんは好き嫌い別れるところなのでどれでもいいきがします。
一応ざっくりとした例だけ書きます。
大分適当に書きましたが、こんなかんじでもやりたいことはできると思います。
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については省きました。本などのほうが詳しいと思いますので。
大きなお世話かもしれませんが、これらの方法はどこでもアクセスできて便利な反面、
いざソースを個別に切り離すときに、どこのソースにもこのグローバルなアクセサがでてきて
切り離せず、全部芋づるのようにソースがついてきて、別なプログラムで
ソースが流用できないなんて弊害も生むので、極力は避けたほうがいいきはします。
ただこのへんは使ってみて、自分なりに判断することをお勧めします。