Java 蛇AI怪异动作(错误动作)

Java 蛇AI怪异动作(错误动作),java,game-ai,Java,Game Ai,所以,我用人工智能创建了我自己的蛇游戏,但现在我有非常奇怪的蛇动作 因此,我的算法是: 获取地图时使用:1-路径已清除,0-无路径(墙、蛇) 取果位 得到蛇头的位置 将其发送到*算法(正常工作) 获取路径(点数组;结束为果实位置,开始为蛇头) 设定蛇行方向 private void AI(){ 点s=新点(); //蛇头 点n=新点(); //食物 n、 x=食品,x/13; n、 y=食品。y/13; s、 x=snakei.getBody().get(0.x/13; s、 y=snake

所以,我用人工智能创建了我自己的蛇游戏,但现在我有非常奇怪的蛇动作

因此,我的算法是:

  • 获取地图时使用:1-路径已清除,0-无路径(墙、蛇)
  • 取果位
  • 得到蛇头的位置
  • 将其发送到*算法(正常工作)
  • 获取路径(点数组;结束为果实位置,开始为蛇头)
  • 设定蛇行方向
  • private void AI(){
    点s=新点();
    //蛇头
    点n=新点();
    //食物
    n、 x=食品,x/13;
    n、 y=食品。y/13;
    s、 x=snakei.getBody().get(0.x/13;
    s、 y=snakei.getBody().get(0.y/13;
    int-px;
    int-py;
    //路径
    g=f.findPath(map,n,s);
    如果(g.size()>0){
    //下一个蛇蛋白
    px=g.get(g.size()-1).x;
    py=g.get(g.size()-1).y;
    }否则{
    返回;
    }
    如果(s.x==px){
    //上移
    如果(s.y>py){
    蛇。设置方向(蛇。方向向上);
    }
    //下移
    如果(s.ypx){
    蛇形方向(蛇形方向左);
    }
    //右移
    如果(s.x
    所以,我在一周左右的时间里和错误的动作斗争,我真的不知道错误在哪里。
    尤达大师,帮帮我

    我知道问题出在哪里

    在《蛇》中,你不能翻身。换句话说,如果你向左移动,你不能向右移动,你必须先向上移动。但是,您的代码命令蛇不正确地移动,而不考虑其先前的方向。它不应该先升后降等等

    解决这个问题,你可能会解决整个问题。确保A*算法考虑到转弯是非法方向

    以下是正确的伪代码:

  • 看看我们的方向是否正确
    • 如果是,请继续
    • 如果没有,请确定A*是想让我们左转还是右转
  • 移动一个正方形
  • 重复步骤1
  • 逻辑应该是这样的:

    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:
    
    开关(snakeAI.getDirection()){
    案例Snake.DIR_左:
    如果(s.x>=px){//不要再向左走了
    如果(s.y>py){
    蛇。设置方向(蛇。方向向上);
    }否则如果(s.y
    “尤达大师,帮帮我?”哈哈,你真有趣!别开玩笑了。问题出在哪里?错了,错了。你可以在视频上看到。你需要更具体地了解你的问题和期望。例如,当蛇必须左转时,蛇什么都不做,e.t.c.No。没关系。我使用我的g2变量(vars*13px)您能否创建一个具有以下内容的新粘贴箱:1)更本地化的打印输出(即仅当它开始出现错误时)2)打印出水果的位置嗯……蛇在粘贴箱中到达4,26。你确定这不是舍入误差吗?或者可能是+/-1误差,蛇到达4.27,然后离开板。蛇总是第一个水果正确。(我检查a*algo,algo总是工作得很好)让我们来看看
    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: