この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)
「src/mymod/data/enemy.py」の説明です。敵の設定クラスと、敵のデータです。
from dataclasses import dataclass, fieldfrom .action import SWORD, ARROW, WIND, DEATHfrom .map import PLAIN, FOLEST, MOUNTAIN, CASTLE
# 敵@dataclassclass Enemy: name: str # 名前 rate: int # 出現頻度 1/rate land: int # 出現土地 img_nums: list[int] # 画像参照位置のリスト hp_max: int # 最大HP at: int # 攻撃力 df: int # 防御力 action: str # 行動 is_last: bool = False # 最終ボス boolean hp: int = field(init = False) # HP
def __post_init__(self): self.hp = self.hp_max # HP
ENEMIES = [ # 出現頻度 出現土地 画像参照 HP 攻撃 防御 攻撃種 ボス Enemy("ゴブリン", 15, PLAIN, [2, 3], 40, 20, 5, SWORD), Enemy("エルフ", 10, FOLEST, [4, 5], 60, 30, 10, ARROW), Enemy("ロック", 5, MOUNTAIN, [6, 7], 200, 40, 30, WIND), Enemy("魔王", 1, CASTLE, [8, 9, 10, 11], 999, 99, 99, DEATH, True)]
enemy_now: Enemy # インスタンス格納用
まずはインポート部分です。
from dataclasses import dataclass, fieldfrom .action import SWORD, ARROW, WIND, DEATHfrom .map import PLAIN, FOLEST, MOUNTAIN, CASTLE
dataclass
とfield
を読み込みます。
また、各種定数をaction
とmap
から読み込みます。
敵の設定クラスです。データ クラスで作っています。
# 敵@dataclassclass Enemy: name: str # 名前 rate: int # 出現頻度 1/rate land: int # 出現土地 img_nums: list[int] # 画像参照位置のリスト hp_max: int # 最大HP at: int # 攻撃力 df: int # 防御力 action: str # 行動 is_last: bool = False # 最終ボス boolean hp: int = field(init = False) # HP
def __post_init__(self): self.hp = self.hp_max # HP
hp
はあとで設定するのでfield(init = False)
としています。hp
は、初期化後に自動で呼び出されるメソッド__post_init__()
内で初期化します。
敵のデータです。Enemy
クラスを利用して作ります。
ENEMIES = [ # 出現頻度 出現土地 画像参照 HP 攻撃 防御 攻撃種 ボス Enemy("ゴブリン", 15, PLAIN, [2, 3], 40, 20, 5, SWORD), Enemy("エルフ", 10, FOLEST, [4, 5], 60, 30, 10, ARROW), Enemy("ロック", 5, MOUNTAIN, [6, 7], 200, 40, 30, WIND), Enemy("魔王", 1, CASTLE, [8, 9, 10, 11], 999, 99, 99, DEATH, True)]
ゴブリン、エルフ、ロック、魔王を用意しています。それぞれ、出現する地形が異なります。
魔王は最終ボスです。CASTLE
で必ず遭遇するので、出現頻度を1
(1/1)にしています。各敵の出現頻度を%で示します。
敵 | 出現頻度 | 計算式 | % |
---|---|---|---|
ゴブリン | 15 | 1/15 | 6.6% |
エルフ | 10 | 1/10 | 10% |
ロック | 5 | 1/5 | 20% |
魔王 | 1 | 1/1 | 100% |
最後に、現在戦闘中の敵を格納するenemy_now
変数を用意します。
enemy_now: Enemy # インスタンス格納用
次の内容については省略します。こちらは同人誌をご覧ください。
この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)