private Move askPredatorForMove() {

                // Get the All possible edges for the predator
                final Set<Edge> allPossibleEdges = Ship.getAll(ship.getPredatorNode().getCoordinates(), ship, connectedShip);

                // Get the adjacent edges for the predator
                final Set<Edge> adjacentEdges = ship.getPredatorNode().getAdjacent();

                // Is the predator at the control room
                boolean predAtControlRoom = ship.getPredatorNode().equals(controlNode);

                // prints to the status bar
                if (predAtControlRoom) {
                        uigui.changeCRStatus("  The Predator is at the Control Room");
                }

                // Is the predator at the scanner
                boolean predAtScanner = ship.getPredatorNode().equals(scannerNode);

                // If the predator it on the scanner, make sure he gets it for
                // the rest
                // of the game
                if (predAtScanner) {
                        // prints to the status bar
                        uigui.changeScannerStatus("  The Predator has the scanner");

                        predatorHasScanner = true;
                        scannerNode = null;
                }

                // By default the predator does not get info from the
                // scanner
                Ship scannerShip = null;

                // If the predator has the scanner, give him a copy of
                // the ship
                if (predatorHasScanner) {
                        // make a copy of the ship
                        scannerShip = Engine.ship.clone();
                }

                // By default, the Predator cannot sense the alien
                boolean isAlienWithinSight = false;

                // By default, the Predator does not know if the
                Edge directionOfAlien = null;

                // Get the shortest path between the alien and predator
                List<Edge> shortestPath = Engine.ship.getPath(ship.getPredatorNode(), ship.getAlienNode());

                // If there is a path between the alien and the predator and the
                // distance within the predator's sensing distance
                if (shortestPath != null && shortestPath.size() <= PRED_SENSE) {

                        // Indicate that the alien is within sight
                        isAlienWithinSight = true;

                        // Store the direction of the Alien
                        directionOfAlien = shortestPath.iterator().next();

                        // prints to status bar
                        uigui.changePSenseStatus("  The Predator senses the Alien");
                }
                else {
                        uigui.changePSenseStatus("");
                }

                // Make an info class for the Alien
                Info info = new Info(ship.getPredatorNode(), allPossibleEdges, adjacentEdges, predAtControlRoom, predAtScanner, scannerShip,
                                isAlienWithinSight, directionOfAlien, null);

                // Get the predator's move
                Move predatorMove = predator.nextMove(info);

                // Validate the predator's move
                if (validateMove(predatorMove, allPossibleEdges, false, PRINT_DIAGNOSTIC)) {
                        // If valid, make the move
                        return predatorMove;
                }
                else {
                        // If invalid move then indicate a pass
                        return new Move(adjacentEdges.iterator().next(), false, false);
                }

        }