マップに情報を持たせる方法を教えてください

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
taketoshi
記事: 222
登録日時: 15年前
住所: 日本国

マップに情報を持たせる方法を教えてください

#1

投稿記事 by taketoshi » 13年前

SRPGを作るために勉強しています。

今までマップはint型の構造体を用意してこのようにしていました
4,5,6などの数字に対応したマップチップを用意して表示させています。
また0以外の所はキャラクターが移動をできないようにしていました。

コード:


//4,5,6,7,8,9,10,11がキャラクタの移動を制限するための谷
int Block[4][25] ={4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
					7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,
					7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,
					7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,
					10,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9};

しかし、これだけではマップタイルの指定と、キャラクタが
通れるのか通れないのか位の情報しか持たせられないため
SRPGに必要な移動コストなどの要素を持たせたくて、構造体で記述し
その構造体を、配列にして情報を持たせてみました。

しかし初期化方法で悩んでいます。for文で回せば一括初期化は可能なのですが
int型の配列を用いているより、マップチップの配置が難しくて困っています
int型だと対応する数字を打ち込めばマップチップの配置ができたのですが
構造体の配列になったとたん、視覚的に配置ができなくなってしまいました。

何か良い方法はありませんか?

コード:

typedef struct mapdata{
	int nMaptipNum;//マップチップナンバー
	int nMoveCost;//そのマスの移動コスト
	bool bCharFlag;//敵キャラ及び味方キャラがいるかどうか
	int nEsqapeCost;//マップ特有の回避率
}mapdata;
int _tmain(int argc, _TCHAR* argv[])
{

	int x;
	int y;

	//ゼロで初期化
	mapdata map[25][25] = {0};

	//マップデータの初期化、はてマップチップの指定はどの様に・・・map[4][5] = 3とかだと日が暮れる・・・?
	for(x = 0;x < 25;++x){
		for(y = 0;y < 25; ++y){
			map[x][y].nMaptipNum = 0;
		}
	}

	return 0;
}



アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: マップに情報を持たせる方法を教えてください

#2

投稿記事 by h2so5 » 13年前

そもそも「そのマスの移動コスト」、「敵キャラ及び味方キャラがいるかどうか」、「マップ特有の回避率」はマスごとに保持が必要な情報ですか?

「マスの移動コスト」は動的に変化しない限りはマップチップナンバーと移動コストの対応テーブルを用意すれば判断できますし、
「敵キャラ及び味方キャラがいるかどうか」はキャラクターの座標と照らし合わせれば分かりますし、
「マップ特有の回避率」ってマップごとに1つ持っていればいい情報ですよね。

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

Re: マップに情報を持たせる方法を教えてください

#3

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

h2so5さんの言われるように、共有化出来るものは共有化を考える必要があります。
それに何でもかんでもマップデータに乗せるのはメンテナンス性からみても良いことではありません。

ちなみに大抵のゲームはマップエディタで情報を設定・作成するため、マップ情報はテキストあるいはバイナリデータでゲームプログラムは読み込んでいます。
やはり配列で扱うには複雑すぎるのとマップチップ番号と言う数値データだけで管理するのは無理がある & メンテナンス性が悪いためです。

マップエディタは下記のような汎用のものもありますが、こだわるには自作する必要が出てきます。
「Platinumの詳細情報 : Vector ソフトを探す!」
http://www.vector.co.jp/soft/win95/game/se231004.html

あるいは、公開されているゲームツールのエディタの機能やデータ構造を参考にするのも良いかと思います。
「ヒットポイント ウェブサイト」
http://www.hitpoints.net/cgi/topview.cgi?top.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ジンセイ

Re: マップに情報を持たせる方法を教えてください

#4

投稿記事 by ジンセイ » 13年前

マップエディタなら plutinum よりも Tiled Map Editor というツールをお薦めします。

「Tiled Map Editor」
http://www.mapeditor.org/

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

Re: マップに情報を持たせる方法を教えてください

#5

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

ジンセイ さんが書きました:マップエディタなら plutinum よりも Tiled Map Editor というツールをお薦めします。

「Tiled Map Editor」
http://www.mapeditor.org/
たしかにこれは高機能そうです。

【追記】
試してみました。たしかに高機能でした。
こんなに高機能なのにマップのアニメの設定が無いのは不思議。見逃したんでしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

taketoshi
記事: 222
登録日時: 15年前
住所: 日本国

Re: マップに情報を持たせる方法を教えてください

#6

投稿記事 by taketoshi » 13年前

皆様返信ありがとうございます。

構造体でマップ管理するというのは効率的ではないことがわかりました。
マップエディタを二つご提示いただきましたが、Platinumの方がとっつきやすそうなので
これの使い方を学習していきます。

Platinumを使ってマップロードを思考してみますのでひとまず解決とします。
また詰まったら教えてください。ありがとうございます。

閉鎖

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