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

同人誌について

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

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

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


6-6 補助的な関数群1 成長

公開:2024-03-25

説明と全体コード

 「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 に更新)

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


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