Mercurial > repos > icfp2014
view 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 |
line wrap: on
line source
#{ import: [ length reverse split:at map fold:with filter flatten ] from: (module: "ll.lm") myAnd <- :a b { // only ones and zeros (a + b) = 2 } makeTicker <- :mapWidth mapHeight { makeEventType <- :lagTick isMovement behavior{ print: 12 :curTick { print: 11 expireTick <- curTick + lagTick #[expireTick isMovement :gameState {behavior: expireTick gameState}] } } endOfLives <- makeEventType: (127 * mapWidth * mapHeight * 160) 0 :tick gameState { 777 print addEvents <- [] // set lives to zero #[addEvents gameState] } /* fruitStateEvent fruit1Appears <- makeEventType: (127 * 200) 0 :gameState { // set fruit state to on } fruit2Appears <- (127 * 400) fruit1Expires <- (127 * 280) fruit2Expires <- (127 * 280) //moveLambdaMan <- 127 (eating, lamdamanId) //moveGhost <- (ghostType, ghostId) frightModeDeactivate <- (127 * 20) */ executeEvents <- :tick isMove events gameState { event <- 0 eventTick <- 0 eventIsMove <- 0 eventLam <- 0 unexpired <- [] res <- 0 while: { not: (events empty?) } do: { event <- events value eventTick <- event value eventIsMove <- (event tail) value print: 17 if: ( ( eventTick = tick ) myAnd: ( eventIsMove = isMove ) ) { eventLam <- ((event tail) tail) res <- eventLam: gameState unexpired <- res value gameState <- res tail } else: { unexpired <- event | unexpired } events <- events tail } print: 18 #[unexpired gameState] } executeTick <- :tick events gameState { // TODO: update fruit countdown for AI input print: 14 // 1.) movement res <- executeEvents: tick 1 events gameState events <- res value gameState <- (res tail) value print: 15 // 2.) actions res <- executeEvents: tick 0 events gameState events <- res value gameState <- (res tail) value print: 16 // 3.) collide pills powerpills fruit #[events gameState] } nextTick <- :events { print: 8 fold: events 0x7FFFFFFF with: :curMin event { print: #[9 curMin event] eventTick <- event value print: 10 if: eventTick < curMin { curMin <- eventTick } else: {} curMin } } print: 4 :runUntil { res <- 0 tick <- 1 events <- [ endOfLives: 0 ] print: 6 gameState <- #[0 0] while: {tick < runUntil} do: { print: 7 tick <- events nextTick print: 5 res <- executeTick: tick events gameState print: 13 events <- res value gameState <- res tail } } } step <- :myState world { print: 1 ticker <- makeTicker: 10 10 print: 2 ticker: 1000 print: 3 #[0 0] } main <- :initWorld ghostCode{ #[0 step] } }