ソースは↓みたいな感じです(相変わらずコメントが無いので見づらいです。読み飛ばし安定)
//h_map.h
//移動できるかどうか
#define CAN_MOVE (1)
#define CANNOT_MOVE (0)
//乗ると何が起こるか
#define GET_NONE (0)
#define GET_DAMAGE (1)
#define GET_LIFE (2)
//イベントの場合、xにイベントID
#define GET_EVENT(x) (100+x)
//エリアの最低サイズ
#define AREA_UNDERLIMIT (5)
//最大値検出マクロ
#define MAX(a,b) (((a)>(b))?(a):(b))
#define MIN(a,b) (((a)
#include
#include
#include
#include "h_maps.h"
int GetRandom(int min,int max){
return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX));
}
TIPTYPE MakeTipType(int m, int g){
TIPTYPE tiptype;
tiptype.gets = g;
tiptype.move = m;
return tiptype;
}
TIP MakeTip(int m, int g, int s, int c){
TIP tip;
tip.type = MakeTipType(m, g);
tip.set = s;
tip.chara = c;
return tip;
}
AREA MakeArea(int lux, int luy, int rdx, int rdy){
AREA area;
if(abs(lux - rdx) <= AREA_UNDERLIMIT){
area.leftup_x = lux;
area.rightdown_x = rdx;
}
else{
int x1, x2;
do{
x1 = GetRandom(lux, rdx);
x2 = GetRandom(lux, rdx);
}while(abs(x1 - x2) <= AREA_UNDERLIMIT);
area.leftup_x = MIN(x1, x2);
area.rightdown_x = MAX(x1, x2);
}
if(abs(luy - rdy) <= AREA_UNDERLIMIT){
area.leftup_y = luy;
area.rightdown_y = rdy;
}
else{
int y1, y2;
do{
y1 = GetRandom(luy, rdy);
y2 = GetRandom(luy, rdy);
}while(abs(y1 - y2) <= AREA_UNDERLIMIT);
area.leftup_y = MIN(y1, y2);
area.rightdown_y = MAX(y1, y2);
}
return area;
}
MAP MakeMap(int w, int h){
int i, j, k;
MAP map;
map.height = h;
map.width = w;
map.tips = new TIP*[h];
for(i=0;i<h;i++){
map.tips[i] = new TIP[w];
}
for(i=0;i<h;i++){
for(j=0;j<w;j++){
map.tips[i][j] = MakeTip(CANNOT_MOVE, GET_NONE, 0, 0);
}
}
srand((unsigned int)time(NULL));
int xdiv = GetRandom(1, w / AREA_UNDERLIMIT);
int ydiv = GetRandom(1, h / AREA_UNDERLIMIT);
map.area_num = xdiv*ydiv;
map.area = new AREA[map.area_num];
int xdiv_size = w / xdiv;
int ydiv_size = h / ydiv;
k = 0;
for(i=0;i<xdiv;i++){
for(j=0;j<ydiv;j++){
int lux = (j * xdiv_size) + 1;
int luy = (i * ydiv_size) + 1;
int rdx = lux + xdiv_size - 1;
int rdy = luy + ydiv_size - 1;
map.area[k] = MakeArea(lux, luy, rdx, rdy);
k++;
}
}
for(i=0;i<map.area_num;i++){
for(j=map.area[i].leftup_y;j<map.area[i].rightdown_x;j++){
for(k=map.area[i].leftup_x;k<map.area[i].rightdown_x;k++){
map.tips[k][j] = MakeTip(CAN_MOVE, GET_NONE, 0, 0);
}
}
}
return map;
}
void DestMap(MAP map){
int i=0;
delete[] map.area;
for(i=0;i<map.height;i++){
delete[] map.tips[i];
}
delete[] map.tips;
}
void DrawMap(MAP map){
int i, j;
for(i=0;i<map.height;i++){
for(j=0;j<map.width;j++){
if(map.tips[i][j].type.move == CANNOT_MOVE) printf("#");
else printf(".");
}
printf("\n");
}
}
##################################################
#....#############################################
#....#############################################
#....#############################################
#....#############################################
##################################################
#.........########################################
#.........########################################
#.........########################################
#.........########################################
##################################################
#..............###################################
#..............###################################
#..............###################################
#..............###################################
##################################################
#...................##############################
#...................##############################
#...................##############################
#...................##############################
##################################################
#........................#########################
#........................#########################
#........................#########################
#........................#########################
##################################################
#.............................####################
#.............................####################
#.............................####################
#.............................####################
##################################################
#..................................###############
#..................................###############
#..................................###############
#..................................###############
##################################################
##################################################
##################################################
##################################################
##################################################
##################################################
##################################################
##################################################
##################################################
##################################################
##################################################
##################################################
##################################################
##################################################
##################################################
(ランダムなので色々変わりますが、大体こんな感じに表示されます)
なんだかグラフっぽい何かが生成されるようになっちゃいました。
うーん、何が原因なんだろう。