Mercurial > repos > icfp2012
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 |
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 | 4 eachbyte <- :string action { |
5 strLen <- string byte_length: | |
6 index <- 0 | |
7 while: {index < strLen} do: { | |
8 element <- (string byte: index) | |
9 action: index element | |
10 index <- index + 1 | |
11 } | |
12 } | |
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 | 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 | 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 | 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 | 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 | 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 | 59 x <- 0 |
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 | 77 mine setCell: xPrime yPrime self |
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 | 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 | 84 if: (cur eq: lambda) {collected <- collected + 1} |
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 | 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 | 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 | 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 | 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 | 129 calcIndex <- :x y { x + y * width } |
130 calcX <- :index {index % width} | |
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 | 135 setCell <- :x y val { |
23 | 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 | 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 | 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 | 243 moves <- moves + 1 |
244 doUpdate: | |
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 | 249 cur <- (grid length) - width |
250 col <- 0 | |
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 | 253 cur <- cur + 1 |
254 col <- col + 1 | |
255 if: col = width { | |
256 col <- 0 | |
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 | 259 } |
260 } | |
32 | 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 | 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 | 299 lines <- #[] |
300 curline <- #[] | |
12 | 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 | 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 | 305 lines append: curline |
306 curline <- #[] | |
10 | 307 } else: { |
32 | 308 curline append: (cellTypes find: element) |
10 | 309 } |
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 | 312 cur <- (lines length) - 1 |
313 while: { cur >= 0 } do: { | |
314 curline <- (lines get: cur) | |
315 foreach: curline :idx el { | |
316 grid append: el | |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
317 } |
32 | 318 extra <- maxCol - (curline length) |
319 while: { extra > 0 } do: { | |
320 grid append: blank | |
321 extra <- extra - 1 | |
322 } | |
323 cur <- cur - 1 | |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
324 } |
32 | 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 | 330 if: fd < 0 { "" } else: { |
331 cur <- "" | |
332 part <- "" | |
333 while: { | |
334 part <- os read: fd 128 | |
335 part != "" | |
336 } do: { | |
337 cur <- cur . part | |
338 } | |
339 cur | |
340 } | |
341 } | |
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 | 350 getMove <- { |
29 | 351 ret <- os read: 0 1 |
352 while: {ret = "\n"} do: { | |
353 ret <- os read: 0 1 | |
354 } | |
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 | 358 main <- :args { |
359 if: (args length) < 2 { | |
360 print: "usage: sim filename\n" | |
361 } else: { | |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
362 verbose <- true |
8 | 363 text <- readFile: (args get: 1) |
14 | 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 | 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 | 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 | 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 | 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 } |