はじめに
前回は、次のようなプログラムを作りました。
- 補助的なモジュール
- タイトル画面
- マップ画面
今回は、非常に小さなレトロ風RPGを作る続きです。バトル画面を作成します。今回で、短いながらも、タイトル・マップ・バトル画面を行き来するレトロ風RPGが完成します!
バトル画面
バトル画面の作成に入ります。
バトル画面の処理は、s_battle/main.py
モジュールを含めて5つあります。それぞれs_battle
フォルダー内のファイルで、proc.py
は進行の管理、proc_hero.py
は主人公側の処理、proc_enemy.py
は敵側の処理をおこないます。draw.py
は描画をおこないます。
s_battle/ main.py proc.py proc_hero.py proc_enemy.py draw.py
s_battle/main.py
バトル画面の初期化と更新をおこなうs_battle/main.py
モジュールです。
import data, enemy, audio from . import proc, draw # 初期化 def init(): data.proc = "menu" # 進行 data.menu_sel = 0 # メニュー選択位置 if enemy.boss: audio.play(audio.BATTLE_LAST) # ラスボス戦闘BGM再生 else: audio.play(audio.BATTLE) # 通常戦闘BGM再生 # 更新 def update(): draw.render() # 描画 proc.manage() # 進行管理
インポート部分では、data, enemy, audio
を読み込みます。また、同じパッケージの階層からproc, draw
モジュールを読み込みます。
初期化をおこなうinit()
関数では、進行data.proc
を"menu"
にして、メニューの選択位置data.menu_sel
を0
(一番上)にします。
BGMの再生は、ラスボスのときと通常のときで分岐します。enemy.boss
がTrue
なら、ラスボス戦闘用のBGMを再生します。False
なら、通常戦闘用のBGMを再生します。
更新をおこなうupdate()
関数では、描画と進行管理を実行します。
s_battle/proc.py
進行を管理するs_battle/proc.py
モジュールです。
import pygame, data from . import proc_hero, proc_enemy # 進行管理 def manage(): if data.proc == "menu": if data.key["down"] == pygame.K_SPACE: # メニュー決定 proc_hero.start() # 自開始 elif data.key["down"] == pygame.K_DOWN: # メニュー下移動 data.menu_sel += 1 if data.menu_sel >= len(data.menu_texts): data.menu_sel = 0 elif data.key["down"] == pygame.K_UP: # メニュー上移動 data.menu_sel -= 1 if data.menu_sel < 0: data.menu_sel = len(data.menu_texts) - 1 elif data.proc == "hero_draw": proc_hero.draw() # 自描画 elif data.proc == "enemy_start": proc_enemy.start() # 敵開始 elif data.proc == "enemy_draw": proc_enemy.draw() # 敵描画
インポート部分ではpygame, data
を読み込みます。また、同じパッケージの階層からproc_hero, proc_enemy
モジュールを読み込みます。
進行管理をおこなうmanage()
関数では、data.proc
の値によって呼び出す処理を変えます。
data.proc | 処理 | 内容 |
---|---|---|
"menu" | メニュー決定後 proc_hero.start() | 自分の処理開始 |
"hero_draw" | メニュー決定後 proc_hero.start() | 自分の描画 |
"enemy_start" | proc_enemy.start() | 敵の処理開始 |
"enemy_draw" | proc_enemy.draw() | 敵の描画 |
このモジュールの処理の中で説明が必要なのは、data.proc
が"menu"
のときの処理だけです。スペース キーを押すと決定です。上下の矢印キーを押すと選択位置が上下に動いてループします。
data.menu_texts
はメニューのテキストのリストです。len(data.menu_texts)
でメニューの項目数を得て、判定に利用します。