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

同人誌について

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

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

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


11-9 戦闘1 自分の行動

公開:2024-09-13

説明と全体コード

 「src/mymod/scene_battle/battle/my.py」の説明です。戦闘の計算をおこなうモジュールです。

 自分が攻撃側の場合の計算です。おこなっていることは、次のとおりです。

  1. 選択したメニューが「ESCAPE」なら、逃走判定をおこなう。
  2. 選択したメニューがそれ以外なら、各値を設定する。
  3. MPが足りていなければ、処理を打ち切る。
  4. MPが足りていれば、行動するのでSEを鳴らす。
  5. 回復の場合は計算して結果を返す。
  6. ダメージの場合は計算して結果を返す。
import random
from ... import data
from . import util
# 実行 自分
def exec(action: str) -> data.battle.Res:
res = data.battle.Res(action)
a = data.action
# 逃走
if action == a.ESCAPE:
res.is_escape = True
res.success_escape = random.randrange(2) == 0 # 1/2
return res
# その他の行動
m = data.game.data
e = data.enemy.enemy_now
mp = pow = df = 0
if action == a.SWORD:
pow = m.at
df = e.df
if action == a.FIRE:
res.se = data.audio.MAGIC
n = m.items.fire.count
mp = n * 30
pow = 25 + n * 25
df = e.df // 4
if action == a.HEAL:
res.se = data.audio.HEAL
n = m.items.fire.count
mp = n * 20
pow = 100 + n * 50
# MPが足りているか確認して終了/消費
if m.mp < mp: return res
res.success_mp = True
m.mp -= mp
# 回復の場合
if action == data.action.HEAL:
heal = random.randrange(pow // 2, pow)
m.hp = min(m.hp_max, m.hp + heal)
res.res_num = heal
return res
# ダメージの場合
damage = util.calc_damage(pow, df)
e.hp = max(0, e.hp - damage)
res.res_num = damage
return res

インポート部分

 まずは、インポート部分を示します。

import random
from ... import data
from . import util

 data gameパッケージを読み込みます。

 また、同じ階層のutilモジュールを読み込みます。

自分側の行動の実行1 冒頭処理

 自分側の行動をおこなうexec()関数です。まずは冒頭だけを示します。

# 実行 自分
def exec(action: str) -> data.battle.Res:
res = data.battle.Res(action)
a = data.action

 actionを引数にして、Resクラスのインスタンスを作成して、変数resに代入します。この変数resに、このあとの処理で戦闘結果を格納します。

 またdata.actionモジュールの参照を、変数aに格納します。変数aは、このあとのプログラムを短く書くために使います。

自分側の行動の実行2 逃走

 メニューで選んだ行動が逃走ESCAPEの場合は、逃走の正否を判定します。

# 逃走
if action == a.ESCAPE:
res.is_escape = True
res.success_escape = random.randrange(2) == 0 # 1/2
return res

自分側の行動の実行3 選択メニューによる分岐

 逃走ESCAPE以外の行動を選んだときの処理です。選んだ行動に応じて、計算に使う値を設定します。

# その他の行動
m = data.game.data
e = data.enemy.enemy_now
mp = pow = df = 0
if action == a.SWORD:
pow = m.at
df = e.df
if action == a.FIRE:
res.se = data.audio.MAGIC
n = m.items.fire.count
mp = n * 30
pow = 25 + n * 25
df = e.df // 4
if action == a.HEAL:
res.se = data.audio.HEAL
n = m.items.fire.count
mp = n * 20
pow = 100 + n * 50

自分側の行動の実行4 MP判定

 MPが足りているか確認します。足りていない場合は処理を打ち切ります。

# MPが足りているか確認して終了/消費
if m.mp < mp: return res
res.success_mp = True
m.mp -= mp

自分側の行動の実行5 回復

 選んだ行動が回復HEALの場合の処理です。

# 回復の場合
if action == data.action.HEAL:
heal = random.randrange(pow // 2, pow)
m.hp = min(m.hp_max, m.hp + heal)
res.res_num = heal
return res

 HPを回復して、MPを減らします。そして処理を終了します。

自分側の行動の実行6 ダメージ

 ダメージの計算をして、結果を返します。ダメージの計算はutil.calc_damage()関数でおこないます。

# ダメージの場合
damage = util.calc_damage(pow, df)
e.hp = max(0, e.hp - damage)
res.res_num = damage
return res

 次の内容については省略します。こちらは同人誌をご覧ください。


同人誌について

 この連載は、同人誌『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
ご意見・お問い合わせはサイト情報 弊社への連絡までお願いします
個人情報の取り扱い、利用者情報の外部送信について