首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用C语言创建世界地图?

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

Stack Overflow用户
提问于 2016-01-13 21:31:05
回答 3查看 2.3K关注 0票数 1

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

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

EN

回答 3

Stack Overflow用户

发布于 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。

伯恩哈德

票数 4
EN

Stack Overflow用户

发布于 2016-01-13 22:09:01

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

在这个例子中,你填满了整个0的地图,然后你随机跟踪一条路径,如果你想稍后平滑地图,你可以制作一个代码片段,循环所有的瓦片并将它们转换为陆地如果有3个或更多的地砖相邻,这样做40-60次,你将得到一个更平滑的海岸,并且在大陆上没有“洞”。

用C编写一个示例来编辑更新答案。我还没有测试过它,但是如果你包含了头文件并检查了代码,这就是答案。

代码语言:javascript
复制
//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;
}
票数 1
EN

Stack Overflow用户

发布于 2016-01-13 22:06:51

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

代码语言:javascript
复制
const char map[1000][1000] = {
  {'0', '1', //.... etc for the first fow
  },
  {'0', '0', '0', '1', //... etc
  }
  /// etc for other rows
}; 

另请参阅XBM获取示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34768039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档