見出し画像

11-3 進行1 メニュー

同人誌について

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

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

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


説明と全体コード

 「src/mymod/scene_battle/proc/menu.py」の説明です。メニュー操作を管理するモジュールです。

from ...game import event
from .. import main  # 型ヒント用
from . import my

# メニュー管理
async def manage(p: "main.SceneBattle", e: event.GEvent):
    # メニュー決定
    if e.key_down == event.K_SEL:
        await my.start(p)    # 自アクション開始
        return

    # メニュー選択(上下ループ)
    if e.key_down == event.K_DOWN: p.menu.sel += 1
    if e.key_down == event.K_UP:   p.menu.sel -= 1
    max = len(p.menu.texts)
    if p.menu.sel < 0 : p.menu.sel = max - 1
    if p.menu.sel >= max : p.menu.sel = 0

インポート部分

 まずはインポート部分を示します。

from ...game import event
from .. import main  # 型ヒント用
from . import my

 型ヒント用に`main`(src/mymod/scene_battle/main.py)を読み込みます。

 自分の行動を実行するための`my`を読み込みます。

メニューを管理

 メニューを管理する`manage()`関数です。

# メニュー管理
async def manage(p: "main.SceneBattle", e: event.GEvent):
    # メニュー決定
    if e.key_down == event.K_SEL:
        await my.start(p)    # 自アクション開始
        return

    # メニュー選択(上下ループ)
    if e.key_down == event.K_DOWN: p.menu.sel += 1
    if e.key_down == event.K_UP:   p.menu.sel -= 1
    max = len(p.menu.texts)
    if p.menu.sel < 0 : p.menu.sel = max - 1
    if p.menu.sel >= max : p.menu.sel = 0

 `main.SceneBattle`オブジェクトを引数`p`として受け取ります。`p`を使うことで、`main.SceneBattle`内で`self`配下に書いていた値が全て使えます。

 選択キーを押すと自分の行動を開始します。

 上下キーを押すと、選択位置を変えます。

 選択メニューは上下でループします。一番上で上を押すと、一番下に移動します。一番下で下を押すと、一番上に移動します。


同人誌について

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

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

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

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

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


いいなと思ったら応援しよう!