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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あるちゃん

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

#1

投稿記事 by あるちゃん » 9年前

通常の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[][]; に再び格納して、表示させるようにしたいのですが、どのようにすればよいのでしょうか?

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 9年前

1次元の配列ならテキスト・ファイル読み込みは出来ますか? 簡単な所から練習しましょう。
それと、このファイル形式は2桁の数値に対応できないので問題がありそうです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

あるちゃん

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

#3

投稿記事 by あるちゃん » 9年前

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

閉鎖

“C言語何でも質問掲示板” へ戻る