Skip to content

Instantly share code, notes, and snippets.

@cacapon
Created January 5, 2021 05:43
Show Gist options
  • Save cacapon/af4f0b133f27d9cf14c9d0af62d1ba0d to your computer and use it in GitHub Desktop.
Save cacapon/af4f0b133f27d9cf14c9d0af62d1ba0d to your computer and use it in GitHub Desktop.
ゲームシーンを辞書型で保持することで、if文を無くしました。
from enum import Enum, auto
import pyxel
class GAMEMODE(Enum):
# 画面のシーンをEnumで定義します
Title = auto()
Main = auto()
End = auto()
class App:
def __init__(self):
pyxel.init(200, 200)
self.my_gamemode = GAMEMODE.Title # 最初に表示したいシーンを初期値に設定します。
self.scene = {
GAMEMODE.Title: TitleScene(),
GAMEMODE.Main: MainScene(),
GAMEMODE.End: EndScene(),
}
pyxel.run(self.update, self.draw)
def update(self):
# 現在選択されているシーンのupdateを読み込みます。
self.my_gamemode = self.scene[self.my_gamemode].update()
def draw(self):
# こちらでは,画面の描画処理を行っています。
pyxel.cls(0) # 一旦画面を真っ新にしています。前書いていた映像が残ってしまうので
self.scene[self.my_gamemode].draw()
# 各シーンの描画
# updateではスペースキーを押されたら次のシーンに行く処理を行っています
class TitleScene():
def update(self):
# ここでタイトル画面で行うロジックを構成していきます
if pyxel.btnp(pyxel.KEY_SPACE):
return GAMEMODE.Main
else:
return GAMEMODE.Title
def draw(self):
# タイトル画面の描画です
pyxel.text(75, 0, "cacapon RPG!", 14)
class MainScene():
def update(self):
# 作りはほぼ同じ、ここはメインのゲーム画面のロジックです
if pyxel.btnp(pyxel.KEY_SPACE):
return GAMEMODE.End
else:
return GAMEMODE.Main
def draw(self):
# メインのゲーム画面の描画です
pyxel.text(75, 0, "now playing...", 14)
class EndScene():
def update(self):
# 作りはほぼ同じ、ここはゲームオーバー画面やゲームクリア画面に当たるロジックを想定しています。
if pyxel.btnp(pyxel.KEY_SPACE):
return GAMEMODE.Title
else:
return GAMEMODE.End
def draw(self):
# ゲームクリア及びゲームオーバーに相当する画面です。
pyxel.text(60, 0, "thank you for playing!", 14)
App()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment