E:\hgames\map_gen\地图生成器\trans_map
python -m venv venv
.\venv\Scripts\Activate.ps1

安装依赖:

  pip install Pillow

记得要切换

然后用GIMP来获取图像的RGB信息


from PIL import Image

def map_to_matrix(image_path):
    # 打开图像
    img = Image.open(image_path)
    width, height = img.size

    # 创建一个空的矩阵
    matrix = []
    for y in range(height):
        row = []
        for x in range(width):
            # 获取像素颜色
            pixel_color = img.getpixel((x, y))

            # 这里假设海洋是蓝色(可以根据实际情况调整判断条件)
            if pixel_color[0] == 107 and pixel_color[1] == 209 and pixel_color[2] == 231:
                row.append(1)
            else:
                row.append(0)
        matrix.append(row)

    return matrix

def matrix_to_image(matrix):
    # 假设矩阵中的 0 表示陆地(黑色),1 表示海洋(蓝色)
    height = len(matrix)
    width = len(matrix[0])
    img = Image.new('RGB', (width, height))
    pixels = img.load()
    for y in range(height):
        for x in range(width):
            if matrix[y][x] == 0:
                pixels[x, y] = (0, 0, 0)  # 陆地为黑色
            else:
                pixels[x, y] = (0, 0, 255)  # 海洋为蓝色
    return img

matrix = map_to_matrix('1.png')
for row in matrix:
    print(row)

# 假设 matrix 是你已经得到的矩阵
result_image = matrix_to_image(matrix)
result_image.show()  # 显示生成的图像
result_image.save('reconstructed_image.png')  # 保存图像


from PIL import Image
import json

def map_to_matrix(image_path):
    # 打开图像
    img = Image.open(image_path)
    # 等比例缩小图像到 64x64
    img = img.resize((64, 64), Image.LANCZOS)
    width, height = img.size

    # 创建一个空的矩阵
    matrix = []
    for y in range(height):
        row = []
        for x in range(width):
            # 获取像素颜色
            pixel_color = img.getpixel((x, y))

            # 这里假设海洋是蓝色(可以根据实际情况调整判断条件)
            if pixel_color[0] == 110 and pixel_color[1] == 211 and pixel_color[2] == 231:
                row.append(2048)
            else:
                row.append(2816)
        matrix.append(row)

    return matrix

def matrix_to_image(matrix):
    # 假设矩阵中的 0 表示陆地(黑色),1 表示海洋(蓝色)
    height = len(matrix)
    width = len(matrix[0])
    print(height)
    print(width)
    img = Image.new('RGB', (width, height))
    pixels = img.load()
    for y in range(height):
        for x in range(width):
            if matrix[y][x] == 2816:
                pixels[x, y] = (0, 0, 0)  # 陆地为黑色
            else:
                pixels[x, y] = (0, 0, 255)  # 海洋为蓝色
    return img

def flatten_matrix(matrix):
    return [item for row in matrix for item in row]

def add_zeros_to_array(flattened_matrix):
    n = len(flattened_matrix) * 5
    new_array = flattened_matrix + [0] * n
    return new_array

def write_array_to_file(array, file_path):
    # 在数组开头添加"data:"
    data_str = '"data":' + json.dumps(array)
    with open(file_path, 'w') as file:
        file.write(data_str)

matrix = map_to_matrix('1.png')

flattened_matrix = flatten_matrix(matrix)
new_array = add_zeros_to_array(flattened_matrix)
write_array_to_file(new_array, 'output.txt')

# 假设 matrix 是你已经得到的矩阵
result_image = matrix_to_image(matrix)
result_image.show()  # 显示生成的图像
result_image.save('reconstructed_image.png')  # 保存图像

最后改进了一下代码,首先把图像缩放到64X64,这样的地图才能看啊,否则太细节了

之后是加入了把矩阵打平成数组的辅助函数,并且给后面加上了000000

规则在这里

然后生成了outputs.txt


暂时先不解析地图本身

而是用拷贝粘贴的办法

在RMMZ里把玩家初始位置和船的位置一设置好了以后

就可以了开干了


==================================================

1、大陆与海的边缘还不自然,这个再说看咋整

2、地图用谷歌的就有一个麻烦的地方出来了,没办法关掉所有的标记,所以看来得找一张全世界的矢量地图然后裁切号,最后生成

3、上下左右需要生成一堆的事件,让船可以切换地图

这样才能“遨游”世界