comparison src/sim.tp @ 47:ccaecf1d6425

correct reading and writing during update and test maps for verifying that.
author William Morgan <bill@mrgn.org>
date Sun, 15 Jul 2012 18:16:50 -0700
parents 1f583d85c8ed
children 365c83ea7658
comparison
equal deleted inserted replaced
43:1f583d85c8ed 47:ccaecf1d6425
115 115
116 cellTypes <- makeCellTypes: 116 cellTypes <- makeCellTypes:
117 117
118 state <- #{ 118 state <- #{
119 new <- :in_grid in_width in_height { 119 new <- :in_grid in_width in_height {
120 nextGrid <- #[] 120 _nextGrid <- #[]
121 _robot <- null 121 _robot <- null
122 endreached <- false 122 _ended <- false
123 _lambdaCount <- 0 123 _lambdaCount <- 0
124 _succeeded <- false 124 _succeeded <- false
125 ret <- #{ 125 ret <- #{
126 grid <- in_grid 126 grid <- in_grid
127 width <- in_width 127 width <- in_width
128 height <- in_height 128 height <- in_height
129 calcIndex <- :x y { x + y * width } 129 calcIndex <- :x y { x + y * width }
130 calcX <- :index {index % width} 130 calcX <- :index {index % width}
131 calcY <- :index {index / width} 131 calcY <- :index {index / width}
132 getCell <- :x y {
133 grid get: (calcIndex: x y)
134 }
132 setCell <- :x y val { 135 setCell <- :x y val {
133 grid set: (calcIndex: x y) val 136 grid set: (calcIndex: x y) val
134 } 137 }
135 getCell <- :x y { 138 setNextCell <- :x y val {
136 grid get: (calcIndex: x y) 139 _nextGrid set: (calcIndex: x y) val
137 } 140 }
138 validDest?:from <- :index :fromIndex { 141 validDest?:from <- :index :fromIndex {
139 cell <- (grid get: index) 142 cell <- (grid get: index)
140 if: (cell navigable) {true} else: { 143 if: (cell navigable) {true} else: {
141 if: (cell eq: (cellTypes rock)) { 144 if: (cell eq: (cellTypes rock)) {
142 diff <- index - fromIndex 145 diff <- index - fromIndex
183 lambdaCount <- {_lambdaCount} 186 lambdaCount <- {_lambdaCount}
184 water <- 0 187 water <- 0
185 flooding <- 0 188 flooding <- 0
186 waterproof <- 10 189 waterproof <- 10
187 moves <- 0 190 moves <- 0
188 ended <- {endreached} 191 ended <- {_ended}
189 succeeded <- {_succeeded} 192 succeeded <- {_succeeded}
190 succeeded! <- :newval { 193 succeeded! <- :newval {
191 endreached <- newval 194 _ended <- newval
192 _succeeded <- newval 195 _succeeded <- newval
193 } 196 }
194 doUpdate <- { 197 doUpdate <- {
195 foreach: grid :index value { 198 foreach: grid :index value {
199 nextValue <- value
196 if: (value eq: (cellTypes rock)) { 200 if: (value eq: (cellTypes rock)) {
197 x <- calcX: index 201 x <- calcX: index
198 y <- calcY: index 202 y <- calcY: index
199 below <- getCell: x (y - 1) 203 below <- getCell: x (y - 1)
200 fallToSide <- :delta { 204 fallToSide <- :delta {
201 side <- getCell: (x + delta) y 205 side <- getCell: (x + delta) y
202 belowSide <- getCell: (x + delta) (y - 1) 206 belowSide <- getCell: (x + delta) (y - 1)
203 if: (side eq: (cellTypes empty)) { 207 if: (side eq: (cellTypes empty)) {
204 if: (belowSide eq: (cellTypes empty)) { 208 if: (belowSide eq: (cellTypes empty)) {
205 setCell: (x + delta) (y - 1) value 209 setNextCell: (x + delta) (y - 1) value
206 setCell: x y (cellTypes empty) 210 nextValue <- (cellTypes empty)
207 true 211 true
208 } else: { false } 212 } else: { false }
209 } else: { false } 213 } else: { false }
210 } 214 }
211 if: (below eq: (cellTypes empty)) { 215 if: (below eq: (cellTypes empty)) {
212 setCell: x y (cellTypes empty) 216 nextValue <- (cellTypes empty)
213 setCell: x (y - 1) value 217 setNextCell: x (y - 1) value
214 } else: { if: (below eq: (cellTypes rock)) { 218 } else: { if: (below eq: (cellTypes rock)) {
215 if: (not: (fallToSide: 1)) {fallToSide: -1} 219 if: (not: (fallToSide: 1)) {fallToSide: -1}
216 } else: { if: (below eq: (cellTypes lambda)) { 220 } else: { if: (below eq: (cellTypes lambda)) {
217 fallToSide: 1 221 fallToSide: 1
218 }}} // end if 222 }}} // end if
219 } else: { 223 } else: {
220 if: (value eq: (cellTypes closedLift)) { 224 if: (value eq: (cellTypes closedLift)) {
221 if: (_robot collected) = _lambdaCount { 225 if: (_robot collected) = _lambdaCount {
222 grid set: index (cellTypes openLift) 226 nextValue <- (cellTypes openLift)
223 } 227 }
224 } 228 }
225 } 229 }
226 } 230 _nextGrid set: index nextValue
231 }
232 swapGrids <- {
233 tmp <- grid
234 grid <- _nextGrid
235 _nextGrid <- tmp
236 }
237 swapGrids:
227 } 238 }
228 advance <- :roboCmd { 239 advance <- :roboCmd {
229 endreached <- roboCmd = "A" 240 _ended <- roboCmd = "A"
230 if: (not: endreached) { 241 if: (not: _ended) {
231 _robot doCmd: roboCmd 242 _robot doCmd: roboCmd
232 moves <- moves + 1 243 moves <- moves + 1
233 doUpdate: 244 doUpdate:
234 } 245 }
235 self 246 self
264 myclone moves!: moves 275 myclone moves!: moves
265 myclone 276 myclone
266 } 277 }
267 } 278 }
268 foreach: in_grid :index el{ 279 foreach: in_grid :index el{
269 nextGrid append: el 280 _nextGrid append: el
270 if: (el isrobot) { 281 if: (el isrobot) {
271 _robot <- el 282 _robot <- el
272 _robot mine!: ret 283 _robot mine!: ret
273 ret updatePos: _robot index 284 ret updatePos: _robot index
274 } else: { 285 } else: {