チョコボなどのマップ
Posted: 2010年8月14日(土) 01:32
チョコボなどの自動生成マップはどのようにして作られているのでしょうか?
二次元配列で管理されていそうなのですがロジックが思い浮かびません。
ランダムにつくるにしても部屋ごとが繋がらなければならないなどありますよね?
二次元配列で管理されていそうなのですがロジックが思い浮かびません。
ランダムにつくるにしても部屋ごとが繋がらなければならないなどありますよね?
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);
}
上記のソースはどういう意味なのでしょうか?#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 );
};
};