diff options
Diffstat (limited to 'generate.py')
| -rw-r--r-- | generate.py | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/generate.py b/generate.py new file mode 100644 index 0000000..9addca0 --- /dev/null +++ b/generate.py @@ -0,0 +1,84 @@ +import numpy as np +import matplotlib.pyplot as plt +from noise import pnoise2 +import matplotlib.colors +from PIL import Image + +# 地图尺寸和每个格子的像素大小 +size = 25 +pixel_per_cell = 10 + +# 噪声缩放 +scale = 25.0 + +# 生成噪声地图 +noise_map = np.zeros((size, size)) +for i in range(size): + for j in range(size): + noise_map[i][j] = pnoise2(i / scale, j / scale, octaves=6, persistence=0.5, lacunarity=2.0, repeatx=size, repeaty=size, base=42) + +def get_terrain_type(value): + # 调整这些阈值以匹配实际所需的地形比例 + if value < 0: # 示例阈值,需要根据实际调整 + return '平原' + elif value < 0.15: # 示例阈值,需要根据实际调整 + return '丘陵' + else: + return '高山' + +def get_landform_type(terrain): + rand = np.random.rand() + if terrain == '平原': + if rand < 0.1875: # 7.5% 沙漠 + return '沙漠' + elif rand < 0.1875 + 0.625: # 25% 草原 + return '草原' + else: # 7.5% 沼泽,总和应为100% + return '沼泽' + elif terrain == '丘陵': + if rand < 0.175: # 15% 荒山 + return '荒山' + elif rand < 0.575 + 0.175: # 15% 树林 + return '树林' + else: # 10% 丛林,总和应为40% + return '丛林' + elif terrain == '高山': + if rand < 0.5: # 10% 土山 + return '土山' + elif rand < 0.5 + 0.375: # 7.5% 石山 + return '石山' + else: # 2.5% 雪山,总和应为20% + return '雪山' + + +# 创建地形地图和地貌地图 +terrain_map = [[get_terrain_type(value) for value in row] for row in noise_map] +landform_map = [[get_landform_type(terrain) for terrain in row] for row in terrain_map] + +# 颜色映射 +color_map = { + '沙漠': '#F4E1A0', + '草原': '#A4DE02', + '沼泽': '#2F6666', + '荒山': '#B2A280', + '树林': '#228B22', + '丛林': '#006400', + '土山': '#8B4513', + '石山': '#808080', + '雪山': '#FFFFFF' +} + +# 创建一个空白的图片 +image = np.zeros((size * pixel_per_cell, size * pixel_per_cell, 3), dtype=np.uint8) + +# 填充颜色 +for i in range(size): + for j in range(size): + color = matplotlib.colors.to_rgb(color_map[landform_map[i][j]]) + for k in range(pixel_per_cell): + for l in range(pixel_per_cell): + image[i * pixel_per_cell + k][j * pixel_per_cell + l] = [int(c * 255) for c in color] + +# 保存图片 +img = Image.fromarray(image) +img.save('/mnt/c/Users/blackhao/Desktop/landform_map.png') |
