msollami

Snake

Dec 5th, 2011
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. end = False;
  2. ending[d_] :=
  3. Graphics[{Style[
  4. Text["The End!\nScore = " <>
  5. ToString@DateDifference[starttime, d, "Second"][[1]] <>
  6. " seconds"], 40]}, PlotRange -> 1, Background -> Red,
  7. ImageSize -> 400];
  8.  
  9. AE[x_, y_, z_, t_] :=
  10. Abs[x - y] < t \[And] Abs[x - z] < t \[And] Abs[z - y] < t
  11. Collide[test_, line_, startpt_, endpt_] :=
  12. With[{l = {startpt}~Join~line[[2 ;; -2]]~Join~{endpt}},
  13. If[Abs[test[[1]]] > 1 || Abs[test[[2]]] > 1, True,
  14. Or @@ (Between2Pts[test, #[[1]], #[[2]]] & /@
  15. Partition[l, 2, 1])]]
  16. Between2Pts[test_, pt1_, pt2_] := With[{t = 0.01},
  17. (AE[pt1[[1]], test[[1]], pt2[[1]],
  18. t] \[And] (pt1[[2]] < test[[2]] < pt2[[2]] \[Or]
  19. pt1[[2]] > test[[2]] > pt2[[2]]))
  20. \[Or]
  21. (AE[pt1[[2]], test[[2]], pt2[[2]], t] \[And]
  22. (pt1[[1]] < test[[1]] < pt2[[1]] \[Or]
  23. pt1[[1]] > test[[1]] > pt2[[1]]))];
  24.  
  25. startpt = {0, 0};
  26. endpt = {0, 0};
  27. list = {Dynamic@startpt, Dynamic@endpt};
  28. dir = {{0, 1}};
  29. \[Delta]1 = 0.015;
  30. \[Delta]2 = 0.002;
  31. starttime = DateString[];
  32. c = 0;
  33.  
  34. Dynamic@If[! end,
  35. Quiet@Column@{
  36. EventHandler[
  37. Graphics[{Thickness[.02], Hue[Dynamic[c]/1000],
  38. Line[{Dynamic@list}], Black}, PlotRange -> 1,
  39. Background -> Black,
  40. ImageSize ->
  41. 400], {"LeftArrowKeyDown" :> (dir = Append[dir, {-1, 0}];
  42. list = Insert[list, endpt, -2]),
  43. "RightArrowKeyDown" :> (dir = Append[dir, {1, 0}];
  44. list = Insert[list, endpt, -2]),
  45. "UpArrowKeyDown" :> (dir = Append[dir, {0, 1}];
  46. list = Insert[list, endpt, -2]),
  47. "DownArrowKeyDown" :> (dir = Append[dir, {0, -1}];
  48. list = Insert[list, endpt, -2])}],
  49.  
  50. Pane[Style[Row[{
  51. Dynamic[c += 1],
  52. Dynamic[startpt += \[Delta]2*First[dir]],
  53. Dynamic[If[Collide[endpt, list, startpt, endpt], end = True]],
  54. Dynamic[
  55. If[And @@ Thread[Abs[startpt - list[[2]]] < {0.01, 0.01}],
  56. list = Drop[list, {2}];
  57. dir = Drop[dir, 1]
  58. ]],
  59. Dynamic[endpt += \[Delta]1*Last[dir]]
  60. }],
  61. White], ImageSize -> {1, 1}]
  62. },
  63. ending[DateString[]]
  64. ]
  65.  
  66.  
Advertisement
Add Comment
Please, Sign In to add comment