この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)
「src/mymod/scene_title/main.py」の説明です。game.scene.Scene
を継承したクラスです。シーンの内容を定義します。
import pygamefrom .. import data, game, imagefrom . import view
MES_SAVE = "データを\n読み込みました"MES_FAIL = "データの読み込みに\n失敗しました\n"
class SceneTitle(game.scene.Scene): NAME = data.scene.TITLE
def __init__(self): self.sprites = pygame.sprite.RenderUpdates() # 描画更新用 c1, c2 = view.chara.init() # キャラの初期化 c1.add(self.sprites) c2.add(self.sprites) game.audio.play_bgm(data.audio.FIELD) # BGM再生
# 更新 async def update(self, screen: pygame.Surface, e: game.event.GEvent): self.sprites.update() # スプライト更新 self.sprites.draw(screen) # スプライト描画 view.text.draw(screen) # テキストの描画
# 選択キー → シーン変更 if e.key_down == game.event.K_SEL: game.scene.Manager.set_next(data.scene.MAP)
# オプション キー → データ読み込み if e.key_down == game.event.K_OPT: res = data.io.load() mes = MES_SAVE if res == "" else MES_FAIL + res await image.dialog.a_show(mes)
まずはインポート部分を示します。
import pygamefrom .. import data, game, imagefrom . import view
作成したdata
game
image
パッケージを読み込みます。また、配下のview
パッケージを読み込みます。
メッセージ用の定数です。メッセージはとりあえずプログラムから分けておいた方がよいです。他言語化をするときに楽になります。
MES_SAVE = "データを\n読み込みました"MES_FAIL = "データの読み込みに\n失敗しました\n"
クラスの作成をコンストラクターのところまで示します。
class SceneTitle(game.scene.Scene): NAME = data.scene.TITLE
def __init__(self): self.sprites = pygame.sprite.RenderUpdates() # 描画更新用 c1, c2 = view.chara.init() # キャラの初期化 c1.add(self.sprites) c2.add(self.sprites) game.audio.play_bgm(data.audio.FIELD) # BGM再生
NAME
を設定します。NAME
はシーンの切り替えで必要です。
次にコンストラクターを書きます。コンストラクターでは、画像の初期化をします。タイトル画面に表示する主人公c1
と、魔王c2
のスプライトに対して、add()
関数を実行します。add()
関数では、描画更新用のスプライトself.sprites
を設定します。
最後にBGMを再生します。
続いて、更新をおこなうupdate()
メソッドです。
# 更新 async def update(self, screen: pygame.Surface, e: game.event.GEvent): self.sprites.update() # スプライト更新 self.sprites.draw(screen) # スプライト描画 view.text.draw(screen) # テキストの描画
# 選択キー → シーン変更 if e.key_down == game.event.K_SEL: game.scene.Manager.set_next(data.scene.MAP)
# オプション キー → データ読み込み if e.key_down == game.event.K_OPT: res = data.io.load() mes = MES_SAVE if res == "" else MES_FAIL + res await image.dialog.a_show(mes)
まずは、スプライトとテキストの描画をおこないます。
その後、選択キー(Space、Return)を押したときのシーン遷移と、オプション キー(k)を押した時のJSONデータの読み込みをおこないます。
次の内容については省略します。こちらは同人誌をご覧ください。
この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)