User:Wakebrdkid/Game
Appearance
This is a collaborative game development experiment.
Current rules: Control a yellow dot with the arrow keys and try to get as much food as you can.
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,
RandomChoice[move[p, #] & /@ {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}],
p];
plotLandscape[] :=
Grid[{{"Energy:" <> ToString@energy <> " Score:" <> ToString@score,
SpanFromLeft}, {Null,
ArrayPlot[{ReplacePart[Table[White, {Length@landscape}],
y -> Black]}, ImageSize -> {300, 5},
PlotRangePadding -> 0]}, {ArrayPlot[
ReplacePart[Table[{White}, {Length@landscape}], {x, 1} -> Black],
ImageSize -> {5, 300}, PlotRangePadding -> 0],
ArrayPlot[
ReplacePart[ReplacePart[landscape, people -> 3], pos -> 4],
ColorRules -> {1 -> Brown, 2 -> Blue, 3 -> Black, 4 -> Yellow,
5 -> Green}, ImageSize -> {300, 300}, PlotRangePadding -> 0]}}]
SetOptions[InputNotebook[],
NotebookEventActions -> {"RightArrowKeyDown" :> (dir = {0, 1}),
"LeftArrowKeyDown" :> (dir = {0, -1}),
"UpArrowKeyDown" :> (dir = {-1, 0}),
"DownArrowKeyDown" :> (dir = {1, 0})}];
Manipulate[
Dynamic[If[energy > 0, energy--; score++, dir = {0, 0}];
If[landscape[[x, y]] == 5, energy += 10;
landscape[[x, y]] = 1]; (landscape[[#, #2]] = 1) & @@@ people;
pos = move[pos, dir]; people = randomMove /@ people;
plotLandscape[], TrackedSymbols -> {}, UpdateInterval -> .1],
Initialization :> (
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;), Deployed -> True, SaveDefinitions -> True,
Paneled -> False, AppearanceElements -> None]