概要
今回は、画面更新時の残像が残る問題を解決しました。
原因については、画面の更新管理不備で、イベントによる画面の更新と敵遭遇による更新があって、
また、スプライトには慣れていないせいもあって、エラー続出で時間がかかってしまった。
Battleクラス
このコードは、PyGame を使用して戦闘システムを実装したクラス Battle
を示しています。戦闘中の画面描画、敵とのやり取り、プレイヤーステータスの表示、ボタンを介したユーザー入力などを管理しています。
全体の構造
目的
- 戦闘画面を構築し、敵の表示、コマンドの選択、メッセージの表示を管理します。
1. 初期化部分 (__init__
メソッド)
主な初期化内容
-
背景画像の設定
背景画像をロードし、画面サイズに合わせてスケールします。 -
オフセット計算
背景画像を中央に配置するためにオフセットを設定します。 -
フォントの設定
メッセージ表示用にフォントを指定します。 -
ボタンの初期化
主なコマンド(「攻撃」「魔法」「逃げる」)とサブコマンド(「ホイミ」「メラ」「ヒャド」)のボタンを作成します。各ボタンにはクリック時の動作を関連付けます。 -
プレイヤーステータス管理
PlayerStatus
クラスを使用してプレイヤーのHP、MPなどのステータスを管理します。 -
テキスト表示管理
TextSprite
クラスを使用してメッセージの描画と管理を行います。
2. 背景描画 (draw_background
メソッド)
- 画面を黒で塗りつぶした後、背景画像を描画します。
- 背景画像の位置はオフセットを適用して調整します。
3. 描画処理 (draw
メソッド)
- 敵の画像を設定し、敵が出現したことを示すメッセージを追加します。
- 画面全体を描画するため、
render_scene
メソッドを呼び出します。
4. シーン描画 (render_scene
メソッド)
- 背景、敵、メッセージエリア、ボタン、プレイヤーステータスを一括で描画します。
- 各描画は専用のメソッドに分割されています。
5. メッセージ管理 (set_message
メソッド)
- メッセージリストが5件を超えた場合、古いメッセージを削除します。
- 各メッセージに空白を追加し、改行で結合して返します。
6. メッセージ描画 (draw_text
メソッド)
-
TextSprite
クラスを使ってメッセージを描画します。
7. テキストエリア描画 (draw_background_text_area
メソッド)
- メッセージエリアを描画します。
- 半透明の青色背景を設定。
- エリアの境界線を白色で描画します。
8. メニュー描画 (draw_menu_backgroud
メソッド)
- 左側にあるコマンドメニュー部分の背景を描画します。
9. ボタン描画 (draw_buttons
メソッド)
- 現在表示中のコマンドボタン(メインまたはサブコマンド)をすべて描画します。
10. コマンド切り替え
show_main_commands
- メインコマンド(「攻撃」「魔法」「逃げる」)を表示するため、ボタンリストを切り替えます。
show_sub_commands
- サブコマンド(「ホイミ」「メラ」「ヒャド」)を表示するため、ボタンリストを切り替えます。
11. マウスイベント処理 (handle_mouse_event
メソッド)
- マウスクリックイベントを処理します。
- 現在表示中のボタンの中でクリックされたものを特定し、対応するアクションを実行します。
12. 各ボタンのアクション
-
attack
: 「攻撃」を選択した際、メッセージリストに「攻撃」を追加。 -
escape
: 「逃げる」を選択した際、メッセージリストに「逃げる」を追加。 -
hoimi
: 「ホイミ」を選択した際、メッセージリストに「ホイミ」を追加し、メインコマンドに戻る。 -
mera
: 「メラ」を選択した際、メッセージリストに「メラ」を追加し、メインコマンドに戻る。 -
hyado
: 「ヒャド」を選択した際、メッセージリストに「ヒャド」を追加し、メインコマンドに戻る。
コードのポイント
-
メッセージと描画の管理
- メッセージリスト (
battle_message
) を用いてログを管理。 - 描画処理を複数のメソッドに分割して、コードの可読性を向上。
- メッセージリスト (
-
コマンドシステム
- メインコマンドとサブコマンドを切り替える柔軟な仕組み。
-
ユーザー入力の処理
- マウスイベントをボタン単位で処理し、クリック時の動作を関連付け。