java - 我的随机游荡算法有什么问题?

标签 java algorithm path

我为我用 Java 创建的游戏世界创建了一个二维“网格”。我创建的“漫游”模式算法有问题。

我注意到一个问题,即对象似乎偏向于网格的右下角。我更改了算法并认为它是固定的。

今天在压测的时候,发现问题没有解决,现在游荡的物体偏向于网格的左上角,但是在那个区域游荡的时间会变长。

该算法的工作原理是: 1.获取人物位置的当前值 2.将3个方 block 半径内的所有方 block 放入一个链表中 3.随机化列表 4. 从列表中选择一个随机值 5. 将该值点设置为下一个目标

这是一个代码片段:

 Point personAt = this.getTopLeftPoint();
    personAt = Game.getGame().screenToGame(personAt);
    LinkedList<Point> thisSet = new LinkedList<Point>();
    for (int x = personAt.x - 2; x < personAt.x + 3; x++) {
    for (int y = personAt.y - 2; y < personAt.y + 3; y++) {
        if (!(x == personAt.x && y == personAt.y)) {
        //TODO: Clean up the next line of code.
        if (x > 0 && y > 0 && !Board.getBoard().getSquare(x, y).getSquareType().equals(SquareType.path)) {
            if (!Game.getGame().getMap().blocked(x, y)) {
            thisSet.add(new Point(x, y));
            }
        }
        }
    }
    }
    Collections.shuffle(thisSet);
    //Random random = new Random();
    //Integer randomNo = random.nextInt(thisSet.size());
    setNextTarget(thisSet.get(0));

这里有什么我遗漏的吗?

我很困惑为什么它们仍然位于网格的左上四分之一内。

编辑: 我完全删除了随机对象,as suggested by Don .仍然得到相同的结果。

编辑:更新了代码以修复问题的一部分,因此现在只有人物当前所在的方格被忽略,而不是当前 X 或 Y 坐标上的所有方格。正如 rsp 所建议的。

最佳答案

有几点,其他答案中已经提到了一些:

  • 一如既往,只创建一个 Random() 实例。我怀疑这将是答案的一部分 - Stack Overflow 上关于随机数的问题很少与此无关:)
  • 你为什么要洗牌取一个随机元素?只需选择一个随机元素。
  • 一个不对称点:您正在检查 x > 0 和 y > 0(顺便说一下,不是 >= 0?)但您没有检查 x 和 y 是否在棋盘的上限内。如果 Board.getSquare() 可以解决这个问题,您真的需要 > 0 检查吗?

关于java - 我的随机游荡算法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1590704/

相关文章:

Linux bash : find full path of target file when executed via a softlink

java - "User Name or Password does not match"即使用户名和密码存在于数据库中并且有效

java - 找到最少的列数

java - 使变量在循环外可见

c++ - 如何根据圆上中点和其他点之间的角度计算圆上的点

算法:检查最大流量是否唯一

Android:如何获取可绘制图像名称

python - path = path + [node1], path += [node1] 和 path.append(node1) 的区别

java - 构建mopub sdk时,找不到符号: class org. fest.assertions.api.ANDROID

java - 使用 MockSchemaRegistry 发布 TopologyTestDriver 时出现问题