PythonとPygameで作る レトロ風RPG 全コード

同人誌について

 この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。

 同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。

(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)


6-12 保存しないデータ5 敵

公開:2024-04-02

説明と全体コード

 「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

 dataclassfieldを読み込みます。

 また、各種定数をactionmapから読み込みます。

敵の設定クラス

 敵の設定クラスです。データ クラスで作っています。

# 敵
@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)にしています。各敵の出現頻度を%で示します。

出現頻度
出現頻度 計算式
ゴブリン 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 に更新)

 技術系同人誌など まとめページ


トップページに戻る
Cronus Crown(クロノス・クラウン)のトップページに戻る
(c)2002-2024 Cronus Crown (c)1997-2024 Masakazu Yanai
ご意見・お問い合わせはサイト情報 弊社への連絡までお願いします
個人情報の取り扱い、利用者情報の外部送信について