1

如何使用 C 语言创建世界地图?

在这里,我想生成一个 1000*1000 的世界地图二维数组。在数组中,陆地部分标记为 1,海洋部分标记为 0。有没有简单的创建方法?

4

3 回答 3

4

显然,没有描述大陆海岸线形状的算法;)

但是您可以使用例如 Smrender ( http://www.abenteuerland.at/smrender/ ),使用例如 OpenStreetMap 或 Naturalearthdata 的海岸线和一条规则来提供它。让它创建一个 1000x1000 像素的 PNG 图像。

编辑:使用 ImageMagick (convert),您可以直接将 PNG 转换为 C 头文件作为数组。转到 Openstreetmap.org(或 Googlemaps),缩小直到看到整个世界,制作屏幕截图,在您最喜欢的图像处理程序中打开它并将其剪切并调整为 1000x1000,然后运行convert input.png output.h​​.

伯恩哈德

于 2016-01-13T13:52:39.377 回答
1

几个小时前我在游戏开发中写了一个可以帮助你的答案,这是主题,它是用javascript编写的,但翻译成c并不难。

在示例中,您填充了 0 的整个地图,然后随机跟踪路径,如果您想稍后平滑地图,您可以制作一个片段,循环所有的瓦特瓦片,如果有 3 个或更多土地瓦片,则将它们转换为土地在它旁边,做 40-60 次,你会得到一个更光滑的海岸,大陆上没有“洞”。

编辑用 C 中的演示更新答案。我没有测试过,但如果你包含标题并检查代码,这就是答案。

//Create and populate the map
int mapsize = 100;
int map[mapsize*mapsize];

for(int t = 0; t < mapsize*mapsize; t++) map[t] = 0;

//make the path
int currPos[2] = {0,50};
map[currPos[0]+(currPos[1]*mapSize)] = 1;
int landTiles = 20000;

for(var l = 0; l < landTiles; l++){
    int dir[2] = {RANDOM_BETWEEN_-1_AND_1, RANDOM_BETWEEN_-1_AND_1};
    int next[2] = {currPos[0]+dir[0], currPos[1]+dir[1]};

    map[next[0]+(next[1]*mapSize)] = 1;
    currPos = next;
}

//Draw the map
for(var row = 0; row < mapSize; row++){
    for(var col = 0; col < mapSize; col++){
        cout << map[col+(row*mapSize)];
    }
    cout << endl;
}
于 2016-01-13T14:09:01.033 回答
0

你可以有一些程序或脚本(将地球图像的一些表示作为输入)生成一个长的 C 文件,如

const char map[1000][1000] = {
  {'0', '1', //.... etc for the first fow
  },
  {'0', '0', '0', '1', //... etc
  }
  /// etc for other rows
}; 

有关示例,另请参见XBM 。

于 2016-01-13T14:06:51.450 回答