Pythonのマップエディター(Quoyle)の読み込みツールを作りながら、
ISLeさんの助言を頼りにパックマン風の方向転換を実装した。
ビット演算子さまさまだね!
# 当たり判定。その方向にブロックがあるのなら、それを戻り値に加える。
# 画面外へ出ることは想定していない…。(これから質問する。)
def Collision(self,x,y):
# 右
if MAP[int(y/16)][int(x/16)+2] > 3:
return 1
# 左
if MAP[int(y/16)][int(x/16)-1] > 3:
return 2
# 上
if MAP[int(y/16)+2][int(x/16)] > 3:
return 4
# 下
if MAP[int(y/16)-1][int(x/16)] > 3:
return 8
# どこにもぶつかってない。
return 0
# 新しい移動ルーチン。
def new_Move(self,col,dir_num):
# 移動フラグ確認。
flag = col^dir_num
# フラグと入力が一致していたら、方向転換。
if flag & Bit_RIGHT != 0:
self.freamnum = RIGHT
self.change_speed(2, 0)
if flag & Bit_LEFT != 0:
self.freamnum = LEFT
self.change_speed(-2, 0)
if flag & Bit_UP != 0:
self.freamnum = UP
self.change_speed(0, -2)
if flag & Bit_DOWN != 0:
self.freamnum = DOWN
self.change_speed(0, 2)
dir_changeで入力方向の変数(self.dir_num)を引数dir_num、Collisionの結果となる変数を引数colとして渡します。
その後入力方向とブロックの向きをXORで比較して、それをflag変数に出力します。
フラグと入力が一致した場合、方向転換させます。
でも、まずは、マップエディターを読み込めるようにしないとな…。
オフトピック
とにかくビット演算子はフラグ管理にもってこい!!