diff --git a/src/ImageGenerator.py b/src/ImageGenerator.py new file mode 100644 index 0000000..e48505c --- /dev/null +++ b/src/ImageGenerator.py @@ -0,0 +1,103 @@ +import os +import re +import sys +from enum import Enum + +from PIL import Image + + +# mapファイルのテキストデータを2次元配列に変換するメソッド +def changeList(map_data: list[str]) -> list[list[str]]: + map_list = [] + # 各行を一マスごとに分割して配列に格納 + for i in range(len(map_data)): + if map_data[i] == "": + break + elif map_data[i][0] == "D": + map_list.append(re.split(",|D:|\n", map_data[i])[1:-1]) + # print(map_data[i]) + elif map_data[i][0] == "H": + hot = re.split(",|\n", map_data[i].replace("H:", "")) + elif map_data[i][0] == "C": + cool = re.split(",|\n", map_data[i].replace("C:", "")) + + map_list[int(cool[1])][int(cool[0])] = "C" + map_list[int(hot[1])][int(hot[0])] = "H" + + return map_list + + +# 一つのmapファイルをpngに変換するメソッド +def drawMapImage( + file_name: str, + dir_path: str, +) -> None: + + # 各マスの状態を定義 + class Status(Enum): + FLOOR = "0" + WALL = "2" + ITEM = "3" + HOT = "H" + COOL = "C" + + # mapファイルを開いてmap_dataにテキストを格納、行ごとに配列にする + with open(dir_path + "/" + file_name, "r") as file: + map_data = file.readlines() + + map_list = changeList(map_data) + + # アイコン用の画像を開く + floor = Image.open("./icons/floor.png") + wall = Image.open("./icons/wall.png") + item = Image.open("./icons/item.png") + hot = Image.open("./icons/hot.png") + cool = Image.open("./icons/cool.png") + + icon_size = floor.width + + # 画像の下地を描く + size = (len(map_list[0]) * icon_size, len(map_list) * icon_size) + img = Image.new("RGB", size, (255, 255, 255)) + + # 各マスのデータに応じて画像を敷き詰める + for i in range(len(map_list)): + for j in range(len(map_list[i])): + if Status(map_list[i][j]) == Status.FLOOR: + img.paste(floor, (j * icon_size, i * icon_size)) + elif Status(map_list[i][j]) == Status.WALL: + # 壁 + img.paste(wall, (j * icon_size, i * icon_size)) + elif Status(map_list[i][j]) == Status.ITEM: + # アイテム + img.paste(item, (j * icon_size, i * icon_size)) + elif Status(map_list[i][j]) == Status.COOL: + # cool + img.paste(cool, (j * icon_size, i * icon_size)) + elif Status(map_list[i][j]) == Status.HOT: + # hot + img.paste(hot, (j * icon_size, i * icon_size)) + else: + # それ以外(床) + img.paste(floor, (j * icon_size, i * icon_size)) + + # 画像を保存 + img.save(dir_path + "/map_images/" + file_name.split(".")[0] + ".png") + # img.show("test.png") + + +# 全てのmapファイルをpngに変換するメソッド +def main() -> None: + + dir_path = sys.argv[1] + file_list = os.listdir(dir_path) + + # 画像を格納するディレクトリを作成 + os.mkdir(dir_path + "/map_images") + + for i in range(len(file_list)): + drawMapImage(file_list[i], dir_path) + + +if __name__ == "__main__": + main() diff --git a/src/icons/cool.png b/src/icons/cool.png new file mode 100644 index 0000000..454ba51 Binary files /dev/null and b/src/icons/cool.png differ diff --git a/src/icons/floor.png b/src/icons/floor.png new file mode 100644 index 0000000..d382472 Binary files /dev/null and b/src/icons/floor.png differ diff --git a/src/icons/hot.png b/src/icons/hot.png new file mode 100644 index 0000000..1b27309 Binary files /dev/null and b/src/icons/hot.png differ diff --git a/src/icons/item.png b/src/icons/item.png new file mode 100644 index 0000000..9564720 Binary files /dev/null and b/src/icons/item.png differ diff --git a/src/icons/wall.png b/src/icons/wall.png new file mode 100644 index 0000000..b306641 Binary files /dev/null and b/src/icons/wall.png differ