Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- end = False;
- ending[d_] :=
- Graphics[{Style[
- Text["The End!\nScore = " <>
- ToString@DateDifference[starttime, d, "Second"][[1]] <>
- " seconds"], 40]}, PlotRange -> 1, Background -> Red,
- ImageSize -> 400];
- AE[x_, y_, z_, t_] :=
- Abs[x - y] < t \[And] Abs[x - z] < t \[And] Abs[z - y] < t
- Collide[test_, line_, startpt_, endpt_] :=
- With[{l = {startpt}~Join~line[[2 ;; -2]]~Join~{endpt}},
- If[Abs[test[[1]]] > 1 || Abs[test[[2]]] > 1, True,
- Or @@ (Between2Pts[test, #[[1]], #[[2]]] & /@
- Partition[l, 2, 1])]]
- Between2Pts[test_, pt1_, pt2_] := With[{t = 0.01},
- (AE[pt1[[1]], test[[1]], pt2[[1]],
- t] \[And] (pt1[[2]] < test[[2]] < pt2[[2]] \[Or]
- pt1[[2]] > test[[2]] > pt2[[2]]))
- \[Or]
- (AE[pt1[[2]], test[[2]], pt2[[2]], t] \[And]
- (pt1[[1]] < test[[1]] < pt2[[1]] \[Or]
- pt1[[1]] > test[[1]] > pt2[[1]]))];
- startpt = {0, 0};
- endpt = {0, 0};
- list = {Dynamic@startpt, Dynamic@endpt};
- dir = {{0, 1}};
- \[Delta]1 = 0.015;
- \[Delta]2 = 0.002;
- starttime = DateString[];
- c = 0;
- Dynamic@If[! end,
- Quiet@Column@{
- EventHandler[
- Graphics[{Thickness[.02], Hue[Dynamic[c]/1000],
- Line[{Dynamic@list}], Black}, PlotRange -> 1,
- Background -> Black,
- ImageSize ->
- 400], {"LeftArrowKeyDown" :> (dir = Append[dir, {-1, 0}];
- list = Insert[list, endpt, -2]),
- "RightArrowKeyDown" :> (dir = Append[dir, {1, 0}];
- list = Insert[list, endpt, -2]),
- "UpArrowKeyDown" :> (dir = Append[dir, {0, 1}];
- list = Insert[list, endpt, -2]),
- "DownArrowKeyDown" :> (dir = Append[dir, {0, -1}];
- list = Insert[list, endpt, -2])}],
- Pane[Style[Row[{
- Dynamic[c += 1],
- Dynamic[startpt += \[Delta]2*First[dir]],
- Dynamic[If[Collide[endpt, list, startpt, endpt], end = True]],
- Dynamic[
- If[And @@ Thread[Abs[startpt - list[[2]]] < {0.01, 0.01}],
- list = Drop[list, {2}];
- dir = Drop[dir, 1]
- ]],
- Dynamic[endpt += \[Delta]1*Last[dir]]
- }],
- White], ImageSize -> {1, 1}]
- },
- ending[DateString[]]
- ]
Advertisement
Add Comment
Please, Sign In to add comment