見出し画像

10-2 メイン

同人誌について

 この連載は、同人誌『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 pygame
from .. import data, game, image
from . 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 pygame
from .. import data, game, image
from . import event, move, view

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

 また、同じ階層の`event` `move`モジュールと、配下の`view`パッケージを読み込みます。

定数

 表示するメッセージの定数です。

MES_SAVE = "データを\n保存しました"

SceneMapクラス

 クラスの作成とコンストラクターまでを示します。

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 に更新)

 このnoteの記事と、Webページに一部抜粋版を掲載しています。

 技術系同人誌など まとめページ


この記事が気に入ったらサポートをしてみませんか?