マップの作り方。

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

マップの作り方。

#1

投稿記事 by s-rush » 16年前

いつもお世話になってます。前回のアドバイスのおかげで、無事に戦闘システムの
プログラムを完成させることができました。


次はマップ系のプログラムを作ろうとしているのですが、どのように作ればよいのかよくわかりません。
自分でも調べてはみたのですが、
map[5][5]={{1, 1, 1, 1, 1},
           {1, 1, 2, 2, 2},
           {1, 1, 2, 1, 1},
           {1, 1, 2, 1, 1},
           {1, ,1 2, 1, 1}};
のような配列を用意して初期化。
対応する数値のマップチップ?を読み込んで表示させる、
というものがほとんどでした。
その表示させるプログラムのサンプルがなかったので、
どのように表示するのかが、分かりませんでしたが・・・

小さなマップ(建物の中など)であればこのようなやり方でもいいのでしょうが、
大きなマップ(フィールドなど)となると、このようなやり方ではとても非効率だと思います。

他にもっと効率の良い方法というのはないのでしょうか?
それとも上記のように配列で表現するしかないのでしょうか?

どなたか回答お願いします。
参考になるHPがあれば、教えていただければありがたいです。

s-rush

Re:マップの作り方。

#2

投稿記事 by s-rush » 16年前

すいません。
どのようなマップを作りたいのかを書くの忘れてました。
ポケモンのゲームを作っているので(完全なパクリですが)、
3Dではなく2Dのマップです。

本当に申し訳ないですが、回答お願いします。

たいちう

Re:マップの作り方。

#3

投稿記事 by たいちう » 16年前

> 他にもっと効率の良い方法というのはないのでしょうか?
> それとも上記のように配列で表現するしかないのでしょうか?

ポケモンのゲームのマップというのは分からないけど、
初期のドラクエのマップのようなもの、と考えてよいのかな?
1000×1000のマップについて、データをint型で持ったとしても4MB。
今時の普通のパソコンならば余裕じゃないですか?

とりあえずこれで作成を進めて、何か問題があるようならば
再度質問されてはいかがですか?もっと具体的に。
もっと効率の良い方法というものは存在しますが、
何をもって効率が良いと定義するかが問題です。
実行時の処理速度とか、メモリサイズとか、ファイルサイズとか。

Justy

Re:マップの作り方。

#4

投稿記事 by Justy » 16年前


>大きなマップ(フィールドなど)となると、このようなやり方ではとても非効率だと思います

 でしょうね。
 ある程度規模が大きくなったら、ソースコードにマップデータを埋め込むやり方は
プレビューするのにもビルドの手間がかかる分非効率的になります。

 作りたいツクール系のようなゲームに合ったマップチップを並べたり作ったりするエディタを
使うか作るかして、そのマップの配列データを外部ファイルとして出力します。
 やっぱり、実際に絵を見ながら調整できるのでソースに埋め込むより遙かに効率がよくなります。

 ゲーム本体のプログラムはそのデータを読み込んで、データの通り配置・表示するようにすれば
効率よく作業が進められるはずです。


 状況とか用途によっては、エディタ機能をゲーム本体の内部にデバッグモードとして
れてしまうこともありますね。

 そうすることで、編集・実行が1アプリで完結しますし、内部の何かのアルゴリズムを
変更したときもツールとゲームとを一緒に更新できるというメリットがあります・


 ちなみに既存のマップエディタですと、こんなのがあります。
 他にも探せばたくさんあるかと思います。

ME MapEditer(Windows95/98/Me / ゲーム)
ttp://www.vector.co.jp/soft/win95/game/se190983.tml

みずやん's Water World■TMapEditer2D
ttp://homepage1.nifty.com/mizu-yan/download/tools/tmap.tml

Map Editor
ttp://www.geocities.com/SiliconValley/Vista/7336/robmpy.htm

