6-6 補助的な関数群1 成長
同人誌について
この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで288ページの本になります。ぜひ、こちらもご購入ください(2024-03-10:ver1.0.3 に更新)。
説明と全体コード
「src/mymod/data/growth.py」の説明です。経験値や能力の計算をおこなうモジュールです。
ここでは、経験値の獲得とレベルアップ判定、能力値の計算をおこないます。
from . import game # 型ヒント用
# 経験値追加
def add_exp(d: "game.Game", exp: int) -> bool:
d.exp = min(d.exp + exp, 999)
need = [0, 10, 20, 40, 60, 80, 100, 125, 150, 175, 200,
250, 300, 350, 400, 500, 600, 700, 800, 900] # 1~20
level = 0
for i, n in enumerate(need): # 経験値からレベルを計算
if d.exp >= n: level = i + 1
is_up = d.level != level # レベルアップ判定
if is_up:
d.level = level
hp_loss = d.hp_max - d.hp
mp_loss = d.mp_max - d.mp
calc_ability(d) # 能力値の計算
d.hp = d.hp_max - hp_loss # HP回復
d.mp = d.mp_max - mp_loss # MP回復
return is_up
# 能力値の計算
def calc_ability(d: "game.Game"):
# アイテム
i_at = (d.items.sword.count -1) * 20
i_df = (d.items.shield.count -1) * 20
# 基本値の計算
d.at = min(10 + (d.level - 1) * 5 + i_at, 999) # 攻撃力
d.df = min(10 + (d.level - 1) * 5 + i_df, 999) # 防御力
d.hp_max = min(100 + (d.level - 1) * 25, 999) # 最大HP
d.mp_max = min(100 + (d.level - 1) * 25, 999) # 最大MP
インポート部分
まずはインポート部分です。
from . import game # 型ヒント用
型ヒント用に`game`をインポートします。
経験値の獲得とレベルアップ判定
経験値の獲得とレベルアップ判定をおこなう関数です。
# 経験値追加
def add_exp(d: "game.Game", exp: int) -> bool:
d.exp = min(d.exp + exp, 999)
need = [0, 10, 20, 40, 60, 80, 100, 125, 150, 175, 200,
250, 300, 350, 400, 500, 600, 700, 800, 900] # 1~20
level = 0
for i, n in enumerate(need): # 経験値からレベルを計算
if d.exp >= n: level = i + 1
is_up = d.level != level # レベルアップ判定
if is_up:
d.level = level
hp_loss = d.hp_max - d.hp
mp_loss = d.mp_max - d.mp
calc_ability(d) # 能力値の計算
d.hp = d.hp_max - hp_loss # HP回復
d.mp = d.mp_max - mp_loss # MP回復
return is_up
前半は、経験値のリストをもとに、レベルアップの判定をおこないます。
後半は、レベルアップしているときの処理です。減っているHP、MPを記録したあと、能力値を上昇させます。そして、記録したHPとMPの減少値を反映します。
能力値の計算
次は、能力値の計算をおこなう関数です。
# 能力値の計算
def calc_ability(d: "game.Game"):
# アイテム
i_at = (d.items.sword.count -1) * 20
i_df = (d.items.shield.count -1) * 20
# 基本値の計算
d.at = min(10 + (d.level - 1) * 5 + i_at, 999) # 攻撃力
d.df = min(10 + (d.level - 1) * 5 + i_df, 999) # 防御力
d.hp_max = min(100 + (d.level - 1) * 25, 999) # 最大HP
d.mp_max = min(100 + (d.level - 1) * 25, 999) # 最大MP
アイテムの所持やレベルによって、能力値を計算して更新します。
能力値の上限は`999`にします。数字の桁数が変わるとレイアウトが変わるために、3桁で最も大きな数値`999`を上限にしています。
次の内容については省略します。こちらは同人誌をご覧ください。
6-7 補助的な関数群2 ゲーム 入出力
6-8 保存しないデータ1 アクション
同人誌について
この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで288ページの本になります。ぜひ、こちらもご購入ください(2024-03-10:ver1.0.3 に更新)。
このnoteの記事と、Webページに一部抜粋版を掲載しています。
技術系同人誌など まとめページ