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



如何使用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以获取示例。

相关内容

  • 没有找到相关文章

最新更新