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