# HG changeset patch # User William Morgan # Date 1342388488 25200 # Node ID 20327ae2120be1e0d0c4a5f23e817d7958c543b3 # Parent f38437d22ebd53a31bc5d2b17ab5561cd63e683a# Parent 9bccdb3ac97945da3c315efd8a515f11cd5a8f02 merged. diff -r 9bccdb3ac979 -r 20327ae2120b src/sim.tp --- a/src/sim.tp Sun Jul 15 14:27:21 2012 -0700 +++ b/src/sim.tp Sun Jul 15 14:41:28 2012 -0700 @@ -32,7 +32,7 @@ string <- idStr isrobot <- { false } eq <- :other { id = (other id) } - navigable <- { cannav } + navigable <- { cannav } } typedict set: (ret id) ret ret @@ -66,7 +66,7 @@ busted <- false mine <- null doCmd <- :cmd { - action <- commands get: cmd + action <- commands get: cmd withDefault: { null } action: } move <- :xDelta yDelta { @@ -120,6 +120,8 @@ nextGrid <- #[] _robot <- null endreached <- false + _lambdaCount <- 0 + _succeeded <- false ret <- #{ grid <- in_grid width <- in_width @@ -178,14 +180,35 @@ obj x!: (calcX: Index) obj y!: (calcY: Index) } + lambdaCount <- {_lambdaCount} water <- 0 flooding <- 0 waterproof <- 10 moves <- 0 ended <- {endreached} - succeeded <- false + succeeded <- {_succeeded} + succeeded! <- :newval { + endreached <- newval + _succeeded <- newval + } doUpdate <- { - true + foreach: grid :index value { + if: (value eq: (cellTypes rock)) { + x <- calcX: index + y <- calcY: index + below <- getCell: x (y - 1) + if: (below eq: (cellTypes empty)) { + setCell: x y (cellTypes empty) + setCell: x (y - 1) value + } + } else: { + if: (value eq: (cellTypes closedLift)) { + if: (_robot collected) = _lambdaCount { + grid set: index (cellTypes openLift) + } + } + } + } } advance <- :roboCmd { endreached <- roboCmd = "A" @@ -233,6 +256,10 @@ _robot <- el _robot mine!: ret ret updatePos: _robot index + } else: { + if: (el eq: (cellTypes lambda)) { + _lambdaCount <- _lambdaCount + 1 + } }