1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#mapchip追加の流れ

Last updated at Posted at 2024-10-18

記事全体の目次へ移動

mapchipをトリミングする

スクリーンショット (738).png
スクリーンショット (730).png
スクリーンショット (739).png

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

スクリーンショット (741).png
スクリーンショット (743).png
スクリーンショット (742).png

背景を貼り付ける

スクリーンショット (716).png
スクリーンショット (744).png
スクリーンショット (722).png

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

スクリーンショット (745).png

スクリーンショット (733).png

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



トリミング

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("完了しました")

ファイル名変更

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("ファイル名の変更が完了しました。")

貼り付け

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書き込み

# ファイルを読み込む
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を指定する。
赤い線のところを1にすると、移動可能です。0だと移動不可です。(デフォルトは0です)
 赤い線の隣は、透明な背景があるかどうかです。
スクリーンショット (747) - コピー.png

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

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

OBJECT

人工知能に関する断創録

ドラクエ4のバトランド城を参考にして作ってみました。
スクリーンショット (746).png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?