如何使用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的地图,然后随机追踪一条路径,如果你想稍后平滑地图,你可以制作一个片段,循环所有的瓦特瓦,并将它们转换为陆地。
编辑用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以获取示例。