6-12 保存しないデータ5 敵
同人誌について
この連載は、同人誌『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, field
from .action import SWORD, ARROW, WIND, DEATH
from .map import PLAIN, FOLEST, MOUNTAIN, CASTLE
# 敵
@dataclass
class 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, field
from .action import SWORD, ARROW, WIND, DEATH
from .map import PLAIN, FOLEST, MOUNTAIN, CASTLE
`dataclass`と`field`を読み込みます。
また、各種定数を`action`と`map`から読み込みます。
敵の設定クラス
敵の設定クラスです。データ クラスで作っています。
# 敵
@dataclass
class 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)にしています。各敵の出現頻度を%で示します。
最後に、現在戦闘中の敵を格納する`enemy_now`変数を用意します。
enemy_now: Enemy # インスタンス格納用
次の内容については省略します。こちらは同人誌をご覧ください。
6-13 保存しないデータ6 シーン
同人誌について
この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)
このnoteの記事と、Webページに一部抜粋版を掲載しています。
技術系同人誌など まとめページ