この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、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
を上限にしています。
次の内容については省略します。こちらは同人誌をご覧ください。
この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)