RPGのキャラクターが「毒を食らった」「火傷を負った」などの状態をどのように管理するのが効率的なのだろうか?
isPoisnとかisBurnなどという倫理型変数を作ってTrue、Flaseで管理してもいいのだが、増えすぎると変数が増えまくって困る気がする。
そういえば、昔ビット演算を習ったときにゲームなどの状態管理に使えると聞いたことを思い出した。
Unityのご時世にC言語的な手法が未だに通用するのか?ネットで調べてみるとQiitaにビット演算の記事がいくつか載っていた。とりあえず実践してみて実用性があるのか確認してみよう。
それにしても地味な実験だ😂
#定数っぽく定義
STAT_POISON = 0b00000001 #毒状態
STAT_BURN = 0b00000010 #火傷状態
#演算
a = 0b00000000 #無フラグ状態
a |= STAT_POISON #フラグ付与
a |= STAT_BURN #フラグ付与
a = a & ~STAT_POISON #フラグ削除
a = a ^ STAT_POISON #フラグ反転
a = a ^ STAT_POISON #フラグ反転
#フラグ判定
if a & STAT_POISON:
print(u"毒状態")
else:
print(u"毒状態ではない")
if a & STAT_BURN:
print(u"火傷状態")
else:
print(u"火傷状態ではない")
#桁数の実験。Long型の最大値は無限かも?
b = 0b10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
print(b)
print(type(b))