所以,我用AI制作了自己的Snake游戏,但现在我的蛇行动非常非常奇怪。
所以,我的算法是:
private void AI() {
Point s = new Point();
//SnakeAI head
Point n = new Point();
//Food
n.x = food.x / 13;
n.y = food.y / 13;
s.x = snakeAI.getBody().get(0).x / 13;
s.y = snakeAI.getBody().get(0).y / 13;
int px;
int py;
//Path
g = f.findPath(map, n, s);
if (g.size() > 0) {
//Next snake positin
px = g.get(g.size() - 1).x;
py = g.get(g.size() - 1).y;
} else {
return;
}
if (s.x == px) {
//Move UP
if (s.y > py) {
snakeAI.setDirection(Snake.DIR_UP);
}
//Move DOWN
if (s.y < py) {
snakeAI.setDirection(Snake.DIR_DOWN);
}
}
if (s.y == py) {
//Move LEFT
if (s.x > px) {
snakeAI.setDirection(Snake.DIR_LEFT);
}
//Move RIGHT
if (s.x < px) {
snakeAI.setDirection(Snake.DIR_RIGHT);
}
}
}
所以,我打算用一周的错误动作,我真的不知道错误在哪里。 尤达大师,帮帮我。
答案 0 :(得分:1)
我知道问题是什么!
在Snake中,你无法转过身来。换句话说,如果你向左移动,你不能向右移动,你必须先向上移动。但是,您的代码正在命令蛇移动不正确而不考虑它之前的方向。它不应该上升然后下降等。
修复这个问题,你可能会解决整个问题。确保A *算法的因素是转向是非法的方向。
这是正确的伪代码:
逻辑应该是这样的:
switch (snakeAI.getDirection()) {
case Snake.DIR_LEFT:
if (s.x >= px) { // don't go left anymore
if (s.y > py) {
snakeAI.setDirection(Snake.DIR_UP);
} else if (s.y < py) {
snakeAI.setDirection(Snake.DIR_DOWN);
} else {
// You should probably change this
snakeAI.setDircetion(Snake.DIR_DOWN);
}
}
break;
case Snake.DIR_RIGHT: