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