Mercurial > repos > icfp2014
comparison code/gameState.lm @ 45:75f808e60aa8
initial simulator ticker. needs print debug cleanup.
author | William Morgan <billjunk@mrgn.org> |
---|---|
date | Sat, 26 Jul 2014 23:30:55 -0700 |
parents | |
children | d631e68a45d5 |
comparison
equal
deleted
inserted
replaced
44:8496febd37b5 | 45:75f808e60aa8 |
---|---|
1 #{ | |
2 import: [ | |
3 length | |
4 reverse | |
5 split:at | |
6 map | |
7 fold:with | |
8 filter | |
9 flatten | |
10 ] from: (module: "ll.lm") | |
11 | |
12 myAnd <- :a b { | |
13 // only ones and zeros | |
14 (a + b) = 2 | |
15 } | |
16 | |
17 makeTicker <- :mapWidth mapHeight { | |
18 | |
19 makeEventType <- :lagTick isMovement behavior{ | |
20 print: 12 | |
21 :curTick { | |
22 print: 11 | |
23 expireTick <- curTick + lagTick | |
24 #[expireTick isMovement :gameState {behavior: expireTick gameState}] | |
25 } | |
26 } | |
27 | |
28 endOfLives <- makeEventType: (127 * mapWidth * mapHeight * 160) 0 :tick gameState { | |
29 777 print | |
30 addEvents <- [] | |
31 // set lives to zero | |
32 #[addEvents gameState] | |
33 } | |
34 | |
35 /* | |
36 fruitStateEvent | |
37 fruit1Appears <- makeEventType: (127 * 200) 0 :gameState { | |
38 // set fruit state to on | |
39 } | |
40 fruit2Appears <- (127 * 400) | |
41 fruit1Expires <- (127 * 280) | |
42 fruit2Expires <- (127 * 280) | |
43 //moveLambdaMan <- 127 (eating, lamdamanId) | |
44 //moveGhost <- (ghostType, ghostId) | |
45 frightModeDeactivate <- (127 * 20) | |
46 */ | |
47 | |
48 executeEvents <- :tick isMove events gameState { | |
49 event <- 0 | |
50 eventTick <- 0 | |
51 eventIsMove <- 0 | |
52 eventLam <- 0 | |
53 | |
54 unexpired <- [] | |
55 res <- 0 | |
56 while: { not: (events empty?) } do: { | |
57 event <- events value | |
58 eventTick <- event value | |
59 eventIsMove <- (event tail) value | |
60 print: 17 | |
61 if: ( ( eventTick = tick ) myAnd: ( eventIsMove = isMove ) ) { | |
62 eventLam <- ((event tail) tail) | |
63 res <- eventLam: gameState | |
64 unexpired <- res value | |
65 gameState <- res tail | |
66 } else: { | |
67 unexpired <- event | unexpired | |
68 } | |
69 events <- events tail | |
70 } | |
71 print: 18 | |
72 #[unexpired gameState] | |
73 } | |
74 | |
75 executeTick <- :tick events gameState { | |
76 // TODO: update fruit countdown for AI input | |
77 | |
78 print: 14 | |
79 // 1.) movement | |
80 res <- executeEvents: tick 1 events gameState | |
81 events <- res value | |
82 gameState <- (res tail) value | |
83 | |
84 print: 15 | |
85 // 2.) actions | |
86 res <- executeEvents: tick 0 events gameState | |
87 events <- res value | |
88 gameState <- (res tail) value | |
89 | |
90 print: 16 | |
91 // 3.) collide pills powerpills fruit | |
92 | |
93 #[events gameState] | |
94 } | |
95 | |
96 nextTick <- :events { | |
97 print: 8 | |
98 fold: events 0x7FFFFFFF with: :curMin event { | |
99 print: #[9 curMin event] | |
100 eventTick <- event value | |
101 print: 10 | |
102 if: eventTick < curMin { | |
103 curMin <- eventTick | |
104 } else: {} | |
105 curMin | |
106 } | |
107 } | |
108 print: 4 | |
109 :runUntil { | |
110 res <- 0 | |
111 tick <- 1 | |
112 events <- [ | |
113 endOfLives: 0 | |
114 ] | |
115 print: 6 | |
116 gameState <- #[0 0] | |
117 while: {tick < runUntil} do: { | |
118 print: 7 | |
119 tick <- events nextTick | |
120 print: 5 | |
121 res <- executeTick: tick events gameState | |
122 print: 13 | |
123 events <- res value | |
124 gameState <- res tail | |
125 } | |
126 } | |
127 } | |
128 | |
129 step <- :myState world { | |
130 print: 1 | |
131 ticker <- makeTicker: 10 10 | |
132 print: 2 | |
133 ticker: 1000 | |
134 print: 3 | |
135 | |
136 #[0 0] | |
137 } | |
138 | |
139 main <- :initWorld ghostCode{ | |
140 #[0 step] | |
141 } | |
142 } | |
143 |