annotate src/sim.tp @ 55:b2e9e5ad3ad8

fixed array out of bounds errors. Test maps to proove it.
author William Morgan <bill@mrgn.org>
date Sun, 15 Jul 2012 22:06:19 -0700
parents 186fce0c98ee
children ca86c88c2336
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 mine <- null
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
67 doCmd <- :cmd {
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
68 action <- commands get: cmd withDefault: { null }
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
69 action:
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
70 }
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
71 move <- :xDelta yDelta {
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
72 xPrime <- x + xDelta
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
73 yPrime <- y + yDelta
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
74
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
75 writeMove <- {
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
76 mine setCell: xPrime yPrime self
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
77 mine setCell: x y empty
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
78 x <- xPrime
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
79 y <- yPrime
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
80 }
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
81
34
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
82 consequenceOf <- :cur {
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
83 if: (cur eq: lambda) {
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
84 collected <- collected + 1
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
85 mine addPoints: 25
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
86 }
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
87 if: (cur eq: openLift) {mine succeeded!}
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
88 }
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
89
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
90 destination <- mine getCell: xPrime yPrime
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
91 if: (destination navigable: ) {
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
92 consequenceOf: destination
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
93 writeMove:
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
94 } else: {
35
8e8903cc0997 Robot movement works now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
95 if: (destination eq: rock) {
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
96 xPrimePrime <- xDelta * 2 + x
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
97 rockDestination <- mine getCell: xPrimePrime y
35
8e8903cc0997 Robot movement works now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
98 if: (rockDestination eq: empty) {
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
99 mine setCell: xPrimePrime y rock
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
100 writeMove:
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 }
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
103 }
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
104
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
105 }
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
106 clone <- {
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
107 myclone <- robot
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
108 myclone collected!: collected
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
109 myclone heldBreath!: heldBreath
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
110 myclone razors!: razors
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
111 myclone
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
112 }
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
113 }
34
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
114 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
115 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
116 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
117 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
118 //commands set: "A" {mine ended!: true}
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
119 ret
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
120 }
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
121 }
11
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
122 }
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
123 #{
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
124
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
125 cellTypes <- makeCellTypes:
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
126
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
127 state <- #{
6
86cdb799f950 unbarfed some things
William Morgan <bill@mrgn.org>
parents: 5
diff changeset
128 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
129 _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
130 _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
131 _ended <- false
55
b2e9e5ad3ad8 fixed array out of bounds errors. Test maps to proove it.
William Morgan <bill@mrgn.org>
parents: 51
diff changeset
132 getSafe <- :collection :index {
b2e9e5ad3ad8 fixed array out of bounds errors. Test maps to proove it.
William Morgan <bill@mrgn.org>
parents: 51
diff changeset
133 if: index >= 0 {
b2e9e5ad3ad8 fixed array out of bounds errors. Test maps to proove it.
William Morgan <bill@mrgn.org>
parents: 51
diff changeset
134 if: index < (collection length) {
b2e9e5ad3ad8 fixed array out of bounds errors. Test maps to proove it.
William Morgan <bill@mrgn.org>
parents: 51
diff changeset
135 collection get: index
b2e9e5ad3ad8 fixed array out of bounds errors. Test maps to proove it.
William Morgan <bill@mrgn.org>
parents: 51
diff changeset
136 } else: { (cellTypes wall) }
b2e9e5ad3ad8 fixed array out of bounds errors. Test maps to proove it.
William Morgan <bill@mrgn.org>
parents: 51
diff changeset
137 } else: { (cellTypes wall) }
b2e9e5ad3ad8 fixed array out of bounds errors. Test maps to proove it.
William Morgan <bill@mrgn.org>
parents: 51
diff changeset
138 }
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
139 _succeeded <- false
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
140 ret <- #{
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
141 grid <- in_grid
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
142 width <- in_width
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
143 height <- in_height
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
144 calcIndex <- :x y { x + y * width }
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
145 calcX <- :index {index % width}
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
146 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
147 getCell <- :x y {
55
b2e9e5ad3ad8 fixed array out of bounds errors. Test maps to proove it.
William Morgan <bill@mrgn.org>
parents: 51
diff changeset
148 grid getSafe: (calcIndex: x y)
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
149 }
10
370a1eeb8812 merge and stuff
William Morgan <bill@mrgn.org>
parents: 9
diff changeset
150 setCell <- :x y val {
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
151 grid set: (calcIndex: x y) val
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
152 }
51
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
153 getNextCell <- :x y {
55
b2e9e5ad3ad8 fixed array out of bounds errors. Test maps to proove it.
William Morgan <bill@mrgn.org>
parents: 51
diff changeset
154 _nextGrid getSafe: (calcIndex: x y)
51
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
155 }
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
156 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
157 _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
158 }
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
159 validDest?:from <- :index :fromIndex {
55
b2e9e5ad3ad8 fixed array out of bounds errors. Test maps to proove it.
William Morgan <bill@mrgn.org>
parents: 51
diff changeset
160 cell <- (grid getSafe: index)
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
161 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
162 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
163 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
164 //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
165 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
166 rockdest <- index + diff
55
b2e9e5ad3ad8 fixed array out of bounds errors. Test maps to proove it.
William Morgan <bill@mrgn.org>
parents: 51
diff changeset
167 if: ((grid getSafe: rockdest) eq: (cellTypes empty)) {
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
168 //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
169 (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
170 }
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 }
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 }
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 }
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 }
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 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
176
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 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
178 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
179 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
180 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
181 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
182 }
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
183 }}
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
184 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
185 //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
186 //(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
187 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
188 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
189 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
190 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
191 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
192 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
193 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
194 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
195 }
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
196 }
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
197 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
198 }
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
199 getRobot <- { _robot }
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
200 updatePos <- :obj Index {
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
201 obj x!: (calcX: Index)
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
202 obj y!: (calcY: Index)
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
203 }
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
204 lambdaCount <- 0
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
205 water <- 0
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
206 flooding <- 0
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
207 waterproof <- 10
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
208 moves <- #[]
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
209 score <- 0
45
9f1ca5ba2684 Discard entries for which we can easily tell that it will be impossible for them to be better than the current best. This allows us to terminate when we cannot solve the map
Mike Pavone <pavone@retrodev.com>
parents: 44
diff changeset
210 maxScore <- { score + (lambdaCount - (_robot collected)) * 25 + lambdaCount * 50 }
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
211 addPoints <- :points { score <- score + points }
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
212 ended <- {_ended}
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
213 succeeded <- {_succeeded}
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
214 succeeded! <- {
48
365c83ea7658 merge and test
William Morgan <bill@mrgn.org>
parents: 47 46
diff changeset
215 _ended <- true
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
216 _succeeded <- true
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
217 addPoints: lambdaCount * 50
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
218 }
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
219 doUpdate <- {
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
220 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
221 nextValue <- value
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
222 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
223 x <- calcX: index
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
224 y <- calcY: index
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
225 below <- getCell: x (y - 1)
43
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
226 fallToSide <- :delta {
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
227 side <- getCell: (x + delta) y
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
228 belowSide <- getCell: (x + delta) (y - 1)
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
229 if: (side eq: (cellTypes empty)) {
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
230 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
231 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
232 nextValue <- (cellTypes empty)
43
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
233 true
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
234 } else: { false }
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
235 } else: { false }
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
236 }
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
237 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
238 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
239 setNextCell: x (y - 1) value
43
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
240 } else: { if: (below eq: (cellTypes rock)) {
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
241 if: (not: (fallToSide: 1)) {fallToSide: -1}
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
242 } else: { if: (below eq: (cellTypes lambda)) {
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
243 fallToSide: 1
1f583d85c8ed rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents: 42
diff changeset
244 }}} // end if
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
245 } else: {
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
246 if: (value eq: (cellTypes closedLift)) {
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
247 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
248 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
249 }
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
250 }
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
251 }
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
252 _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
253 }
51
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
254 }
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
255 checkForDeath <- {
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
256 robotsNewFace <- getNextCell: (_robot x) (_robot y) + 1
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
257 robotsFace <- getCell: (_robot x) (_robot y) + 1
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
258 if: (robotsNewFace eq: (cellTypes rock)) {
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
259 if: (not: (robotsFace eq: (cellTypes rock))) {
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
260 _ended <-true
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
261 }
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
262 }
51
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
263 }
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
264 swapGrids <- {
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
265 tmp <- grid
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
266 grid <- _nextGrid
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
267 _nextGrid <- tmp
7
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
268 }
1bd46f854dbb progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents: 6
diff changeset
269 advance <- :roboCmd {
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
270 if: roboCmd = "A" {
48
365c83ea7658 merge and test
William Morgan <bill@mrgn.org>
parents: 47 46
diff changeset
271 _ended <- true
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
272 moves append: roboCmd
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
273 addPoints: (_robot collected) * 25
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
274 }
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
275
47
ccaecf1d6425 correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents: 43
diff changeset
276 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
277 _robot doCmd: roboCmd
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
278 score <- score - 1
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
279 moves append: roboCmd
35
8e8903cc0997 Robot movement works now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
280 doUpdate:
51
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
281 checkForDeath:
186fce0c98ee robot can get crushed
William Morgan <bill@mrgn.org>
parents: 48
diff changeset
282 swapGrids:
35
8e8903cc0997 Robot movement works now
Mike Pavone <pavone@retrodev.com>
parents: 34
diff changeset
283 }
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
284 self
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
285 }
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
286 printGrid <- {
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
287 cur <- (grid length) - width
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
288 col <- 0
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
289 while: {cur >= 0} do: {
55
b2e9e5ad3ad8 fixed array out of bounds errors. Test maps to proove it.
William Morgan <bill@mrgn.org>
parents: 51
diff changeset
290 os write: 2 ((grid getSafe: cur) string)
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
291 cur <- cur + 1
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
292 col <- col + 1
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
293 if: col = width {
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
294 col <- 0
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
295 cur <- cur - (width + width)
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
296 os write: 2 "\n"
23
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
297 }
75a005b210c5 almost got movement
William Morgan <bill@mrgn.org>
parents: 17
diff changeset
298 }
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
299 os write: 2 "score: " . score . "\n"
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
300 os write: 2 "collected: " . (_robot collected) . "\n"
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
301 os write: 2 "moves: "
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
302 foreach: moves :idx m {
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
303 os write: 2 m
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
304 }
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
305 os write: 2 "\n"
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
306 }
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
307 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
308 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
309 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
310 if: (el isrobot) {
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
311 cgrid append: (el clone)
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
312 } 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
313 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
314 }
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
315 }
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
316 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
317 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
318 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
319 myclone waterproof!: waterproof
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
320 movesclone <- #[]
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
321 foreach: moves :idx el {
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
322 movesclone append: el
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
323 }
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
324 myclone moves!: movesclone
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
325 myclone score!: score
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
326 myclone lambdaCount!: lambdaCount
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
327 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
328 }
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
329 }
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
330 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
331 _nextGrid append: el
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
332 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
333 _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
334 _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
335 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
336 } else: {
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
337 if: (el eq: (cellTypes lambda)) {
44
0c09730c173e Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents: 41
diff changeset
338 ret lambdaCount!: (ret lambdaCount) + 1
40
f38437d22ebd success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents: 36
diff changeset
339 }
30
031d46ff76a9 minor clean up to use 'if' and 'not'
William Morgan <bill@mrgn.org>
parents: 29
diff changeset
340 }
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
341 }
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
342 ret
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
343 }
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
344
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
345 fromStr <- :str {
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
346 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
347 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
348 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
349 blank <- cellTypes empty
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
350 lines <- #[]
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
351 curline <- #[]
12
6ef6dc8ab95e Get simulator compiling
William Morgan <bill@mrgn.org>
parents: 11
diff changeset
352 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
353 if: element = nl {
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
354 col <- curline length
33
efa82c5e95c2 must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents: 32
diff changeset
355 maxCol <- if: col > maxCol {col} else: {maxCol}
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
356 lines append: curline
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
357 curline <- #[]
10
370a1eeb8812 merge and stuff
William Morgan <bill@mrgn.org>
parents: 9
diff changeset
358 } else: {
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
359 curline append: (cellTypes find: element)
10
370a1eeb8812 merge and stuff
William Morgan <bill@mrgn.org>
parents: 9
diff changeset
360 }
370a1eeb8812 merge and stuff
William Morgan <bill@mrgn.org>
parents: 9
diff changeset
361 }
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
362 grid <- #[]
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
363 cur <- (lines length) - 1
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
364 while: { cur >= 0 } do: {
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
365 curline <- (lines get: cur)
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
366 foreach: curline :idx el {
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
367 grid append: el
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
368 }
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
369 extra <- maxCol - (curline length)
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
370 while: { extra > 0 } do: {
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
371 grid append: blank
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
372 extra <- extra - 1
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
373 }
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
374 cur <- cur - 1
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
375 }
32
0a55ee387d69 Change grid order
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
376 new: grid maxCol (lines length)
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
377 }
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
378 }
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
379
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
380 readFd <- :fd {
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
381 if: fd < 0 { "" } else: {
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
382 cur <- ""
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
383 part <- ""
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
384 while: {
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
385 part <- os read: fd 128
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
386 part != ""
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
387 } do: {
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
388 cur <- cur . part
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
389 }
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
390 cur
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
391 }
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
392 }
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
393
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
394 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
395 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
396 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
397 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
398 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
399 }
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
400
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
401 getMove <- {
29
d9f1a063a466 interactive mode works
William Morgan <bill@mrgn.org>
parents: 28
diff changeset
402 ret <- os read: 0 1
d9f1a063a466 interactive mode works
William Morgan <bill@mrgn.org>
parents: 28
diff changeset
403 while: {ret = "\n"} do: {
d9f1a063a466 interactive mode works
William Morgan <bill@mrgn.org>
parents: 28
diff changeset
404 ret <- os read: 0 1
d9f1a063a466 interactive mode works
William Morgan <bill@mrgn.org>
parents: 28
diff changeset
405 }
d9f1a063a466 interactive mode works
William Morgan <bill@mrgn.org>
parents: 28
diff changeset
406 ret
3
bb29dcd46cbf Put dummy code in placeholder source files. Create makefile.
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
407 }
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
408
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
409 main <- :args {
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
410 if: (args length) < 2 {
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
411 print: "usage: sim filename\n"
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
412 } else: {
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
413 verbose <- true
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
414 text <- readFile: (args get: 1)
14
26cfb964fe81 removed debug printing
William Morgan <bill@mrgn.org>
parents: 13
diff changeset
415 print: text
34
ac0df071afe7 Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents: 33
diff changeset
416 //os close: 1
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
417 simState <- state fromStr: text
30
031d46ff76a9 minor clean up to use 'if' and 'not'
William Morgan <bill@mrgn.org>
parents: 29
diff changeset
418 while: { not: (simState ended: ) } do: {
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
419 simState advance: (getMove: )
25
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
420 if: verbose {
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
421 simState printGrid
a224dc43877f major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents: 24
diff changeset
422 }
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
423 }
5
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
424 }
be946b2a2cbc initial barf into simulator file
William Morgan <bill@mrgn.org>
parents: 3
diff changeset
425 }
8
5941e6b3684c Read map file in simulator
Mike Pavone <pavone@retrodev.com>
parents: 6
diff changeset
426
3
bb29dcd46cbf Put dummy code in placeholder source files. Create makefile.
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
427 }
11
f28e465e9ee6 tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents: 10
diff changeset
428 }