Bug 598

Summary: I could not get the next direction for a ghost when using A*
Product: Group14-Pacman Reporter: Aleksa <ajelaca2-c>
Component: GameAssignee: YANG Tianxia <tianxyang3-c>
Status: RESOLVED FIXED    
Severity: enhancement CC: tianxyang3-c
Priority: High    
Version: 0.0.2   
Hardware: PC   
OS: Windows   

Description Aleksa 2021-11-21 01:49:46 HKT
I ran Main.java and instructed PacMan to move until the console showed the following Maze state:

P is PacMan's position
* is his starting position

W W W W W W W W W W W W W W W W W W W W W W W W W W W W W
W F F F F F F F F F F F F F F F F F F F F F F F F F F F W 
W F W W W W W W W W W W F W W W F W W W W W W W W W W F W 
W F W W W W W W W W W W F W W W F W W W W W W W W W W F W
W F W W W W W W W F F F F W W W F F F F W W W W W W W F W 
W F F F F F F F W F W W W W W W W W W F W F F F F F F F W
W W W W W W W F W F W W W W W W W W W F W F W W W W W W W 
            W F W F W W W W W W W W W F W F W
            W F F F F F F F F F F F F F F F W
            W F W F W W W W W W W W W F W F W
      W W W W F W F W W W W W W W W W F W F W W W W       
      W F F F F W F W W W W W W W W W F W F F F F W
      W F W W W W F F F F F F F F F F F W W W W F W
  W W W F W W W W F W W W W   W W W W F W W W W F W W W   
  W F F F F F F F F W         O     W F F F F F F F F W
  W F W W W F W W F W               W F W W F W W W F W
  W F W W W F W W F W               W F W W F W W W F W
  W F F F W F W W F W W W W W W W W W F W W F W F F F W
  W W W F W F W W F       * F F F F F F W W F W F W W W
      W F W F W W W W   W W W W W F W W W W F W F W
W W W W F W F W W W W   W W W W W F W W W W F W F W W W W
W F F F                 W W W W W F F F F F F F F F F F W
W W W W   W W W W F W W W W W W W W W F W W W W F W W W W
      W   W W W W F W W W W W W W W W B W W W W F W
      W   W                                 I W F W
      W   W   W W W W F W W W W W F W W W W   W F W
  W W W   W   W W W W F W W W W W F W W W W   W F W W W
  W           W W F F F W W W W W F F F W W   F F F P W
  W   W W W   W W F W W W W W W W W W F W W   W W W   W
  W   W W W   W W F W W W W W W W W W F W W   W W W R W
  W           W W F F F F F F F F F F F W W           W
  W W W W W W W W W W W W W W W W W W W W W W W W W W W

I got a following exception from Visual Studio Code:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1
        at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
        at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
        at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
        at java.base/java.util.Objects.checkIndex(Objects.java:372)
        at java.base/java.util.ArrayList.get(ArrayList.java:459)
        at Game.A_star.getNextDirection(A_star.java:168)
        at Game.Ghost.moveToTarget(Ghost.java:119)
        at Game.ChaseAmbush.behave(ChaseAmbush.java:28)
        at Game.Game.moveGhosts(Game.java:174)
        at Game.Game.handleMovements(Game.java:114)
        at Game.Game.gameTick(Game.java:61)
        at Game.Main.main(Main.java:30)
Comment 1 Aleksa 2021-11-21 01:57:10 HKT
It turned out that when the start and end in ArrayList<Tuple> getPath(Tuple start, Tuple end, ArrayList<Direction> possibleDirections) in class A_star are the same point, A* algorithm will return an ArrayList of size 1. After A* returned a path of size 1, I tried to access a Tuple at index 1, so I got an exception. The solution is to check the Arraylist size with conditional before trying to access out of bounds indeces.