landscape =
Map[If[# < .47, 2, 1] &,
GaussianFilter[RandomReal[1, {100, 100}], 5], {2}];
people = RandomChoice[Position[landscape, 1], 200];
pos = RandomChoice[Position[landscape, 1]];
validQ[p : {x_, y_}] :=
If[Clip[p, {1, Length@landscape}] == p && landscape[[x, y]] == 1,
True, False];
move[p_, o_] := If[validQ[p + o], p + o, p];
randomMove[p_] :=
If[RandomInteger[3] == 0,
RandomChoice[move[p, #] & /@ {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}],
p];
plotLandscape[pos_] :=
ArrayPlot[ReplacePart[ReplacePart[landscape, people -> 3], pos -> 4],