landscape =
Map[If[# < .47, 2,
If[RandomReal[] > Rescale[#, {.45, .53}], 5, 1]] &,
GaussianFilter[RandomReal[1, {100, 100}], 5], {2}];
people = RandomChoice[Position[landscape, 1], 200];
pos = RandomChoice[Position[landscape, 1]];
x := pos[[1]];
y := pos[[2]];
dir = {0, 0};
score = 0;
energy = 100;
validQ[p : {x_, y_}] :=
If[Clip[p, {1, Length@landscape}] == p &&
MatchQ[landscape[[x, y]], 1 | 5], True, False];
move[p_, o_] := If[validQ[p + o], p + o, p];
randomMove[p_] :=
If[RandomInteger[3] == 0,