Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void aStar(Point start, Point goal)
- {
- ArrayList<Field> closed = new ArrayList<>();
- ArrayList<Field> open = new ArrayList<>();
- map[start.x][start.y].setG(0d);
- map[start.x][start.y].setF();
- map[start.x][start.y].setParent(null);
- open.add(map[start.x][start.y]);
- while(!open.isEmpty())
- {
- double temp = 1000;
- Field Q = new Field();
- for (Field f : open)
- {
- if (f.getF() < temp)
- {
- temp = f.getF();
- Q = f;
- }
- }
- out.println("i = " + Q.getI() + " j = " + Q.getJ());
- open.remove(Q);
- closed.add(Q);
- if (Q.getI() == goal.x && Q.getJ() == goal.y)
- {
- out.println("Found goal.");
- break;
- }
- for (int i = Q.getI() - 1; i < Q.getI() + 2; i ++)
- {
- for (int j = Q.getJ() - 1; j < Q.getJ() + 2; j++)
- {
- try {
- if (!map[i][j].isAvailable() || closed.contains(map[i][j])) ;
- else if (!open.contains(map[i][j])) {
- map[i][j].setParent(Q);
- map[i][j].setG(Q.getG() + countDistance(i, j, Q.getI(), Q.getJ()));
- map[i][j].setF();
- open.add(map[i][j]);
- } else {
- double newG = Q.getG() + countDistance(i, j, Q.getI(), Q.getJ());
- if (newG < Q.getG()) {
- open.remove(map[i][j]);
- map[i][j].setParent(Q);
- map[i][j].setG(newG);
- map[i][j].setF();
- open.add(map[i][j]);
- }
- }
- }
- catch (IndexOutOfBoundsException ignored){}
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment