annotate src/sim.tp @ 47:ccaecf1d6425

correct reading and writing during update and test maps for verifying that.
author William Morgan <bill@mrgn.org>
date Sun, 15 Jul 2012 18:16:50 -0700
parents 1f583d85c8ed
children 365c83ea7658
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
1 {
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
2 null <- #{}
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
3
12
6ef6dc8ab95e Get simulator compiling
William Morgan <bill@mrgn.org>
parents: 11
diff changeset
4 eachbyte <- :string action {
6ef6dc8ab95e Get simulator compiling
William Morgan <bill@mrgn.org>
parents: 11
diff changeset
5 strLen <- string byte_length:
6ef6dc8ab95e Get simulator compiling
William Morgan <bill@mrgn.org>
parents: 11
diff changeset
6 index <- 0
6ef6dc8ab95e Get simulator compiling
William Morgan <bill@mrgn.org>
parents: 11
diff changeset
7 while: {index < strLen} do: {
6ef6dc8ab95e Get simulator compiling
William Morgan <bill@mrgn.org>
parents: 11
diff changeset
8 element <- (string byte: index)
6ef6dc8ab95e Get simulator compiling
William Morgan <bill@mrgn.org>
parents: 11
diff changeset
9 action: index element
6ef6dc8ab95e Get simulator compiling
William Morgan <bill@mrgn.org>
parents: 11
diff changeset
10 index <- index + 1
6ef6dc8ab95e Get simulator compiling
William Morgan <bill@mrgn.org>
parents: 11
diff changeset
11 }
6ef6dc8ab95e Get simulator compiling
William Morgan <bill@mrgn.org>
parents: 11
diff changeset
12 }
6ef6dc8ab95e Get simulator compiling
William Morgan <bill@mrgn.org>
parents: 11
diff changeset
13
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
14 debugLog <- :str {
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
15 os write: 2 str
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
16 }
39
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
17
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
18 abs <- :val {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
19 if: val < 0 { 0 - val } else: { val }
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
20 }
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
21
11
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
22 makeCellTypes <- {
31
f7a1daaec925 Use dictionary
Mike Pavone <pavone@retrodev.com>
parents: 30
diff changeset
23 typedict <- dict linear
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
24 new <- :idStr {
36
814e3d482ad3 Make navigable a property of the cell type so I can use it in lifter
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
25 cannav <- if: idStr = " " {true} else: {
814e3d482ad3 Make navigable a property of the cell type so I can use it in lifter
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
26 if: idStr = "." {true} else: {
814e3d482ad3 Make navigable a property of the cell type so I can use it in lifter
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
27 if: idStr = "\\" {true} else: {
814e3d482ad3 Make navigable a property of the cell type so I can use it in lifter
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
28 if: idStr = "O" {true} else: {
814e3d482ad3 Make navigable a property of the cell type so I can use it in lifter
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
29 false }}}}
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
30 ret <- #{
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
31 id <- (idStr byte: 0)
34
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
32 string <- idStr
10
370a1eeb8812 merge and stuff
William Morgan <bill@mrgn.org>
parents: 9
diff changeset
33 isrobot <- { false }
34
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
34 eq <- :other { id = (other id) }
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
35 navigable <- { cannav }
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
36 }
31
f7a1daaec925 Use dictionary
Mike Pavone <pavone@retrodev.com>
parents: 30
diff changeset
37 typedict set: (ret id) ret
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
38 ret
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
39 }
11
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
40 #{
13
c92633098f1d simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents: 12
diff changeset
41 find <- :id {
c92633098f1d simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents: 12
diff changeset
42 if: id = ("R" byte: 0) { robot: } else: {
31
f7a1daaec925 Use dictionary
Mike Pavone <pavone@retrodev.com>
parents: 30
diff changeset
43 typedict get: id withDefault: empty
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
44 }
11
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
45 }
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
46 wall <- new: "#"
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
47 empty <- new: " "
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
48 earth <- new: "."
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
49 rock <- new: "*"
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
50 lambda <- new: "\\"
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
51 closedLift <- new: "L"
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
52 openLift <- new: "O"
11
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
53 newline <- new: "\n"
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
54 robot <- {
34
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
55 commands <- dict linear
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
56 ret <- #{
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
57 id <- ("R" byte: 0)
34
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
58 string <- "R"
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
59 x <- 0
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
60 y <- 0
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
61 isrobot <- { true }
34
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
62 eq <- :other { id = (other id) }
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
63 collected <- 0
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
64 heldBreath <- 0
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
65 razors <- 0
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
66 busted <- false
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
67 mine <- null
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
68 doCmd <- :cmd {
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
69 action <- commands get: cmd withDefault: { null }
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
70 action:
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
71 }
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
72 move <- :xDelta yDelta {
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
73 xPrime <- x + xDelta
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
74 yPrime <- y + yDelta
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
75
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
76 writeMove <- {
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
77 mine setCell: xPrime yPrime self
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
78 mine setCell: x y empty
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
79 x <- xPrime
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
80 y <- yPrime
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
81 }
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
82
34
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
83 consequenceOf <- :cur {
35
8e8903cc0997 Robot movement works now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
84 if: (cur eq: lambda) {collected <- collected + 1}
8e8903cc0997 Robot movement works now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
85 if: (cur eq: openLift) {mine succeeded!: true}
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
86 }
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
87
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
88 destination <- mine getCell: xPrime yPrime
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
89 if: (destination navigable: ) {
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
90 consequenceOf: destination
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
91 writeMove:
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
92 } else: {
35
8e8903cc0997 Robot movement works now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
93 if: (destination eq: rock) {
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
94 xPrimePrime <- xDelta * 2 + x
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
95 rockDestination <- mine getCell: xPrimePrime y
35
8e8903cc0997 Robot movement works now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
96 if: (rockDestination eq: empty) {
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
97 mine setCell: xPrimePrime y rock
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
98 writeMove:
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
99 }
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
100 }
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
101 }
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
102
13
c92633098f1d simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents: 12
diff changeset
103 }
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
104 }
34
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
105 commands set: "L" {ret move: (-1) 0 }
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
106 commands set: "R" {ret move: 1 0 }
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
107 commands set: "U" {ret move: 0 1 }
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
108 commands set: "D" {ret move: 0 (-1) }
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
109 //commands set: "A" {mine ended!: true}
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
110 ret
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
111 }
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
112 }
11
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
113 }
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
114 #{
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
115
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
116 cellTypes <- makeCellTypes:
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
117
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
118 state <- #{
6
86cdb799f950 unbarfed some things
William Morgan <bill@mrgn.org>
parents: 5
diff changeset
119 new <- :in_grid in_width in_height {
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
120 _nextGrid <- #[]
39
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
121 _robot <- null
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
122 _ended <- false
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
123 _lambdaCount <- 0
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
124 _succeeded <- false
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
125 ret <- #{
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
126 grid <- in_grid
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
127 width <- in_width
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
128 height <- in_height
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
129 calcIndex <- :x y { x + y * width }
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
130 calcX <- :index {index % width}
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
131 calcY <- :index {index / width}
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
132 getCell <- :x y {
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
133 grid get: (calcIndex: x y)
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
134 }
10
370a1eeb8812 merge and stuff
William Morgan <bill@mrgn.org>
parents: 9
diff changeset
135 setCell <- :x y val {
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
136 grid set: (calcIndex: x y) val
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
137 }
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
138 setNextCell <- :x y val {
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
139 _nextGrid set: (calcIndex: x y) val
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
140 }
39
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
141 validDest?:from <- :index :fromIndex {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
142 cell <- (grid get: index)
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
143 if: (cell navigable) {true} else: {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
144 if: (cell eq: (cellTypes rock)) {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
145 diff <- index - fromIndex
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
146 //make sure movement was horizontal
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
147 if: (abs: diff) = 1 {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
148 rockdest <- index + diff
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
149 if: ((grid get: rockdest) eq: (cellTypes empty)) {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
150 //make sure rock destination doesn't wrap
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
151 (calcY: rockdest) = (calcY: index)
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
152 }
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
153 }
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
154 }
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
155 }
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
156 }
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
157 validMoves <- :x y {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
158
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
159 amove <- :idx name {#{
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
160 index <- idx
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
161 cmd <- name
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
162 string <- {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
163 name . "(" . idx . ")"
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
164 }
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
165 }}
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
166 here <- calcIndex: x y
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
167 //TODO: Add wait move when rocks are in motion
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
168 //(amove: here "W")
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
169 cur <- #[(amove: here "A")]
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
170 up <- amove: (calcIndex: x y + 1) "U"
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
171 down <- amove: (calcIndex: x y - 1) "D"
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
172 left <- amove: (calcIndex: x - 1 y) "L"
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
173 right <- amove: (calcIndex: x + 1 y) "R"
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
174 foreach: #[up down left right] :idx el {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
175 if: (validDest?: (el index) from: here) {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
176 cur append: el
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
177 }
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
178 }
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
179 cur
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
180 }
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
181 getRobot <- { _robot }
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
182 updatePos <- :obj Index {
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
183 obj x!: (calcX: Index)
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
184 obj y!: (calcY: Index)
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
185 }
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
186 lambdaCount <- {_lambdaCount}
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
187 water <- 0
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
188 flooding <- 0
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
189 waterproof <- 10
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
190 moves <- 0
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
191 ended <- {_ended}
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
192 succeeded <- {_succeeded}
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
193 succeeded! <- :newval {
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
194 _ended <- newval
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
195 _succeeded <- newval
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
196 }
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
197 doUpdate <- {
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
198 foreach: grid :index value {
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
199 nextValue <- value
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
200 if: (value eq: (cellTypes rock)) {
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
201 x <- calcX: index
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
202 y <- calcY: index
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
203 below <- getCell: x (y - 1)
43
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
204 fallToSide <- :delta {
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
205 side <- getCell: (x + delta) y
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
206 belowSide <- getCell: (x + delta) (y - 1)
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
207 if: (side eq: (cellTypes empty)) {
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
208 if: (belowSide eq: (cellTypes empty)) {
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
209 setNextCell: (x + delta) (y - 1) value
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
210 nextValue <- (cellTypes empty)
43
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
211 true
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
212 } else: { false }
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
213 } else: { false }
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
214 }
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
215 if: (below eq: (cellTypes empty)) {
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
216 nextValue <- (cellTypes empty)
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
217 setNextCell: x (y - 1) value
43
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
218 } else: { if: (below eq: (cellTypes rock)) {
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
219 if: (not: (fallToSide: 1)) {fallToSide: -1}
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
220 } else: { if: (below eq: (cellTypes lambda)) {
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
221 fallToSide: 1
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
222 }}} // end if
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
223 } else: {
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
224 if: (value eq: (cellTypes closedLift)) {
41
20327ae2120b merged.
William Morgan <bill@mrgn.org>
parents: 40 39
diff changeset
225 if: (_robot collected) = _lambdaCount {
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
226 nextValue <- (cellTypes openLift)
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
227 }
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
228 }
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
229 }
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
230 _nextGrid set: index nextValue
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
231 }
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
232 swapGrids <- {
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
233 tmp <- grid
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
234 grid <- _nextGrid
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
235 _nextGrid <- tmp
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
236 }
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
237 swapGrids:
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
238 }
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
239 advance <- :roboCmd {
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
240 _ended <- roboCmd = "A"
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
241 if: (not: _ended) {
39
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
242 _robot doCmd: roboCmd
35
8e8903cc0997 Robot movement works now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
243 moves <- moves + 1
8e8903cc0997 Robot movement works now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
244 doUpdate:
8e8903cc0997 Robot movement works now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
245 }
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
246 self
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
247 }
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
248 printGrid <- {
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
249 cur <- (grid length) - width
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
250 col <- 0
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
251 while: {cur >= 0} do: {
34
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
252 os write: 2 ((grid get: cur) string)
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
253 cur <- cur + 1
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
254 col <- col + 1
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
255 if: col = width {
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
256 col <- 0
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
257 cur <- cur - (width + width)
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
258 os write: 2 "\n"
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
259 }
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
260 }
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
261 }
39
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
262 clone <- {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
263 cgrid <- #[]
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
264 foreach: grid :idx el {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
265 if: (el isrobot) {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
266 cgrid append: (cellTypes robot)
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
267 } else: {
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
268 cgrid append: el
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
269 }
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
270 }
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
271 myclone <- state new: cgrid width height
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
272 myclone water!: water
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
273 myclone flooding!: flooding
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
274 myclone waterproof!: waterproof
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
275 myclone moves!: moves
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
276 myclone
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
277 }
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
278 }
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
279 foreach: in_grid :index el{
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
280 _nextGrid append: el
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
281 if: (el isrobot) {
39
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
282 _robot <- el
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
283 _robot mine!: ret
9bccdb3ac979 Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents: 36
diff changeset
284 ret updatePos: _robot index
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
285 } else: {
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
286 if: (el eq: (cellTypes lambda)) {
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
287 _lambdaCount <- _lambdaCount + 1
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
288 }
30
031d46ff76a9 minor clean up to use 'if' and 'not'
William Morgan <bill@mrgn.org>
parents: 29
diff changeset
289 }
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
290 }
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
291 ret
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
292 }
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
293
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
294 fromStr <- :str {
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
295 strLen <- str byte_length:
13
c92633098f1d simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents: 12
diff changeset
296 maxCol <- 0
c92633098f1d simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents: 12
diff changeset
297 nl <- (cellTypes newline) id
c92633098f1d simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents: 12
diff changeset
298 blank <- cellTypes empty
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
299 lines <- #[]
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
300 curline <- #[]
12
6ef6dc8ab95e Get simulator compiling
William Morgan <bill@mrgn.org>
parents: 11
diff changeset
301 eachbyte: str :index element {
13
c92633098f1d simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents: 12
diff changeset
302 if: element = nl {
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
303 col <- curline length
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
304 maxCol <- if: col > maxCol {col} else: {maxCol}
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
305 lines append: curline
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
306 curline <- #[]
10
370a1eeb8812 merge and stuff
William Morgan <bill@mrgn.org>
parents: 9
diff changeset
307 } else: {
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
308 curline append: (cellTypes find: element)
10
370a1eeb8812 merge and stuff
William Morgan <bill@mrgn.org>
parents: 9
diff changeset
309 }
370a1eeb8812 merge and stuff
William Morgan <bill@mrgn.org>
parents: 9
diff changeset
310 }
13
c92633098f1d simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents: 12
diff changeset
311 grid <- #[]
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
312 cur <- (lines length) - 1
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
313 while: { cur >= 0 } do: {
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
314 curline <- (lines get: cur)
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
315 foreach: curline :idx el {
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
316 grid append: el
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
317 }
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
318 extra <- maxCol - (curline length)
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
319 while: { extra > 0 } do: {
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
320 grid append: blank
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
321 extra <- extra - 1
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
322 }
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
323 cur <- cur - 1
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
324 }
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
325 new: grid maxCol (lines length)
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
326 }
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
327 }
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
328
20
50a456168c25 Split readFd out of readFile for use in lifter. Add code to read map from stdin to lifter using code in sim
Mike Pavone <pavone@retrodev.com>
parents: 14
diff changeset
329 readFd <- :fd {
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
330 if: fd < 0 { "" } else: {
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
331 cur <- ""
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
332 part <- ""
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
333 while: {
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
334 part <- os read: fd 128
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
335 part != ""
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
336 } do: {
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
337 cur <- cur . part
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
338 }
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
339 cur
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
340 }
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
341 }
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
342
20
50a456168c25 Split readFd out of readFile for use in lifter. Add code to read map from stdin to lifter using code in sim
Mike Pavone <pavone@retrodev.com>
parents: 14
diff changeset
343 readFile <- :path {
50a456168c25 Split readFd out of readFile for use in lifter. Add code to read map from stdin to lifter using code in sim
Mike Pavone <pavone@retrodev.com>
parents: 14
diff changeset
344 fd <- os open: path (os O_RDONLY)
50a456168c25 Split readFd out of readFile for use in lifter. Add code to read map from stdin to lifter using code in sim
Mike Pavone <pavone@retrodev.com>
parents: 14
diff changeset
345 out <- readFd: fd
50a456168c25 Split readFd out of readFile for use in lifter. Add code to read map from stdin to lifter using code in sim
Mike Pavone <pavone@retrodev.com>
parents: 14
diff changeset
346 os close: fd
50a456168c25 Split readFd out of readFile for use in lifter. Add code to read map from stdin to lifter using code in sim
Mike Pavone <pavone@retrodev.com>
parents: 14
diff changeset
347 out
50a456168c25 Split readFd out of readFile for use in lifter. Add code to read map from stdin to lifter using code in sim
Mike Pavone <pavone@retrodev.com>
parents: 14
diff changeset
348 }
50a456168c25 Split readFd out of readFile for use in lifter. Add code to read map from stdin to lifter using code in sim
Mike Pavone <pavone@retrodev.com>
parents: 14
diff changeset
349
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
350 getMove <- {
29
d9f1a063a466 interactive mode works
William Morgan <bill@mrgn.org>
parents: 28
diff changeset
351 ret <- os read: 0 1
d9f1a063a466 interactive mode works
William Morgan <bill@mrgn.org>
parents: 28
diff changeset
352 while: {ret = "\n"} do: {
d9f1a063a466 interactive mode works
William Morgan <bill@mrgn.org>
parents: 28
diff changeset
353 ret <- os read: 0 1
d9f1a063a466 interactive mode works
William Morgan <bill@mrgn.org>
parents: 28
diff changeset
354 }
d9f1a063a466 interactive mode works
William Morgan <bill@mrgn.org>
parents: 28
diff changeset
355 ret
3
bb29dcd46cbf Put dummy code in placeholder source files. Create makefile.
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
356 }
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
357
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
358 main <- :args {
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
359 if: (args length) < 2 {
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
360 print: "usage: sim filename\n"
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
361 } else: {
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
362 verbose <- true
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
363 text <- readFile: (args get: 1)
14
26cfb964fe81 removed debug printing
William Morgan <bill@mrgn.org>
parents: 13
diff changeset
364 print: text
34
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
365 //os close: 1
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
366 simState <- state fromStr: text
30
031d46ff76a9 minor clean up to use 'if' and 'not'
William Morgan <bill@mrgn.org>
parents: 29
diff changeset
367 while: { not: (simState ended: ) } do: {
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
368 simState advance: (getMove: )
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
369 if: verbose {
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
370 simState printGrid
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
371 }
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
372 }
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
373 }
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
374 }
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
375
3
bb29dcd46cbf Put dummy code in placeholder source files. Create makefile.
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
376 }
11
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
377 }