マップエディターQuoyle(Windows95/98/Me / ゲーム)
ttp://www.vector.co.jp/soft/win95/game/se386079.tml?site=n

マップエディター ANoME(あのみぃ)(Windows95/98/Me / プログラミング)
ttp://www.vector.co.jp/soft/win95/prog/se222575.tml

EgA(Windows95/98/Me / ゲーム)
ttp://www.vector.co.jp/soft/win95/game/se148524.tml

簡易凡用マップエディター(Windows95/98/Me / 文書作成)
ttp://www.vector.co.jp/soft/win95/writing/se203463.tml

s-rush

Re:マップの作り方。

#5

投稿記事 by s-rush » 16年前

早い回答ありがとうございます。

>たいちうさん map[10000][10000]と配列を作って、試みたことはあるのですが、
        やはり、プログラムとして書くのも大変ですし、視覚的に分かりにくいので、
        もうちょっと作りやすい方法を模索していたんです。
        もっと詳しく記載しておくべきでした。

>Justyさん マップの配列データを外部ファイルとして出力するということは、ゲーム本体の
       プログラムでfopenを使って読み込めばいいのでしょうか??

>状況とか用途によっては、エディタ機能をゲーム本体の内部にデバッグモードとして
れてしまうこともありますね。
というのはどういうことなんでしょうか?
はじめて聞く手法なので、できたら教えてほしいです。

Justy

Re:マップの作り方。

#6

投稿記事 by Justy » 16年前


>プログラムでfopenを使って読み込めばいいのでしょうか??

 fopenでも fstreamでもいいですが、そうです。



>エディタ機能をゲーム本体の内部にデバッグモードとして

 デバッグ用の機能で、ゲームアプリの中にデータを編集する機能を入れてしまう、
ということです(つまり、リリースするときはビルドから外すなど、オフにする)。

 もちろん、ゲームとは別に独立したツールを作った方がいいこともありますので、
そのあたりは用途に応じて検討が必要ですが、ゲーム内にツール機能を含めると
ゲームの様々なアルゴリズム・・・RPGならエンカウント・バトル、イベントなど・・・
を完全に共有できるので、

マップを実際に目で確認しながら編集 -> 即実行して実際のキャラで歩いてみる
-> 編集モードに戻り再び気に入らないところを編集 -> 実際に歩く ->エンカウントする
-> 編集モードに戻りエンカウント率が高すぎるので調整する -> 実際に歩いて試す
-> 問題なければ保存

という動作がアプリを終了したり再起動したりすることなく実行できるようになります。

 マップエディタに絞って一例を挙げるなら、編集モードON・OFFのフラグを作って
ONの時右クリックしたら、クリックしたところのマップチップが選択状態になり、
コンテキストメニューが出てきて、そのマップチップを別のものに変えたり、削除したり
イベントを埋め込んだり、前後の順番を入れ替えたりするメニューを出すとか。

 で、編集モードをOFFにすれば普通にキャラがマップを歩けるようになるので
実際に歩いて確かめる、と。

 こんな感じの機能です。

s-rush

Re:マップの作り方。

#7

投稿記事 by s-rush » 16年前

Justyさん、回答ありがとうございます。
エディタ機能をゲーム本体の内部に組み込んだ方が、編集がしやすそうですね。

ですが、内部にデバッグモードとして組み込むには
何か設定する必要があるのでしょうか?
それともプログラムで制御するのでしょうか?

自分で調べるにもキーワードが分からないので、自力で解決するのは厳しいです。

質問してばかりで申し訳ないですが、お願いします。

開発環境はVC++2008です。

Dixq (管理人)

Re:マップの作り方。

#8

投稿記事 by Dixq (管理人) » 16年前

