Mercurial > repos > icfp2012
annotate src/sim.tp @ 52:b0d89ee419c1
Add maximum moves check
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 15 Jul 2012 18:37:36 -0700 |
parents | 365c83ea7658 |
children | fbeedb3aa239 |
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 { |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
84 if: (cur eq: lambda) { |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
85 collected <- collected + 1 |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
86 mine addPoints: 25 |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
87 } |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
88 if: (cur eq: openLift) {mine succeeded!} |
33
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 |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
91 destination <- mine getCell: xPrime yPrime |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
92 if: (destination navigable: ) { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
93 consequenceOf: destination |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
94 writeMove: |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
95 } else: { |
35 | 96 if: (destination eq: rock) { |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
97 xPrimePrime <- xDelta * 2 + x |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
98 rockDestination <- mine getCell: xPrimePrime y |
35 | 99 if: (rockDestination eq: empty) { |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
100 mine setCell: xPrimePrime y rock |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
101 writeMove: |
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 } |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
105 |
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
|
106 } |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
107 clone <- { |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
108 myclone <- robot |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
109 myclone collected!: collected |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
110 myclone heldBreath!: heldBreath |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
111 myclone razors!: razors |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
112 myclone |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
113 } |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
114 } |
34
ac0df071afe7
Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
115 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
|
116 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
|
117 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
|
118 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
|
119 //commands set: "A" {mine ended!: true} |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
120 ret |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
121 } |
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
122 } |
11
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 |
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
126 cellTypes <- makeCellTypes: |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
127 |
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
128 state <- #{ |
6 | 129 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
|
130 _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
|
131 _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
|
132 _ended <- false |
52 | 133 _maxmoves <- in_width * in_height |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
134 |
40
f38437d22ebd
success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents:
36
diff
changeset
|
135 _succeeded <- false |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
136 ret <- #{ |
8 | 137 grid <- in_grid |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
138 width <- in_width |
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
139 height <- in_height |
23 | 140 calcIndex <- :x y { x + y * width } |
141 calcX <- :index {index % width} | |
142 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
|
143 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
|
144 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
|
145 } |
10 | 146 setCell <- :x y val { |
23 | 147 grid set: (calcIndex: x y) val |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
148 } |
47
ccaecf1d6425
correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
149 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
|
150 _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
|
151 } |
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
|
152 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
|
153 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
|
154 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
|
155 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
|
156 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
|
157 //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
|
158 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
|
159 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
|
160 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
|
161 //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
|
162 (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
|
163 } |
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 } |
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 } |
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 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
|
169 |
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 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
|
171 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
|
172 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
|
173 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
|
174 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
|
175 } |
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 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
|
178 //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
|
179 //(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
|
180 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
|
181 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
|
182 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
|
183 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
|
184 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
|
185 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
|
186 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
|
187 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
|
188 } |
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 } |
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 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
|
191 } |
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 getRobot <- { _robot } |
23 | 193 updatePos <- :obj Index { |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
194 obj x!: (calcX: Index) |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
195 obj y!: (calcY: Index) |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
196 } |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
197 lambdaCount <- 0 |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
198 water <- 0 |
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
199 flooding <- 0 |
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
200 waterproof <- 10 |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
201 moves <- #[] |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
202 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
|
203 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
|
204 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
|
205 ended <- {_ended} |
40
f38437d22ebd
success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents:
36
diff
changeset
|
206 succeeded <- {_succeeded} |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
207 succeeded! <- { |
48 | 208 _ended <- true |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
209 _succeeded <- true |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
210 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
|
211 } |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
212 doUpdate <- { |
40
f38437d22ebd
success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents:
36
diff
changeset
|
213 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
|
214 nextValue <- value |
40
f38437d22ebd
success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents:
36
diff
changeset
|
215 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
|
216 x <- calcX: index |
f38437d22ebd
success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents:
36
diff
changeset
|
217 y <- calcY: index |
f38437d22ebd
success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents:
36
diff
changeset
|
218 below <- getCell: x (y - 1) |
43
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
219 fallToSide <- :delta { |
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
220 side <- getCell: (x + delta) y |
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
221 belowSide <- getCell: (x + delta) (y - 1) |
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
222 if: (side eq: (cellTypes empty)) { |
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
223 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
|
224 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
|
225 nextValue <- (cellTypes empty) |
43
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
226 true |
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
227 } else: { false } |
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
228 } else: { false } |
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
229 } |
40
f38437d22ebd
success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents:
36
diff
changeset
|
230 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
|
231 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
|
232 setNextCell: x (y - 1) value |
43
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
233 } else: { if: (below eq: (cellTypes rock)) { |
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
234 if: (not: (fallToSide: 1)) {fallToSide: -1} |
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
235 } else: { if: (below eq: (cellTypes lambda)) { |
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
236 fallToSide: 1 |
1f583d85c8ed
rocks slide correctly now. rock movement is complete.
William Morgan <bill@mrgn.org>
parents:
42
diff
changeset
|
237 }}} // end if |
40
f38437d22ebd
success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents:
36
diff
changeset
|
238 } else: { |
f38437d22ebd
success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents:
36
diff
changeset
|
239 if: (value eq: (cellTypes closedLift)) { |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
240 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
|
241 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
|
242 } |
f38437d22ebd
success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents:
36
diff
changeset
|
243 } |
f38437d22ebd
success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents:
36
diff
changeset
|
244 } |
47
ccaecf1d6425
correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
245 _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
|
246 } |
47
ccaecf1d6425
correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
247 swapGrids <- { |
ccaecf1d6425
correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
248 tmp <- grid |
ccaecf1d6425
correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
249 grid <- _nextGrid |
ccaecf1d6425
correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
250 _nextGrid <- tmp |
ccaecf1d6425
correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
251 } |
ccaecf1d6425
correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
252 swapGrids: |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
253 } |
52 | 254 abort <- { |
255 _ended <- true | |
256 addPoints: (_robot collected) * 25 | |
257 } | |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
258 advance <- :roboCmd { |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
259 if: roboCmd = "A" { |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
260 moves append: roboCmd |
52 | 261 abort |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
262 } |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
263 |
47
ccaecf1d6425
correct reading and writing during update and test maps for verifying that.
William Morgan <bill@mrgn.org>
parents:
43
diff
changeset
|
264 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
|
265 _robot doCmd: roboCmd |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
266 score <- score - 1 |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
267 moves append: roboCmd |
35 | 268 doUpdate: |
52 | 269 if: (moves length) >= _maxmoves { |
270 abort | |
271 } | |
35 | 272 } |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
273 self |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
274 } |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
275 printGrid <- { |
32 | 276 cur <- (grid length) - width |
277 col <- 0 | |
278 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
|
279 os write: 2 ((grid get: cur) string) |
32 | 280 cur <- cur + 1 |
281 col <- col + 1 | |
282 if: col = width { | |
283 col <- 0 | |
284 cur <- cur - (width + width) | |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
285 os write: 2 "\n" |
23 | 286 } |
287 } | |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
288 os write: 2 "score: " . score . "\n" |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
289 os write: 2 "collected: " . (_robot collected) . "\n" |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
290 os write: 2 "moves: " |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
291 foreach: moves :idx m { |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
292 os write: 2 m |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
293 } |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
294 os write: 2 "\n" |
32 | 295 } |
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
|
296 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
|
297 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
|
298 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
|
299 if: (el isrobot) { |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
300 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
|
301 } 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
|
302 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
|
303 } |
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
|
304 } |
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
|
305 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
|
306 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
|
307 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
|
308 myclone waterproof!: waterproof |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
309 movesclone <- #[] |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
310 foreach: moves :idx el { |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
311 movesclone append: el |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
312 } |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
313 myclone moves!: movesclone |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
314 myclone score!: score |
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
315 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
|
316 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
|
317 } |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
318 } |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
319 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
|
320 _nextGrid append: el |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
321 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
|
322 _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
|
323 _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
|
324 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
|
325 } else: { |
f38437d22ebd
success is possible. W implemented. Rock movement started but not finished.
William Morgan <bill@mrgn.org>
parents:
36
diff
changeset
|
326 if: (el eq: (cellTypes lambda)) { |
44
0c09730c173e
Robot works on simple maps now
Mike Pavone <pavone@retrodev.com>
parents:
41
diff
changeset
|
327 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
|
328 } |
30
031d46ff76a9
minor clean up to use 'if' and 'not'
William Morgan <bill@mrgn.org>
parents:
29
diff
changeset
|
329 } |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
330 } |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
331 ret |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
332 } |
32 | 333 |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
334 fromStr <- :str { |
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
335 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
|
336 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
|
337 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
|
338 blank <- cellTypes empty |
32 | 339 lines <- #[] |
340 curline <- #[] | |
12 | 341 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
|
342 if: element = nl { |
32 | 343 col <- curline length |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
344 maxCol <- if: col > maxCol {col} else: {maxCol} |
32 | 345 lines append: curline |
346 curline <- #[] | |
10 | 347 } else: { |
32 | 348 curline append: (cellTypes find: element) |
10 | 349 } |
350 } | |
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
|
351 grid <- #[] |
32 | 352 cur <- (lines length) - 1 |
353 while: { cur >= 0 } do: { | |
354 curline <- (lines get: cur) | |
355 foreach: curline :idx el { | |
356 grid append: el | |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
357 } |
32 | 358 extra <- maxCol - (curline length) |
359 while: { extra > 0 } do: { | |
360 grid append: blank | |
361 extra <- extra - 1 | |
362 } | |
363 cur <- cur - 1 | |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
364 } |
32 | 365 new: grid maxCol (lines length) |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
366 } |
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
367 } |
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
368 |
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
|
369 readFd <- :fd { |
8 | 370 if: fd < 0 { "" } else: { |
371 cur <- "" | |
372 part <- "" | |
373 while: { | |
374 part <- os read: fd 128 | |
375 part != "" | |
376 } do: { | |
377 cur <- cur . part | |
378 } | |
379 cur | |
380 } | |
381 } | |
382 | |
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
|
383 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
|
384 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
|
385 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
|
386 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
|
387 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
|
388 } |
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
|
389 |
8 | 390 getMove <- { |
29 | 391 ret <- os read: 0 1 |
392 while: {ret = "\n"} do: { | |
393 ret <- os read: 0 1 | |
394 } | |
395 ret | |
3
bb29dcd46cbf
Put dummy code in placeholder source files. Create makefile.
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
396 } |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
397 |
8 | 398 main <- :args { |
399 if: (args length) < 2 { | |
400 print: "usage: sim filename\n" | |
401 } else: { | |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
402 verbose <- true |
8 | 403 text <- readFile: (args get: 1) |
14 | 404 print: text |
34
ac0df071afe7
Start debugging what bill was working on last night. Currently segfautls.
Mike Pavone <pavone@retrodev.com>
parents:
33
diff
changeset
|
405 //os close: 1 |
8 | 406 simState <- state fromStr: text |
30
031d46ff76a9
minor clean up to use 'if' and 'not'
William Morgan <bill@mrgn.org>
parents:
29
diff
changeset
|
407 while: { not: (simState ended: ) } do: { |
8 | 408 simState advance: (getMove: ) |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
409 if: verbose { |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
410 simState printGrid |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
411 } |
8 | 412 } |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
413 } |
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
414 } |
8 | 415 |
3
bb29dcd46cbf
Put dummy code in placeholder source files. Create makefile.
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
416 } |
11
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
417 } |