ページ 11

ステージデータをテキストファイルから読み込むには?

Posted: 2015年10月04日(日) 01:11
by あるちゃん
通常のC言語にて
文字を動かすだけの簡単なダンジョンゲームを作っています。

コード:

int init_dungeon[dy_max][dx_max] = {
	//0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
	{ 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1},
	{ 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1},
	{ 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1},
	{ 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1},
	{ 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1},
	{ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},
	{ 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1},
	{ 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1},
	{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};

int dungeon[dy_max][dx_max];

というステージデータと配列を用意して

コード:


//マップ表示
void view_dungeon(model *player, model *enemy, int d_dat[][dx_max])
{

	int i, j, k;	//カウンタ用

	for(i=0;i<dy_max;i++){//y
		for(j=0;j<dx_max;j++){	//x
			dungeon[i][j] = init_dungeon[i][j];	//ダンジョンデータを初期化に

			for(k=0; k<ENEMY_MAX; k++){
				if(j == (enemy + k)->ux && i == (enemy+k)->uy){
					if(*(enemy+k)->n=='D'){dungeon[i][j] = 2;} //ドラゴンを書き込む
					if(*(enemy+k)->n=='W'){dungeon[i][j] = 3;}	//オオカミの位置を書きこむ
																
				}
			}
		}
	}

	system("cls");
	for(i=0; i<dy_max; i++){//y軸
		for(j=0; j<dx_max; j++){//x軸

			if(j == player->ux && i == player-> uy && e_flg==0 ){printf("人");}
			else if(d_dat[i][j] == 0/* && e_flg==0*/){printf(" ");}//床
			else if(d_dat[i][j] == 1){printf("山");}//山
			else if(d_dat[i][j] == 2){printf("DR");}//ドラゴン
			else if(d_dat[i][j] == 3){printf("WW");}//オオカミ
			else if(d_dat[i][j] == 4){printf("森");}//森
			//else if(d_dat[i][j] == 2 || d_dat[i][j] || d_dat[i][j] == 4){printf("森");}  
			}
		printf("\n");//改行
	}
}

という関数でステージと自機と敵を表示しています。

これを、ステージのデータを stage1.txt というテキストファイルに置き換えて

1111111111111111
1701000100000004
1011010100000109
1000020010011111
1011110010310001
1010010810010101
1010011111000101
1010000000000101
1010100001000101
1011011110111101
1000000000002001
1111111111111111

といった具合に

int dungeon[][]; に再び格納して、表示させるようにしたいのですが、どのようにすればよいのでしょうか?

玄人の皆様からすれば取るに足らないような問題かもしれませんが、
どうかよろしくお願いします。

Re: ステージデータをテキストファイルから読み込むには?

Posted: 2015年10月04日(日) 10:15
by softya(ソフト屋)
1次元の配列ならテキスト・ファイル読み込みは出来ますか? 簡単な所から練習しましょう。
それと、このファイル形式は2桁の数値に対応できないので問題がありそうです。

Re: ステージデータをテキストファイルから読み込むには?

Posted: 2015年10月06日(火) 19:42
by あるちゃん
ご返答ありがとうございます。お返事が遅くなりすいません。
そうですね、たしかに一次元の読み込みからもう一度さらい直すべきだなと思いました。
それにしてもこのやり方では二桁の数値には対応できないんですね。仕様に関わるところなので、少し残念です。