見出し画像

定数定義での連番ダブりを根絶するためにオートを!!!!

pythonでは大文字の変数を定数定義とするのが慣習となってます(たぶん)

ゲーム全体の色んな場面(ここではシーンと呼びます)を定数定義した後self.game_statusに代入しています

そして「今現在ゲームがどのような状態なのか?」を調べたい時は
if文でself.game_statusの中身を見て分岐させるのが定石なのですが・・・

よくあるバグに「複数の変数に同じ数値を割り当ててしまう!」というのがあります


435行目と436行目!!!!!!!うぉおおおおお!!!!!
はい!ここでバグ入りましたぁ!!!

上のプログラムファイルはいろんな種類のウィンドウにIDナンバーを持たすために定数定義を行っているのですが
見事にWINDOW_ID_GAME_OVER_RETURNと
   WINDOW_ID_GAME_OVER_RETURN_NO_SAVEに全く同じ数値8を代入して定義をするミスを犯しております

これ・・・コピペとかの処理でミスったとおもうんだけれども、
このバグ見つけにくいんだよね

そこで登場するのが「列挙型でautoを使用!するべし!」なのです!!!

ゲーム全体のステータスを単純に連番で定数定義したものを

ゲーム全体のステータスを単純に連番で定数定義したものをこのように


新たにScene(IntEnum)でSceneクラスを作製します
そしてそのクラスの大文字変数に
   大文字変数 = auto()で定数定義していきます
数値を指定しなくて良いので便利ですね~~~~☆彡

(IntEnum)だと内部では整数の連番で定義されてるのかな?良く判らない・・・

ただ、デバッグパラメーターの確認などでself.game_statusの中身を表示した時にこのままだと「Scene.TITLE_INIT」と表示されちゃって画面を占有しちゃうので


#ゲームステータス (ゲームの状態)の表示
status_str = str(self.game_status) 
rindex = status_str.rfind(".")
new_status_str = status_str[rindex + 1:]
pyxel.text(0,8,str(new_status_str),pyxel.COLOR_LIGHT_BLUE) 

 #ゲームステータス (ゲームの状態)の表示
status_str = str(self.game_status)
rindex = status_str.rfind(".")
new_status_str = status_str[rindex + 1:]
pyxel.text(0,8,str(new_status_str),pyxel.COLOR_LIGHT_BLUE) 

こんな感じでテキストを整形するのが良いかもしれないです、ハイ


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