【疑似3DダンジョンRPG開発日誌 06】3500行超のコードを4ファイルに分割しました
Pyxelで疑似3DダンジョンRPG「グラヴェンの傷跡」を作っています。 今回はひとつのファイルに詰め込んでいたコードを整理した記録です。
dungeon_rpg.py が3500行を超えてきた
開発を続けるうちに、最初は1ファイルで管理していた dungeon_rpg.py が どんどん膨らんでいきました。
マップデータ
ゲームの定数
キャラクター・スキル・アイテムなどのデータ辞書
ユーティリティ関数
Player / Party / Enemy / Battle クラス
DungeonRPG クラス(描画・入力・シーン管理)
全部が1ファイルに入っている状態だと、 「スキルを直したいのにどこにあるかわからない」 「敵データを変えたいのに…」 というストレスが増えてきました。
方針:役割ごとに4つに分ける
コメントで6ブロックに整理されていたので、それに沿って分割することに。
data.py → マップ・定数・全ゲームデータ(辞書類)
utils.py → ユーティリティ関数
models.py → Player / Party / Enemy / Battle クラス
dungeon_rpg.py → DungeonRPG クラス(メイン)+起動の1行
ポイントは一気にやらないこと。 1ファイルずつ切り出してそのたびに動作確認する、という手順で進めました。
1.data.py を作る
マップデータ・定数・CHAR_DATA / SKILL_DATA / ENEMY_DATA などの データ辞書を全部 data.py に移動しました。
# data.py の先頭
import copy
dungeon_rpg.py 側はこの1行を追加して、元のデータ定義を削除しました。
from data import * # ← 追加
from data import * と書くと、data.py の中身を全部取り込めます。 なのでコード上は何も変えなくていいので楽でした。
2.utils.py を作る
is_wall() / get_view_data() / to_fullwidth() / print_view_debug() の 4つの関数を utils.py に移動しました。
# utils.py の先頭
from data import * # MAP_W、DOORS などを参照するため
utils.py は内部で data.py を参照しています。 dungeon_rpg.py 側では from utils import * を追加。
3.models.py を作る
Player / Party / Enemy / Battle の4クラスを models.py に移動しました。
# models.py の先頭
import random
from data import * # CHAR_DATA, SKILL_DATA, ITEM_DATA などを使用
# dungeon_rpg.py 側
from models import * # ← 追加
結果:こうなった
data.py 645行 マップ・定数・全ゲームデータ
utils.py 100行 ユーティリティ関数4つ
models.py 550行 Player / Party / Enemy / Battle
dungeon_rpg.py 約2000行 DungeonRPGクラス(描画・入力)
元の3500行超の1ファイルが、役割ごとに4分割できました。
やってみてわかったこと
4ファイル分を一気に作ってしまうと、エラーが出たときにどこが原因かわかりません。 1ファイル作るたびに「ゲームが動くか確認する」を繰り返すことで、 安心して進められました。
ファイルを分けるタイミング
1ファイルが2000行を超えてきたあたりが分割の目安だと実感しました。 それより早いと逆に管理が面倒になる気がします。もう少し早くやっておけばよかったです。
今後の構成
今のところ dungeon_rpg.py 自体はまだ2000行ありますが、 ここには「DungeonRPGクラス」という1つのクラスしか入っていないので しばらくはこのままで進める予定です。
ようやく気になっていた部分を整理できたので、今後はゲームの中身の実装に集中します!
いいなと思ったら応援しよう!
もし記事が参考になったり、開発を応援してもいいと思ってくれた方がいたら、noteのサポートをいただけると次の記事を書く原動力になります。もちろん読んでくれるだけで十分嬉しいです。