 
      
      
この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)
 「src/mymod/scene_map/main.py」の説明です。game.scene.Sceneを継承したクラスです。
import pygamefrom .. import data, game, imagefrom . import event, move, view
MES_SAVE = "データを\n保存しました"
class SceneMap(game.scene.Scene):    NAME = data.scene.MAP
    def __init__(self):        self.sprites = pygame.sprite.RenderUpdates()    # 描画更新用        self.map = image.map.Map()  # マップの初期化        self.map.add(self.sprites)  # グループ設定        c = view.chara.init()   # キャラの初期化        c.add(self.sprites)     # グループ設定
        view.view.init()    # 表示初期化        move.init()     # 移動初期化        event.init()    # イベント初期化        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.view.draw(screen)      # 全描画
        await move.manage_move(e.key_keep)  # 移動管理
        # オプション キー → データ保存        if e.key_down == game.event.K_OPT:            data.io.save()            await image.dialog.a_show(MES_SAVE)まずはインポート部分を示します。
import pygamefrom .. import data, game, imagefrom . import event, move, view data game imageパッケージを読み込みます。
 また、同じ階層のevent moveモジュールと、配下のviewパッケージを読み込みます。
表示するメッセージの定数です。
MES_SAVE = "データを\n保存しました"クラスの作成とコンストラクターまでを示します。
class SceneMap(game.scene.Scene):    NAME = data.scene.MAP
    def __init__(self):        self.sprites = pygame.sprite.RenderUpdates()    # 描画更新用        self.map = image.map.Map()  # マップの初期化        self.map.add(self.sprites)  # グループ設定        c = view.chara.init()   # キャラの初期化        c.add(self.sprites)     # グループ設定
        view.view.init()    # 表示初期化        move.init()     # 移動初期化        event.init()    # イベント初期化        game.audio.play_bgm(data.audio.FIELD)  # BGM再生 NAMEを設定します。NAMEはシーンの切り替えで必要です。
 コンストラクターでは、このシーン用の各種モジュールを初期化します。マップはimageパッケージで作成したmap.Mapクラスを利用します。キャラクターは、view.chara.init()関数の戻り値のスプライトを利用します。
その他の表示や、移動、イベントの初期化をします。そして最後に、フィールドのBGMを再生します。
 続いて、更新をおこなうupdate()メソッドです。
    # 更新    async def update(self, screen: pygame.Surface, e: game.event.GEvent):        self.sprites.update()       # スプライト更新        self.sprites.draw(screen)   # スプライト描画        view.view.draw(screen)      # 全描画
        await move.manage_move(e.key_keep)  # 移動管理
        # オプション キー → データ保存        if e.key_down == game.event.K_OPT:            data.io.save()            await image.dialog.a_show(MES_SAVE)各種の描画をおこなったあと、移動管理をおこない、データ保存のキー操作の処理をおこないます。
 一番重要なのは、await move.manage_move()の移動管理です。移動を管理するとともに、到着マスでのイベント管理もおこないます。
この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)