3

迷路、プレイヤー キャラクター、一定数の敵からなる小さなゲームを書いています。PCも敵もあるクラスに属しており、私が指定した基準に従って数ミリ秒ごとに動きを更新します。(これらの制限はすべて課題の一部です)。今、迷宮の壁で占められたマスに敵もPCも移動しないような条件を書こうとしています。このために、次のメソッドを使用しました (これらはすべて、私が作成している Game クラス内にあります)。

def isNotWall(self,x,y):

        self.wallXI = 0
        self.wallXF = 0
        self.wallYI = 0
        self.wallYF = 0
        for wall in self.wallList:
            self.wallXI = wall[0]*self.grid + 1
            self.wallXF = (wall[0]+1)*self.grid
            self.wallYI = wall[1]*self.grid + 1
            self.wallYF = (wall[1]+1)*self.grid
            if self.wallXI < x < self.wallXF and self.wallYI < y < self.wallYF:
                return False


        return True

ここで、wallList は配列座標内のすべての壁の x 座標と y 座標を含むリストであり、grid は各グリッド スクエアのサイズ (この場合は 32 ピクセル) です。

さて、私がこれをどのように実装したかの例として:

if snake[1] > self.heroe_x:
            if self.isNotWall(snake[1] - 30,snake[2]):
                snake[1] = snake[1] - 30 * segundos

ここで、snake[1] はピクセル単位の x 座標、snake[2] は y、segundos は経過したミリ秒数であるため、敵は適切な数のピクセルを移動します。

これによると、ヘビ (およびキャラクター) は、移動の最後の位置が壁で占められている場合、特定の方向に移動してはなりません。ただし、これは部分的にしか機能せず、動作が不安定で、一部の壁は一方向にしか機能せず、多くの場合、キャラクターは理由もなく壁の内側で動けなくなったり、停止したりします.

これらの欠陥を修正するための助けをいただければ幸いです。この質問はあまり簡潔ではないことは承知していますが、言語に慣れていないため、質問をより具体的にする方法が思いつきませんでした。以前の回答は役に立ちませんでした。前もって感謝します!

4

1 に答える 1

1

最終的な位置だけを確認すると、蛇が邪魔だと壁にぶつかってしまうのではないでしょうか。壁はヘビからわずか 15 平方インチだとしますか?

また、ヘビは 30* 秒移動していますが、30 平方離れたところに壁があるかどうかのみを確認しています。

if snake[1] > self.heroe_x:
    next_position_x = snake[1] - (30 * segundos)
    if self.isNotWall(next_position_x,snake[2]):
        snake[1] = next_position_x

もし私があなたなら、実際の経路探索アルゴリズムを実装し、通過する壁のコストを無限にして、壁を越えないようにするでしょう。

http://en.wikipedia.org/wiki/Pathfinding

このライブラリもチェックしてください

http://lib2dp.sourceforge.net/

于 2013-11-14T16:19:57.750 に答える