jotto

Untitled

May 12th, 2015
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.11 KB | None | 0 0
  1. void aStar(Point start, Point goal)
  2.     {
  3.         ArrayList<Field> closed = new ArrayList<>();
  4.         ArrayList<Field> open = new ArrayList<>();
  5.         map[start.x][start.y].setG(0d);
  6.         map[start.x][start.y].setF();
  7.         map[start.x][start.y].setParent(null);
  8.         open.add(map[start.x][start.y]);
  9.  
  10.         while(!open.isEmpty())
  11.         {
  12.             double temp = 1000;
  13.             Field Q = new Field();
  14.             for (Field f : open)
  15.             {
  16.                 if (f.getF() < temp)
  17.                 {
  18.                     temp = f.getF();
  19.                     Q = f;
  20.                 }
  21.             }
  22.             out.println("i = " + Q.getI() + " j = " + Q.getJ());
  23.             open.remove(Q);
  24.             closed.add(Q);
  25.             if (Q.getI() == goal.x && Q.getJ() == goal.y)
  26.             {
  27.                 out.println("Found goal.");
  28.                 break;
  29.             }
  30.             for (int i = Q.getI() - 1; i < Q.getI() + 2; i ++)
  31.             {
  32.                 for (int j = Q.getJ() - 1; j < Q.getJ() + 2; j++)
  33.                 {
  34.                     try {
  35.                         if (!map[i][j].isAvailable() || closed.contains(map[i][j])) ;
  36.                         else if (!open.contains(map[i][j])) {
  37.                             map[i][j].setParent(Q);
  38.                             map[i][j].setG(Q.getG() + countDistance(i, j, Q.getI(), Q.getJ()));
  39.                             map[i][j].setF();
  40.                             open.add(map[i][j]);
  41.                         } else {
  42.                             double newG = Q.getG() + countDistance(i, j, Q.getI(), Q.getJ());
  43.                             if (newG < Q.getG()) {
  44.                                 open.remove(map[i][j]);
  45.                                 map[i][j].setParent(Q);
  46.                                 map[i][j].setG(newG);
  47.                                 map[i][j].setF();
  48.                                 open.add(map[i][j]);
  49.                             }
  50.                         }
  51.                     }
  52.                     catch (IndexOutOfBoundsException ignored){}
  53.                 }
  54.             }
  55.         }
  56.     }
Advertisement
Add Comment
Please, Sign In to add comment