何か設定とかして外部ツール取り込むとかじゃなく、要はRPGツクールを作ってしまいましょうと言うことだと思います。
RPGツクールってあまり使った事は無いですけど、きっと制作画面で、RPG制作して、プレビュー画面で
どうなったか確認できたりするんだろうと思います。
システムを作るのは大変でしょうが、一度作ってしまえば、それを元にサクサク作れるようになると思いますし、
きっと大規模なゲーム制作はどこの会社も自分達独自のツールを作ってそれを利用しているでしょうし、
恐らくゲーム制作を本格的にするには、もっとも効率の良い方法なんじゃないかと思います。

マップチップを並べてデータ出力する&プレビューを見る位のツールならよくネットで見かけるので、
作るのがめんどうならそういうのも利用してみてはどうでしょう。
まぁ作った方が自分の物になるし、勉強になると思うので、作ってしまうのも良いと思いますが。

Dixq (管理人)

Re:マップの作り方。

#9

投稿記事 by Dixq (管理人) » 16年前

おっと、既にツールに関してはJustyさんが紹介されてますね、失礼しました。

Justy

Re:マップの作り方。

#10

投稿記事 by Justy » 16年前


>何か設定する必要があるのでしょうか?
>それともプログラムで制御するのでしょうか?

 リリース(リテール)ビルドの時は機能を無効にする、ビルドから外すなどの設定が必要ですが、
基本的にはプログラムで制御ということになります。

 というかおおまかに言ってしまえば、普通に外部ツールとして作る場合と
たいして違いはありません。
 違うのは本体と一体になっているか別になっているかとツールの起動方法などの
些細な点だけです。

 検索して探すなら、普通にゲーム製作ツールの作り方、マップエディタの作り方、的な
ところで探すのがいいでしょう。


 しかし、自作でツールを作るのは(ゲーム本体と別に作るか内包するかはともかく)
なかなかは大変で慣れも必要なので、管理人さんも仰っていますが今回は既存のツールを
使って作業を進めた方が早いかと思います。


 既存のツールは上記で紹介したいように多数あります。
 
 ケースによっては龍神録でやっているように本来ゲーム以外の用途で使われるソフト、
例えば Excelなどを利用して配置データを記述し、csvで出力してもいいですね。

 或いは、画像データそのものをマップ配置データと見なすやりかたもあります。
 200x100の広さのマップなら、100ピクセル×100ピクセルの画像を用意し、
その1ピクセル毎の色が、赤なら 0、青なら 1のようにルールを決めてしまえばペイントなどの
画像編集ソフトでも配置データを記述することはできます。

 そんなかんじでやり方はたくさんありますので、いろいろ試して s-rushさんの状況に
合った方法を探してみて下さい。

J

Re:マップの作り方。

#11

投稿記事 by J » 16年前

自分のプログラムにデバッグ用としてエディターを組み込むのであれば、
デバッグ用の定数を一つ作ると楽ですよ。

const int DEBUG_MODE = 1;

と言う風に
そうすれば、

if(DEBUG_MODE == 1 && ...etc)

のようにデバッグ時にのみ動作するようにできます
もちろんリリースの時には数字を0などに変えるだけです。

まあ配布されてるフリーソフトを活用された方が楽だと思いますが。。

kazuoni

Re:マップの作り方。

#12

投稿記事 by kazuoni » 16年前

自分が今丁度作ってるところですww
RPGツクール(もどき)を自作で^^;

正直言って作るのはかなり大変です。。
このままだとある程度妥協した作品になりそうです・・・。
っというかRPGを作るはずが、そのためのツールづくりで今進行しています^^;
マップ作成ツール
ノベル作成ツール
メニュー作成ツール
・・・

がんばってください^^;

s-rush

Re:マップの作り方。

#13

投稿記事 by s-rush » 16年前

皆さん、ありがとうございます。

自分で調べてみたのですが、エディタを作るのはなかなか大変そうですね。
今回は自分にあったフリーソフトを探してそれを利用させていただきますが、
そのうち自分で作ってみたいと思います。

完成するまでまだまだ時間がかかりますが、頑張って続けていきたいと思います。

閉鎖

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