パックマン風ゲームを作る③

アバター
keito94
記事: 264
登録日時: 8年前
連絡を取る:

パックマン風ゲームを作る③

投稿記事 by keito94 » 8年前

久々の更新になってごめん。
Pythonのマップエディター(Quoyle)の読み込みツールを作りながら、
ISLeさんの助言を頼りにパックマン風の方向転換を実装した。
ビット演算子さまさまだね!

CODE:

    # 当たり判定。その方向にブロックがあるのなら、それを戻り値に加える。
    # 画面外へ出ることは想定していない…。(これから質問する。)
    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)
new_Move()の動きを説明すると、
dir_changeで入力方向の変数(self.dir_num)を引数dir_num、Collisionの結果となる変数を引数colとして渡します。
その後入力方向とブロックの向きをXORで比較して、それをflag変数に出力します。
フラグと入力が一致した場合、方向転換させます。
でも、まずは、マップエディターを読み込めるようにしないとな…。
オフトピック
とにかくビット演算子はフラグ管理にもってこい!!
以下、入力方向の変数。

CODE:

    def dir_change(self):
        if self.temp_key == Bit_RIGHT:
            self.dir_num = Bit_RIGHT # (1)
        if self.temp_key == Bit_LEFT:
            self.dir_num = Bit_LEFT # (2)
        if self.temp_key == Bit_UP:
            self.dir_num = Bit_UP # (4)
        if self.temp_key == Bit_DOWN:
            self.dir_num = Bit_DOWN # (8)
最後に編集したユーザー keito94 on 2017年7月30日(日) 15:31 [ 編集 1 回目 ]

shira211
記事: 13
登録日時: 9年前

RE: パックマン風ゲームを作る③

投稿記事 by shira211 » 8年前

一部のコードしか見ていないので見当違いだったらごめんなさい
ビット演算ってお世辞にも可読性が良いとは言えないので、どうしてもビット単位でのアクセスが必要な場合を除くと、できるだけ使用を避けたほうがいいと思っています。
プログラムが短いうちはいいかもしれませんが、将来のことを考えてビット演算を必要としない実装を検討してみてはどうでしょうか。
せっかく作った成果に水を差すようなコメントになってしまいますけど
オフトピック
じゃあなんでわざわざコメントしたんだというと
keito94 さんが書きました: とにかくビット演算子はフラグ管理にもってこい!!
これがどうも気になってしまって

アバター
keito94
記事: 264
登録日時: 8年前
連絡を取る:

Re: パックマン風ゲームを作る③

投稿記事 by keito94 » 8年前

まあ、検討してみたいと思います。