Rel*_*ual 0 java algorithm path
我为我用Java创建的游戏世界创建了一个二维"网格".我遇到了我创建的'漫游'模式算法的问题.
我注意到一个问题,对象似乎偏向网格的右下角.我更改了算法并认为它已修复.
今天,在压力测试的同时,我注意到问题并没有解决,现在游荡的物体偏向网格的左上角,但是它们需要更长的时间才能在那个区域内游荡.
该算法的工作原理是:1.获取人员位置的当前值2.将所有正方形的3个块半径放入链表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));
Run Code Online (Sandbox Code Playgroud)
这里有什么我想念的吗?
我很困惑为什么他们仍然在网格的左上角四分之一.
编辑:我完全删除了随机对象,如唐所示.仍然以相同的结果结束.
编辑:更新了代码来修复问题的一部分,所以现在只忽略当前人所在的方格,而不是当前X或Y上的所有方格.正如rsp所建议的那样.
几点,其中一些已经在其他答案中做出:
Random().我怀疑这将是答案的一部分-几个关于堆栈溢出的随机数非常问题没有做这个:)Board.getSquare()应对,你真的需要> 0检查吗?只初始化一次.你通过反复重新实例化随机生成器来破坏随机性.
优选地,使用工厂用于整个应用程序以创建随机单例.
public class RandomFactory
{
private Random random;
public Random getRandom()
{
if( random == null ){ random = new Random(); }
return random;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
971 次 |
| 最近记录: |