gpt4 book ai didi

algorithm - 如何在 Snake Game 中以封闭的矩形方式围绕苹果移动

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:02:38 25 4
gpt4 key购买 nike

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

我已经用 A*(A 星)算法实现了我的蛇的运动。

我的问题是:

当我的分数超过其他蛇时,我想避免其他蛇吃苹果。所以,当我是距离苹果最近的蛇时,我想以闭合矩形的方式移动。

你可以在这张图片中明白我的意思:

enter image description here

(我是绿点,红点是我的头。)

我的程序中有一个使用 A* 算法执行此操作的方法:setGoal(x,y);

我的问题是,当我找到一个封闭(或近似封闭)的矩形时,我需要跟随我的尾部直到游戏结束。所以请帮助我使这个矩形路径有效。

最佳答案

有没有一种方法可以很容易地跟随尾部的位置?如果可以,您可以将头部的目标设置为与尾部的位置相等。如果不能轻易标记尾部的位置,那就更复杂了。

如果你知道蛇有多长(我假设你知道,因为蛇可以沿着恰好 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]));
}

我希望这能插入你前进。

关于algorithm - 如何在 Snake Game 中以封闭的矩形方式围绕苹果移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10045114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com