(include "Z_GenImg.lib") (define to-bench bench-hole s (while not-empty? next-cell) ) (define non-drop-move (verify (not-in-zone? bench-zone)) ) (define piece-to-bench (if (or (piece? $1) (piece? $2)) mark (to-bench) (create $1) back ) ) (define check-alloy-dir-dir (if (on-board? $3) $3 (verify (not (and enemy? (or (piece? $1) (piece? $2))))) (opposite $3) ) ) (define check-alloy-dir (if (on-board? $5) $5 (if (and enemy? (or (piece? $1) (piece? $2))) (check-alloy-dir-dir $3 $4 $5) $6 (check-alloy-dir-dir $3 $4 $6) else $6 ) ) ) (define check-alloy (if (or (piece? $1) (piece? $2)) (check-alloy-dir $3 $4 $5 $6 n s) (check-alloy-dir $3 $4 $5 $6 ne sw) (check-alloy-dir $3 $4 $5 $6 e w) (check-alloy-dir $3 $4 $5 $6 se nw) (check-alloy-dir $3 $4 $5 $6 s n) (check-alloy-dir $3 $4 $5 $6 sw ne) (check-alloy-dir $3 $4 $5 $6 w e) (check-alloy-dir $3 $4 $5 $6 nw se) ) ) (define try-capture (verify not-friend?) (if enemy? (check-alloy Copper CopperDragon Silver SilverDragon Gold GoldDragon) (check-alloy Copper CopperDragon Gold GoldDragon Silver SilverDragon) (check-alloy Silver SilverDragon Copper CopperDragon Gold GoldDragon) (check-alloy Silver SilverDragon Gold GoldDragon Copper CopperDragon) (check-alloy Gold GoldDragon Copper CopperDragon Silver SilverDragon) (check-alloy Gold GoldDragon Silver SilverDragon Copper CopperDragon) (piece-to-bench Pawn CompletedPawn) (piece-to-bench Copper CopperDragon) (piece-to-bench Silver SilverDragon) (piece-to-bench Gold GoldDragon) (piece-to-bench Zcannon Zcannon) (piece-to-bench Jumper Jumper) (piece-to-bench Wildcard Wildcard) ) ) (define promotes-to s s s s s n n n n n (try-capture) (add $1) ) (define step1 ((non-drop-move) $1 (try-capture) add) ) (define step1p ((non-drop-move) $1 (try-capture) add (promotes-to $2)) ) (define step1w ( (non-drop-move) $1 (try-capture) add (promotes-to CopperDragon) (promotes-to SilverDragon) (promotes-to GoldDragon) ) ) (define step1k ( (non-drop-move) $1 (try-capture) add (while empty? $1 (if (piece? King) add) ) ) ) (define step2 ((non-drop-move) $1 $1 (try-capture) add) ) (define step2h ((non-drop-move) $1 (verify empty?) $2 (try-capture) add) ((non-drop-move) $1 (verify empty?) $3 (try-capture) add) ) (define rider ( (non-drop-move) (while true $1 (try-capture) add (verify empty?) ) ) ) (define zrider ( (non-drop-move) $1 (while empty? add $1) (while true $1 (if enemy? (try-capture) add) (verify empty?) ) ) ) (define droppable ( (verify (in-zone? bench-zone)) a1 (while true (if empty? add) next-cell ) ) ) (define pawn-droppable ( (verify (in-zone? bench-zone)) $1 (if (on-board? s) s s s s s s s s) mark (while (on-board? n) (verify (or not-friend? (not-piece? Pawn))) n ) (verify (or not-friend? (not-piece? Pawn))) back (while true (if empty? add) n ) ) ) (define check-surround (if (on-board? $1) (verify (friend? $1)) ) ) (game (title "Copper, Silver, Gold: An Indestructible Metallic Alloy (board 1)") (players Red Cyan) (board (9x9shogiboard) (full-symmetry Cyan) ) (board-setup (Red (Pawn a3 b3 c3 d3 e3 f3 g3 h3 i3) (Copper b1 h1) (Silver c1 g1) (Gold d1 f1) (Jumper a1 i1) (Zcannon b2 h2) (Wildcard e2 x1 y1 z1) (King e1) ) (Cyan (Pawn a7 b7 c7 d7 e7 f7 g7 h7 i7) (Copper b9 h9) (Silver c9 g9) (Gold d9 f9) (Jumper a9 i9) (Zcannon b8 h8) (Wildcard e8 t9 u9 v9) (King e9) ) ) (turn-order Red Cyan) (loss-condition (Red Cyan) (pieces-remaining 0 King)) (loss-condition (Red Cyan) (captured King)) (loss-condition (Red Cyan) stalemated) (loss-condition (Red Cyan) repetition) (piece (name Pawn) (image_P) (moves (move-type normal) (step1p n CompletedPawn) (pawn-droppable a1) (pawn-droppable b1) (pawn-droppable c1) (pawn-droppable d1) (pawn-droppable e1) (pawn-droppable f1) (pawn-droppable g1) (pawn-droppable h1) (pawn-droppable i1) ) ) (piece (name CompletedPawn) (image_Q) (moves (move-type normal) (step1 n) (step1 e) (step1 s) (step1 w) (droppable) ; These are not droppable, but it corrects the values of the pieces ) ) (piece (name Copper) (image_C) (moves (move-type normal) (step1p n CopperDragon) (step1p nw CopperDragon) (step1p ne CopperDragon) (step1p s CopperDragon) (droppable) ) ) (piece (name CopperDragon) (image_D) (moves (move-type normal) (rider n) (rider nw) (rider ne) (rider s) (step1 e) (step1 w) (step1 sw) (step1 se) (droppable) ) ) (piece (name Silver) (image_S) (moves (move-type normal) (step1p n SilverDragon) (step1p nw SilverDragon) (step1p ne SilverDragon) (step1p sw SilverDragon) (step1p se SilverDragon) (droppable) ) ) (piece (name SilverDragon) (image_T) (moves (move-type normal) (rider n) (rider nw) (rider ne) (rider sw) (rider se) (step1 s) (step1 e) (step1 w) (droppable) ) ) (piece (name Gold) (image_G) (moves (move-type normal) (step1p n GoldDragon) (step1p nw GoldDragon) (step1p ne GoldDragon) (step1p w GoldDragon) (step1p e GoldDragon) (step1p s GoldDragon) (droppable) ) ) (piece (name GoldDragon) (image_H) (moves (move-type normal) (rider n) (rider nw) (rider ne) (rider w) (rider e) (rider s) (step1 sw) (step1 se) (droppable) ) ) (piece (name Jumper) (image_J) (moves (move-type normal) (step2 n) (step2 s) (step2 e) (step2 w) (step2h nw nw nw) (step2h se se se) (step2h ne ne ne) (step2h sw sw sw) (step2h n nw ne) (step2h s se sw) (step2h e ne se) (step2h w sw nw) (droppable) ) ) (piece (name Zcannon) (image_Z) (moves (move-type normal) (zrider n) (zrider s) (zrider e) (zrider w) (droppable) ) ) (piece (name Wildcard) (image_W) (moves (move-type normal) (step1w n) (step1w nw) (step1w ne) (droppable) ) ) (piece (name King) (image_K) (moves (move-type normal) (step1k n) (step1k ne) (step1k e) (step1k se) (step1k s) (step1k sw) (step1k w) (step1k nw) (move-type surrounded) ( (check-surround n) (check-surround ne) (check-surround e) (check-surround se) (check-surround s) (check-surround sw) (check-surround w) (check-surround nw) capture add ) ) ) ) (variant (title "Copper, Silver, Gold: An Indestructible Metallic Alloy (board 2)") (board-setup (Red (Pawn a4 b4 c4 d4 e4 f4 g4 h4 i4) (Copper b1 h1 b2 h2 b3 h3) (Silver c1 g1 c2 g2) (Gold d1 f1) (Zcannon a1 i1) (Wildcard x1 y1 z1) (King e1) ) (Cyan (Pawn a6 b6 c6 d6 e6 f6 g6 h6 i6) (Copper b9 h9 b8 h8 b7 h7) (Silver c9 g9 c8 g8) (Gold d9 f9) (Zcannon a9 i9) (Wildcard t9 u9 v9) (King e9) ) ) ) (variant (title "Copper, Silver, Gold: An Indestructible Metallic Alloy (board 3)") (move-priorities surrounded normal) (board-setup (Red (Jumper e3) (Copper b2 h2 b3 h3) (Silver c2 g2 c3 g3) (Gold d2 f2 d3 f3) (CopperDragon b1 h1) (SilverDragon c1 g1) (GoldDragon d1 f1) (Zcannon a1 i1 a3 i3) (Wildcard x1) (King e1) ) (Cyan (Jumper e7) (Copper b8 h8 b7 h7) (Silver c8 g8 c7 g7) (Gold d8 f8 d7 f7) (CopperDragon b9 h9) (SilverDragon c9 g9) (GoldDragon d9 f9) (Zcannon a9 i9 a7 i7) (Wildcard v9) (King e9) ) ) )