2

我正在开发一个在 60*60 的场地上玩的蛇游戏(Linux 中的 Nibbles),四条蛇争夺一个随机放置的苹果。

我已经用 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 回答