comparison src/sim.tp @ 65:aa822c683e28

merge
author Mike Pavone <pavone@retrodev.com>
date Mon, 16 Jul 2012 04:35:43 -0700
parents ff2b38518a58 ca86c88c2336
children ff8d7b4499f5
comparison
equal deleted inserted replaced
64:3d058b4889a2 65:aa822c683e28
131 _robot <- null 131 _robot <- null
132 _ended <- false 132 _ended <- false
133 _maxmoves <- in_width * in_height 133 _maxmoves <- in_width * in_height
134 _heuristicValid <- false 134 _heuristicValid <- false
135 _heuristic <- 0 135 _heuristic <- 0
136 getSafe <- :collection :index {
137 if: index >= 0 {
138 if: index < (collection length) {
139 collection get: index
140 } else: { (cellTypes wall) }
141 } else: { (cellTypes wall) }
142 }
136 _succeeded <- false 143 _succeeded <- false
137 ret <- #{ 144 ret <- #{
138 grid <- in_grid 145 grid <- in_grid
139 width <- in_width 146 width <- in_width
140 height <- in_height 147 height <- in_height
141 calcIndex <- :x y { x + y * width } 148 calcIndex <- :x y { x + y * width }
142 calcX <- :index {index % width} 149 calcX <- :index {index % width}
143 calcY <- :index {index / width} 150 calcY <- :index {index / width}
144 getCell <- :x y { 151 getCell <- :x y {
145 grid get: (calcIndex: x y) 152 grid getSafe: (calcIndex: x y)
146 } 153 }
147 setCell <- :x y val { 154 setCell <- :x y val {
148 grid set: (calcIndex: x y) val 155 grid set: (calcIndex: x y) val
149 } 156 }
150 getNextCell <- :x y { 157 getNextCell <- :x y {
151 _nextGrid get: (calcIndex: x y) 158 _nextGrid getSafe: (calcIndex: x y)
152 } 159 }
153 setNextCell <- :x y val { 160 setNextCell <- :x y val {
154 _nextGrid set: (calcIndex: x y) val 161 _nextGrid set: (calcIndex: x y) val
155 } 162 }
156 validDest?:from <- :index :fromIndex { 163 validDest?:from <- :index :fromIndex {
157 cell <- (grid get: index) 164 cell <- (grid getSafe: index)
158 if: (cell navigable) {true} else: { 165 if: (cell navigable) {true} else: {
159 if: (cell eq: (cellTypes rock)) { 166 if: (cell eq: (cellTypes rock)) {
160 diff <- index - fromIndex 167 diff <- index - fromIndex
161 //make sure movement was horizontal 168 //make sure movement was horizontal
162 if: (abs: diff) = 1 { 169 if: (abs: diff) = 1 {
163 rockdest <- index + diff 170 rockdest <- index + diff
164 if: ((grid get: rockdest) eq: (cellTypes empty)) { 171 if: ((grid getSafe: rockdest) eq: (cellTypes empty)) {
165 //make sure rock destination doesn't wrap 172 //make sure rock destination doesn't wrap
166 (calcY: rockdest) = (calcY: index) 173 (calcY: rockdest) = (calcY: index)
167 } 174 }
168 } 175 }
169 } 176 }
375 } 382 }
376 printGrid <- { 383 printGrid <- {
377 cur <- (grid length) - width 384 cur <- (grid length) - width
378 col <- 0 385 col <- 0
379 while: {cur >= 0} do: { 386 while: {cur >= 0} do: {
380 os write: 2 ((grid get: cur) string) 387 os write: 2 ((grid getSafe: cur) string)
381 cur <- cur + 1 388 cur <- cur + 1
382 col <- col + 1 389 col <- col + 1
383 if: col = width { 390 if: col = width {
384 col <- 0 391 col <- 0
385 cur <- cur - (width + width) 392 cur <- cur - (width + width)