diff options
-rw-r--r-- | arc/chessboard.arc.t | 2 | ||||
-rw-r--r-- | chessboard.mu | 83 |
2 files changed, 83 insertions, 2 deletions
diff --git a/arc/chessboard.arc.t b/arc/chessboard.arc.t index 3fac1a7a..eb365b69 100644 --- a/arc/chessboard.arc.t +++ b/arc/chessboard.arc.t @@ -191,8 +191,6 @@ (new-trace "make-move") (run-code main (default-space:space-address <- new space:literal 30:literal/capacity) - ; hook up stdin - (stdin:channel-address <- init-channel 1:literal) ; fake screen (screen:terminal-address <- init-fake-terminal 20:literal 10:literal) ; initial position diff --git a/chessboard.mu b/chessboard.mu index 78d28038..4b1af9a6 100644 --- a/chessboard.mu +++ b/chessboard.mu @@ -393,3 +393,86 @@ F read-move-file: routine failed to pause after coming up (before any keys were warn: rank too high ] ] + +recipe make-move [ + default-space:address:array:location <- new location:type, 30:literal + b:address:array:address:array:character <- next-ingredient + m:address:move <- next-ingredient + from-file:integer <- get m:address:move/deref, from-file:offset +#? $print from-file:integer, [ #? 1 +#? ] #? 1 + from-rank:integer <- get m:address:move/deref, from-rank:offset +#? $print from-rank:integer, [ #? 1 +#? ] #? 1 + to-file:integer <- get m:address:move/deref, to-file:offset +#? $print to-file:integer, [ #? 1 +#? ] #? 1 + to-rank:integer <- get m:address:move/deref, to-rank:offset +#? $print to-rank:integer, [ #? 1 +#? ] #? 1 + f:address:array:character <- index b:address:array:address:array:character/deref, from-file:integer + src:address:character/square <- index-address f:address:array:character/deref, from-rank:integer + f:address:array:character <- index b:address:array:address:array:character/deref, to-file:integer + dest:address:character/square <- index-address f:address:array:character/deref, to-rank:integer +#? $print src:address:character/deref, [ #? 1 +#? ] #? 1 + dest:address:character/deref/square <- copy src:address:character/deref/square + src:address:character/deref/square <- copy 32:literal # ' ' + reply b:address:array:address:array:character/same-as-ingredient:0 +] + +scenario making-a-move [ + assume-screen 30:literal/width, 24:literal/height + run [ + # layout in memory: + # R P _ _ _ _ p r + # N P _ _ _ _ p n + # B P _ _ _ _ p b + # Q P _ _ _ _ p q + # K P _ _ _ _ p k + # B P _ _ _ _ p B + # N P _ _ _ _ p n + # R P _ _ _ _ p r + 1:address:array:integer/initial-position <- init-array 82:literal/R, 80:literal/P, 32:literal/blank, 32:literal/blank, 32:literal/blank, 32:literal/blank, 112:literal/p, 114:literal/r, 78:literal/N, 80:literal/P, 32:literal/blank, 32:literal/blank, 32:literal/blank, 32:literal/blank, 112:literal/p, 110:literal/n, 66:literal/B, 80:literal/P, 32:literal/blank, 32:literal/blank, 32:literal/blank, 32:literal/blank, 112:literal/p, 98:literal/b, 81:literal/Q, 80:literal/P, 32:literal/blank, 32:literal/blank, 32:literal/blank, 32:literal/blank, 112:literal/p, 113:literal/q, 75:literal/K, 80:literal/P, 32:literal/blank, 32:literal/blank, 32:literal/blank, 32:literal/blank, 112:literal/p, 107:literal/k, 66:literal/B, 80:literal/P, 32:literal/blank, 32:literal/blank, 32:literal/blank, 32:literal/blank, 112:literal/p, 98:literal/b, 78:literal/N, 80:literal/P, 32:literal/blank, 32:literal/blank, 32:literal/blank, 32:literal/blank, 112:literal/p, 110:literal/n, 82:literal/R, 80:literal/P, 32:literal/blank, 32:literal/blank, 32:literal/blank, 32:literal/blank, 112:literal/p, 114:literal/r + 2:address:array:address:array:character/board <- init-board 1:address:array:integer/initial-position + 3:address:move <- new move:type + 4:address:integer <- get-address 3:address:move/deref, from-file:offset + 4:address:integer/deref <- copy 6:literal/g + 5:address:integer <- get-address 3:address:move/deref, from-rank:offset + 5:address:integer/deref <- copy 1:literal/2 + 6:address:integer <- get-address 3:address:move/deref, to-file:offset + 6:address:integer/deref <- copy 6:literal/g + 7:address:integer <- get-address 3:address:move/deref, to-rank:offset + 7:address:integer/deref <- copy 3:literal/4 + 2:address:array:address:array:character/board <- make-move 2:address:array:address:array:character/board, 3:address:move + screen:address <- print-board screen:address, 2:address:array:address:array:character/board + ] + screen-should-contain [ + # 012345678901234567890123456789 + .8 | r n b q k b n r . + .7 | p p p p p p p p . + .6 | . + .5 | . + .4 | P . + .3 | . + .2 | P P P P P P P . + .1 | R N B Q K B N R . + . +---------------- . + . a b c d e f g h . + . . + . . + . . + . . + . . + . . + . . + . . + . . + . . + . . + . . + . . + . . + . . + ] +] |