見出し画像

9-2 メイン

同人誌について

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

 作成した`data` `game` `image`パッケージを読み込みます。また、配下の`view`パッケージを読み込みます。

定数

 メッセージ用の定数です。メッセージはとりあえずプログラムから分けておいた方がよいです。他言語化をするときに楽になります。

MES_SAVE = "データを\n読み込みました"
MES_FAIL = "データの読み込みに\n失敗しました\n"

SceneTitleクラス

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

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データの読み込みをおこないます。


 次の内容については省略します。こちらは同人誌をご覧ください。

  • 9-3 描画1 キャラクター

  • 9-4 描画2 テキスト


同人誌について

 この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。

 同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。

(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)

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

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


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