2

私は60*60のフィールドでプレイされるヘビゲーム(Linuxではニブル)に取り組んでおり、ランダムに配置されたリンゴを求めて4匹のヘビが競い合っています。

A *(Aスター)アルゴリズムを使用してヘビの動きを実装しました。

私の問題はこれです:

私のスコアが他のヘビよりも高い場合、他のヘビがリンゴを食べるのを避けたいです。ですから、私がリンゴに最も近いヘビであるとき、私は閉じた長方形の方法で移動したいと思います。

あなたは私がこの画像で何を意味するかを見ることができます:

ここに画像の説明を入力してください

(私は緑の人で、赤い点は私の頭です。)

私のプログラムには、A*アルゴリズムを使用してこれを行う方法がありますsetGoal(x,y);

私の問題は、閉じている(またはほぼ閉じている)長方形を見つけたら、ゲームの最後まで尻尾をたどる必要があるということです。ですから、この長方形のパスを機能させるのを手伝ってください。

4

1 に答える 1

1

尻尾の位置を簡単に追う方法はありますか?可能であれば、頭の目標を尻尾の位置と等しくなるように設定できます。尻尾の位置を簡単にマークできない場合は、より複雑になります。

ヘビの長さがわかっていて(ヘビは正確snakeLengthなサイズの長方形のパスをたどることができるので、そうしていると思います)、それが長方形であれば、endOfGame==trueまでループし続ける状態に入ることができるはずです。 、 例えば。

divSnakeLength = snakeLength / 4; (giving you the length of each side of the rectangle)
distanceToApple = divSnakeLength / 2;
applePosition = this.getApplePosition();
Position[] rectangleEdges = new int[2][2];

rectangleEdges[0] = {applePosition.x - distanceToApple, 
                        applePosition.y + distanceToApple};

rectangleEdges[1] = {applePosition.x + distanceToApple,
                        applePosition.y + distanceToApple};

rectangleEdges[2] = {applePosition.x + distanceToApple,
                        applePosition.y - distanceToApple};

rectangleEdges[3] = {applePosition.x - distanceToApple,
                        applePosition.y - distanceToApple};

//now we have the four corners of the rectangle

while(!endOfGame){
    foundGoal = false;
    setGoal(rectangleEdges[0]);
        while(!foundGoal(rectangleEdges[0]));
    setGoal(rectangleEdges[1]);
        while(!foundGoal(rectangleEdges[1]));
    setGoal(rectangleEdges[2]);
        while(!foundGoal(rectangleEdges[2]));
    setGoal(rectangleEdges[3]);
        while(!foundGoal(rectangleEdges[3]));
    }

私はあなたがあなたの途中であなたを少しずつ動かすことを願っています。

于 2012-04-26T14:42:08.037 に答える