＃mapchip追加の流れ


[記事全体の目次へ移動](https://qiita.com/hijpa/items/056acaa13e935590fdc2)


mapchipをトリミングする

![スクリーンショット (738).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/21bacaa6-4e66-a15e-3a79-c414b9ec9cd6.png)
![スクリーンショット (730).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/f842a04f-78ec-a970-1aba-a38a05085bc2.png)
![スクリーンショット (739).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/72020e2b-0e1b-eecb-6bad-8099003d8790.png)


必要なmapchipを選び出す
ファイル名を変更する
(番号を揃えます。あとでmapchip.datファイルにまとめて書き込むためです)

![スクリーンショット (741).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/4cc651ef-f77b-0f7e-f0ed-6a62716a1ac3.png)
![スクリーンショット (743).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/1e537653-d28f-275a-603e-30a2e15e0c82.png)
![スクリーンショット (742).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/db816eee-ee98-b180-6427-3c5caf4da137.png)



背景を貼り付ける

![スクリーンショット (716).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/08716707-4d9e-da83-b8fd-23f6b2d0b872.png)
![スクリーンショット (744).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/b073deb4-12cb-1160-9b9f-5baa6d6f56e4.png)
![スクリーンショット (722).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/c93b5cb0-ca6e-0de4-6c02-1b34ac0cdf96.png)


mapchipフォルダーに移動させる
mapchip.datに書き込む

![スクリーンショット (745).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/fcffd077-b0af-e20b-69c8-4983383564ef.png)

![スクリーンショット (733).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/df0c1e17-2ecd-da3b-4347-6aed4f687b2d.png)

画像ID番号は上にある番号のつづきになります。
上にあるのは、５７６なので５７７を入力します。

***
***

トリミング

```python
import cv2
import numpy as np
import os

# スクリプトが存在するフォルダのパスを取得
file_path = os.path.dirname(os.path.abspath(__file__))
file_name = input("ファイル名: ")
num = input("最初の番号: ")

# タイルのサイズ
GS = 32

# フォルダ内のすべてのファイルを処理
for filename in os.listdir(file_path):
    if filename.endswith(".png"):
        # 元画像のパスを指定
        input_img = cv2.imread(os.path.join(file_path, filename), cv2.IMREAD_UNCHANGED)
        
        # 元画像の高さ、幅を取得
        height, width = input_img.shape[:2]
        
        # タイルの数を計算
        num_tiles_y = height // GS
        num_tiles_x = width // GS
        
        # 背景色を指定（透明）
        background_color = (0, 0, 0, 0)
        
        for y in range(num_tiles_y):
            for x in range(num_tiles_x):
                # トリミングする範囲を指定
                output_img = input_img[y*GS:(y+1)*GS, x*GS:(x+1)*GS]
                
                # 背景色を設定
                bg_img = np.full((GS, GS, 4), background_color, dtype=np.uint8)
                bg_img[0:output_img.shape[0], 0:output_img.shape[1], :3] = output_img[:, :, :3]
                bg_img[0:output_img.shape[0], 0:output_img.shape[1], 3] = output_img[:, :, 3]
                
                # ファイル名
                filename_trimmed = f'{file_name}{num}.png'
                
                # トリミングした画像を新しいファイルに保存
                cv2.imwrite(os.path.join(file_path, filename_trimmed), bg_img)
                
                num = int(num)
                num += 1
                num = str(num)

print("完了しました")

```

ファイル名変更

```python
import os

# フォルダのパスを指定
#folder_path = input("フォルダー名: ")

folder_path = os.getcwd()

# フォルダ内のファイル一覧を取得
file_list = os.listdir(folder_path)
new_name = input("新しいファイル名: ")
k = input("最初の番号: ")
# ファイル名を変更
for i, file_name in enumerate(file_list):
    if file_name.endswith('.png'):
        # フルパスを作成
        old_file = os.path.join(folder_path, file_name)
        # ファイル名を変更
        os.rename(old_file,f"{new_name}{k}.png")
        k = int(k)
        k += 1
        k = str(k)

print("ファイル名の変更が完了しました。")

```

貼り付け

```python
from PIL import Image

filename1 = input("下地ファイル名: ")
filename2 = input("貼り付けファイル名: ")
k = input("最初の番号: ")
num = int(input("画像の数: "))


for i in range(num):
    # 画像を読み込む
    background = Image.open(f"{filename1}.png")
    overlay = Image.open(f"{filename2}{k}.png")

    overlay = overlay.convert("RGBA")

    # 貼り付ける位置を指定（例：左上に貼り付け）
    position = (0, 0)

    # 画像を貼り付ける
    background.paste(overlay, position, overlay)

    # 結果を保存
    background.save(f"{filename2}{k}.png")

    k = int(k)
    k += 1
    k = str(k)

print("完了しました")

```

mapchip.dat書き込み

```python
# ファイルを読み込む
with open('mapchip.dat', 'r') as file:
    data = file.read()

# 読み込んだデータを表示（必要に応じて）
print("元のデータ:")
print(data)


j = int(input("画像ID番号: "))
name = input("ファイル名: ")
k = int(input("最初の番号: "))
num = int(input("画像の数: "))


for i in range(num):

    text_message = f"{j},{name}{k},0,0\n"

    # 書き込みたい文字列を指定
    text_to_write = text_message

    # 変更したデータを新しいファイルに書き込む
    with open('mapchip.dat', 'a') as file:
        file.write(text_to_write)

    j += 1        
    k += 1
        

with open('mapchip.dat', 'r') as file:
    data = file.read()

# 書き込んだデータを表示（必要に応じて）
print("新しいデータ:")
print(data)

print("完了しました。")

```

　移動可能なmapchipを指定する。
赤い線のところを１にすると、移動可能です。０だと移動不可です。(デフォルトは０です)
　赤い線の隣は、透明な背景があるかどうかです。
![スクリーンショット (747) - コピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/384df495-f9e1-cb7c-e5f1-f9fb4fad79b1.png)

　この記事に載せているトリミングのコードを使った場合、
ぴぽや倉庫さんの画像をOBJECTとして描画するには
赤い線の隣の０を、１にして、
~~TRANS_COLOR = (0,0,0)　にします。~~
黒だとよく使われる色なのでうまくいかないような気がしてきました。

　OBJECTについてはaidiaryさんの記事を読まないといけません。
いきなりOBJECTといわれても意味が分からないと思うので、最初からaidiaryさんの記事を読むとよいです。

[OBJECT](https://aidiary.hatenablog.com/entry/20080720/1281173329)

[人工知能に関する断創録](https://aidiary.hatenablog.com/archive/category/Pygame?page=3)

ドラクエ４のバトランド城を参考にして作ってみました。
![スクリーンショット (746).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/6ed57bc0-7338-33b5-aea4-1e199383375d.png)