チョコボなどのマップ

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

チョコボなどのマップ

#1

投稿記事 by バズー » 15年前

チョコボなどの自動生成マップはどのようにして作られているのでしょうか?
二次元配列で管理されていそうなのですがロジックが思い浮かびません。
ランダムにつくるにしても部屋ごとが繋がらなければならないなどありますよね?

YuO

Re:チョコボなどのマップ

#2

投稿記事 by YuO » 15年前

「チョコボ」が何を指しているかは知りませんが,
昔からあるローグタイプのダンジョン自動生成に関しては,色々なアルゴリズムが存在します。
Google: ローグ 自動生成 - Google 検索
http://www.google.co.jp/search?hl=ja&so ... =&gs_rfai=

書籍だと,例えば
Amazon.co.jp: ダンジョンゲームプログラミング: 森山 弘樹, 鷲見 健二: 本
http://www.amazon.co.jp/dp/4797346280/
は,内容紹介で「ローグ型ゲームの作成に必要な技術を網羅しました。」とある通り,実際にマップ生成方法が書いてあった覚えがあります。
# 立ち読みでざっと目を通した程度ですが。

バズー

Re:チョコボなどのマップ

#3

投稿記事 by バズー » 15年前

参考になるサイトをありがとうございます。
概念は何となく理解することが出来ました。

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:チョコボなどのマップ

#4

投稿記事 by バズー » 15年前

連レス失礼します。
自分なりに書いたソースを添付させて頂きます。

頂いた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 );
        };
    };

バズー

Re:チョコボなどのマップ

#5

投稿記事 by バズー » 15年前

やはりわかりません。
質問が消えてしまいそうなので上げさせて下さい。

閉鎖

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