public void mouseClicked (MouseEvent event)
	{
		if(!visualisable.isGameOver())
		{
			//sets movePlayer to false initially
			boolean movePlayer = false;
			//gets the mouse click x and y coordinate and scales them
			int xPos = (int) (event.getXOnScreen() / imageScale());
			int yPos = (int) ((event.getYOnScreen() - extraH) / imageScale());
			//gets the nearest node from this x,y location using all the possible nodes the player can move to
			Integer newNode = controllable.getNodeIdFromLocation(xPos, yPos);
			//sets ticket type initially to null
			Initialisable.TicketType ticketType = null;
			int tempPlayerID = 0;
			//if newNode returns a valid node
			if(newNode != -1 && newNode != -2)
			{
				//give the use the option to select the transport type
				ticketType = transportSelection(ticketType, newNode);
				if(ticketType != null)
				{
					//get the next player to move and stores it in a temp variable
					tempPlayerID = visualisable.getNextPlayerToMove();
					//moves the player - returns true if it is successful, otherwise returns false
					movePlayer = controllable.movePlayer(currentPlayerID, newNode, ticketType);
					//if true
					
					if(movePlayer == true)
					{
						if(ticketType == Initialisable.TicketType.DoubleMove)
						{
							checkMovePlayer(movePlayer, currentPlayerID);
						} else {
							checkMovePlayer(movePlayer, tempPlayerID);
						}
						/*
						if(ticketType == Initialisable.TicketType.SecretMove)
						{
							secretMoveFlag = true;
							Test.printf("SECRET MOVE ACTIVATED");
						} else if (ticketType == Initialisable.TicketType.DoubleMove)
						{
							doubleMoveFlag1 = true;
							Test.printf("DOUBLE MOVE ACTIVATED");
						} else if (doubleMoveFlag1){
							checkMovePlayer(movePlayer, currentPlayerID);
							doubleMoveFlag1 = false;
							doubleMoveFlag2 = true;
						} else if (secretMoveFlag){
							checkMovePlayer(movePlayer, tempPlayerID);
							secretMoveFlag = false;
						} else if (doubleMoveFlag2){
							Test.printf("ENTER?");
							checkMovePlayer(movePlayer, tempPlayerID);
							doubleMoveFlag1 = false;
							doubleMoveFlag2 = false;
							Test.printf("DOUBLE MOVE 2");
						} else {
							checkMovePlayer(movePlayer, tempPlayerID);
						}
						*/
						
					} else JOptionPane.showMessageDialog(null, "Invalid move" ,"Player move", JOptionPane.ERROR_MESSAGE);
				}
				
			}
			//if newNode is -2, there are no possible moves to move so skip the players go
			else if (newNode == -2){
				//get the next player to move and stores it in a temp variable
				tempPlayerID = visualisable.getNextPlayerToMove();
				//moves the player - returns true if it is successful, otherwise returns false
				movePlayer = controllable.movePlayer(currentPlayerID, newNode, ticketType);
				currentPlayerID = tempPlayerID;
				displayPlayers();
			}
		}
	}