如何使用 C 语言创建世界地图?
在这里,我想生成一个 1000*1000 的世界地图二维数组。在数组中,陆地部分标记为 1,海洋部分标记为 0。有没有简单的创建方法?
如何使用 C 语言创建世界地图?
在这里,我想生成一个 1000*1000 的世界地图二维数组。在数组中,陆地部分标记为 1,海洋部分标记为 0。有没有简单的创建方法?
显然,没有描述大陆海岸线形状的算法;)
但是您可以使用例如 Smrender ( http://www.abenteuerland.at/smrender/ ),使用例如 OpenStreetMap 或 Naturalearthdata 的海岸线和一条规则来提供它。让它创建一个 1000x1000 像素的 PNG 图像。
编辑:使用 ImageMagick (convert),您可以直接将 PNG 转换为 C 头文件作为数组。转到 Openstreetmap.org(或 Googlemaps),缩小直到看到整个世界,制作屏幕截图,在您最喜欢的图像处理程序中打开它并将其剪切并调整为 1000x1000,然后运行convert input.png output.h
.
伯恩哈德
几个小时前我在游戏开发中写了一个可以帮助你的答案,这是主题,它是用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;
}
你可以有一些程序或脚本(将地球图像的一些表示作为输入)生成一个长的 C 文件,如
const char map[1000][1000] = {
{'0', '1', //.... etc for the first fow
},
{'0', '0', '0', '1', //... etc
}
/// etc for other rows
};
有关示例,另请参见XBM 。