【问题标题】:How to create a world map using C language?如何使用 C 语言创建世界地图?
【发布时间】:2016-01-13 13:31:04
【问题描述】:

如何用C语言制作世界地图?

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

【问题讨论】:

标签: c procedural-generation world-map


【解决方案1】:

显然,没有描述大陆海岸线形状的算法;)

但你可以使用例如Smrender (http://www.abenteuerland.at/smrender/),用例如海岸线喂它OpenStreetMap 或 Naturalearthdata 和一条规则。让它创建一个 1000x1000 像素的 PNG 图像。

编辑: 使用 ImageMagick (convert),您可以直接将 PNG 转换为 C 头文件作为数组。 转到 Openstreetmap.org(或 Googlemaps),缩小直到看到整个世界,制作屏幕截图,在您最喜欢的图像处理程序中打开它并将其剪切并调整为 1000x1000,然后运行convert input.png output.h

伯恩哈德

【讨论】:

    【解决方案2】:

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

    在示例中,您填充了整个 0 的地图,然后随机跟踪路径,如果您想稍后平滑地图,您可以制作一个 sn-p 循环所有瓦特瓦片并将它们转换为陆地(如果有)与其相邻的 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;
    }
    

    【讨论】:

    • 谢谢先生.. 有没有更简单的制作方法?
    • 确实,这个技术很简单,我做的实现很棘手,是个测试,所以很难理解。您只需用 0 填充地图,选择一个随机初始点,循环很多次(在示例中为 20000 次),在每个循环中脚本必须选择一个随机方向,在该位置设置一块土地并更新该位置作为“当前”,这将为您提供您在演示中看到的内容
    【解决方案3】:

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

    const char map[1000][1000] = {
      {'0', '1', //.... etc for the first fow
      },
      {'0', '0', '0', '1', //... etc
      }
      /// etc for other rows
    }; 
    

    有关示例,另请参阅 XBM

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多