movement.h
extern int man_x=0;
You can't initialise (assign the zero) to the extern. You need to create a movement.cpp and do this:
movement.h
extern int man_x;
movement.cpp
int man_x=0;
Basically, the extern int man_x; tells the compiler "There is an int called man_x defined somewhere else, possibly in another translation unit, let the linker worry about it."
You can't assign a value to this declaration as you are not actually defining the variable here.
So you need to actually define the variable somewhere else and by not doing that in the header, it means you can include the header multiple times in other translation units without each one getting a copy of the variable.