見出し画像

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ページに一部抜粋版を掲載しています。

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


この記事が気に入ったらサポートをしてみませんか?