チョコボなどの自動生成マップはどのようにして作られているのでしょうか?
二次元配列で管理されていそうなのですがロジックが思い浮かびません。
ランダムにつくるにしても部屋ごとが繋がらなければならないなどありますよね?
チョコボなどのマップ
Re:チョコボなどのマップ
「チョコボ」が何を指しているかは知りませんが,
昔からあるローグタイプのダンジョン自動生成に関しては,色々なアルゴリズムが存在します。
Google: ローグ 自動生成 - Google 検索
http://www.google.co.jp/search?hl=ja&so ... =&gs_rfai=
書籍だと,例えば
Amazon.co.jp: ダンジョンゲームプログラミング: 森山 弘樹, 鷲見 健二: 本
http://www.amazon.co.jp/dp/4797346280/
は,内容紹介で「ローグ型ゲームの作成に必要な技術を網羅しました。」とある通り,実際にマップ生成方法が書いてあった覚えがあります。
# 立ち読みでざっと目を通した程度ですが。
昔からあるローグタイプのダンジョン自動生成に関しては,色々なアルゴリズムが存在します。
Google: ローグ 自動生成 - Google 検索
http://www.google.co.jp/search?hl=ja&so ... =&gs_rfai=
書籍だと,例えば
Amazon.co.jp: ダンジョンゲームプログラミング: 森山 弘樹, 鷲見 健二: 本
http://www.amazon.co.jp/dp/4797346280/
は,内容紹介で「ローグ型ゲームの作成に必要な技術を網羅しました。」とある通り,実際にマップ生成方法が書いてあった覚えがあります。
# 立ち読みでざっと目を通した程度ですが。
Re:チョコボなどのマップ
参考になるサイトをありがとうございます。
概念は何となく理解することが出来ました。
DXライブラリを使って実装しようと思っております。
ただ下記でつまづいてしまいました。
http://racanhack.sourceforge.jp/rhdoc/coderect.html
構造体を作って部屋のサイズを設定しているのはわかるのですが
これをどのようにDXライブラリでも使えるようにするかがわかりません。
今後の為にも理解したいです。
お手間を取らせてしまい申し訳ないのですが教えては頂けないでしょうか?
概念は何となく理解することが出来ました。
DXライブラリを使って実装しようと思っております。
ただ下記でつまづいてしまいました。
http://racanhack.sourceforge.jp/rhdoc/coderect.html
struct _rect { int lx, ly, hx, hy; }; GList *rect_list; struct _rect *rect_add(int lx, int ly, int hx, int hy) { struct _rect *rect; rect = g_new(struct _rect, 1); rect->lx = lx; rect->ly = ly; rect->hx = hx; rect->hy = hy; rect_list = g_list_append(rect_list, rect); return(rect); }上記のソースはどういう意味なのでしょうか?
構造体を作って部屋のサイズを設定しているのはわかるのですが
これをどのようにDXライブラリでも使えるようにするかがわかりません。
今後の為にも理解したいです。
お手間を取らせてしまい申し訳ないのですが教えては頂けないでしょうか?
Re:チョコボなどのマップ
連レス失礼します。
自分なりに書いたソースを添付させて頂きます。
頂いたURLのsplitのhxはサイズなのでしょうか?それとも終わりの場所なのでしょうか?
自分なりに解釈したソースでは終わりの部分を指定して塗りつぶす様な処理にしてあります。
イマイチglibの関数系やソースの書き方が読めないので間違えていたらすみません。
又、add関数を書いておりません(使い方がわからないです)
自分なりに書いたソースを添付させて頂きます。
頂いたURLのsplitのhxはサイズなのでしょうか?それとも終わりの場所なのでしょうか?
自分なりに解釈したソースでは終わりの部分を指定して塗りつぶす様な処理にしてあります。
イマイチglibの関数系やソースの書き方が読めないので間違えていたらすみません。
又、add関数を書いておりません(使い方がわからないです)
#define MAP_W 50 #define MAP_H 40 #define MINIMUM_RECT_SIZE 8 #define CEL_SIZE 8 bool MapRandom[MAP_H][MAP_W]; // 分割する void RectSplit( int lx, int ly, int hx, int hy ){ for (int y=ly; y<=hy; y++) { for (int x=lx; x<=hy; x++) { if( x==lx || x==hx ) MapRandom[y][x] = true; if( y==ly || y==hy ) MapRandom[y][x] = true; }; }; } ~Init部分~ for (int y=0; y<MAP_H; y++) { for (int x=0; x<MAP_W; x++) { MapRandom[y][x] = false; }; }; RectSplit( 3, 3, 8, 8 ); ~表示部分~ for (int y=0; y<MAP_H; y++) { for (int x=0; x<MAP_W; x++) { if( !MapRandom[y][x] ) DrawBox( x*CEL_SIZE, y*CEL_SIZE, x*CEL_SIZE+CEL_SIZE, y*CEL_SIZE+CEL_SIZE, 0x000000, 255 ); else DrawBox( x*CEL_SIZE, y*CEL_SIZE, x*CEL_SIZE+CEL_SIZE, y*CEL_SIZE+CEL_SIZE, 0xff0000, 255 ); }; };