changeset 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 8496febd37b5
children d631e68a45d5
files code/gameState.lm
diffstat 1 files changed, 143 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/code/gameState.lm	Sat Jul 26 23:30:55 2014 -0700
@@ -0,0 +1,143 @@
+#{
+	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]
+	}
+}
+