![](/img/trans.png)
[英]How does a compiled “Hello World” C program store the String using machine language?
[英]How to create a world map using C language?
如何使用C語言創建世界地圖?
在這里,我要生成世界地圖的1000 * 1000二維數組。 在數組中,陸地部分標記為1,海洋部分標記為0。有沒有簡單的創建方法?
顯然,沒有算法可以描述各大洲海岸線的形狀;)
但是您可以使用例如Smrender( http://www.abenteuerland.at/smrender/ ),使用OpenStreetMap或Naturalearthdata等海岸線和一條規則為其提供數據。 讓它創建一個具有1000x1000像素的PNG圖像。
編輯:使用ImageMagick(轉換),您可以將PNG直接轉換為數組的C頭文件。 轉到Openstreetmap.org(或Googlemaps),進行縮小,直到看到整個世界,然后進行截圖,然后在您喜歡的圖像處理程序中將其打開,並將其縮放並調整為1000x1000,然后運行convert input.png output.h
。
伯恩哈德
幾個小時前,我在游戲開發中寫了一個答案可以幫助您,這里的主題是用javascript編寫的,但翻譯成c並不難。
在該示例中,您填充了整個0的地圖,然后隨機跟蹤了一條路徑,如果以后要平滑地圖,則可以制作一個片段,循環所有watter瓦片並將其轉換為Land(如果有3個或更多的Land Tile)與它相鄰,進行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;
}
您可能有一些程序或腳本(以輸入一些地球圖像的形式作為輸入),該程序或腳本會生成一個長C文件,例如
const char map[1000][1000] = {
{'0', '1', //.... etc for the first fow
},
{'0', '0', '0', '1', //... etc
}
/// etc for other rows
};
有關示例,另請參見XBM 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.