diff src/sim.tp @ 48:365c83ea7658

merge and test
author William Morgan <bill@mrgn.org>
date Sun, 15 Jul 2012 18:32:22 -0700
parents ccaecf1d6425 5d2e59cbbc7c
children 186fce0c98ee b0d89ee419c1
line wrap: on
line diff
--- a/src/sim.tp	Sun Jul 15 18:16:50 2012 -0700
+++ b/src/sim.tp	Sun Jul 15 18:32:22 2012 -0700
@@ -81,8 +81,11 @@
 						}
 						
 						consequenceOf <- :cur {
-							if: (cur eq: lambda)   {collected <- collected + 1}
-							if: (cur eq: openLift) {mine succeeded!: true}							
+							if: (cur eq: lambda)   {
+								collected <- collected + 1
+								mine addPoints: 25
+							}
+							if: (cur eq: openLift) {mine succeeded!}							
 						}
 
 						destination <- mine getCell: xPrime yPrime
@@ -101,6 +104,13 @@
 						}
 
 					}
+					clone <- {
+						myclone <- robot
+						myclone collected!: collected
+						myclone heldBreath!: heldBreath
+						myclone razors!: razors
+						myclone
+					}
 				}
 				commands set: "L" {ret move: (-1)  0  }
 				commands set: "R" {ret move:   1   0  }
@@ -120,7 +130,7 @@
 			_nextGrid <- #[]
 			_robot <- null
 			_ended <- false
-			_lambdaCount <- 0
+			
 			_succeeded <- false
 			ret <- #{
 				grid <- in_grid
@@ -183,16 +193,20 @@
 					obj x!: (calcX: Index)
 					obj y!: (calcY: Index)
 				}
-				lambdaCount <- {_lambdaCount}
+				lambdaCount <- 0
 				water <- 0
 				flooding <- 0
 				waterproof <- 10
-				moves <- 0
+				moves <- #[]
+				score <- 0
+				maxScore <- { score + (lambdaCount - (_robot collected)) * 25 + lambdaCount * 50 }
+				addPoints <- :points { score <- score + points }
 				ended <- {_ended}
 				succeeded <- {_succeeded}
-				succeeded! <- :newval {
-					_ended <- newval
-					_succeeded <- newval
+				succeeded! <- {
+					_ended <- true
+					_succeeded <- true
+					addPoints: lambdaCount * 50
 				}
 				doUpdate <- {
 					foreach: grid :index value {
@@ -222,7 +236,7 @@
 							}}} // end if
 						} else: {
 							if: (value eq: (cellTypes closedLift)) {
-								if: (_robot collected) = _lambdaCount {
+								if: (_robot collected) = lambdaCount {
 									nextValue <- (cellTypes openLift)
 								}
 							}
@@ -237,10 +251,16 @@
 					swapGrids:
 				}
 				advance <- :roboCmd {
-					_ended <- roboCmd = "A"
+					if: roboCmd = "A" {
+						_ended <- true
+						moves append: roboCmd
+						addPoints: (_robot collected) * 25
+					}
+					
 					if: (not: _ended) {
 						_robot doCmd: roboCmd
-						moves <- moves + 1
+						score <- score - 1
+						moves append: roboCmd
 						doUpdate:
 					}
 					self
@@ -258,12 +278,19 @@
 							os write: 2 "\n"
 						}
 					}
+					os write: 2 "score: " . score . "\n"
+					os write: 2 "collected: " . (_robot collected) . "\n"
+					os write: 2 "moves: "
+					foreach: moves :idx m {
+						os write: 2 m
+					}
+					os write: 2 "\n"
 				}
 				clone <- {
 					cgrid <- #[]
 					foreach: grid :idx el {
 						if: (el isrobot) {
-							cgrid append: (cellTypes robot)
+							cgrid append: (el clone)
 						} else: {
 							cgrid append: el
 						}
@@ -272,7 +299,13 @@
 					myclone water!: water
 					myclone flooding!: flooding
 					myclone waterproof!: waterproof
-					myclone moves!: moves
+					movesclone <- #[]
+					foreach: moves :idx el {
+						movesclone append: el
+					}
+					myclone moves!: movesclone
+					myclone score!: score
+					myclone lambdaCount!: lambdaCount
 					myclone
 				}
 			}
@@ -284,7 +317,7 @@
 					ret updatePos: _robot index
 				} else: { 
 					if: (el eq: (cellTypes lambda)) {
-						_lambdaCount <- _lambdaCount + 1
+						ret lambdaCount!: (ret lambdaCount) + 1
 					}
 				}
 			}