; SP.def ver2.10 1991 1-20 ; by hangyo PCVAN @GDJ85261 SIG Orient ; ; 0. spec ; スライド・パズル。四角内に於きて一個の空白の利用により英文字の ; 并びを完成させる。縦横の長さは選択可能、但し各々一〜五迄。1byte文 ; 字使用の為目を悪くしやすい:-)。 ; ; 1. moving ; マクロ起動後以下の鍵が齣の移動を保証する。極めて使ひ憎き設定である。 ; [S] : カーソル左移動 ; [D] : カーソル右移動 ; [E] : カーソル上移動 ; [X] : カーソル下移動 ; [SPACE] : カーソル位置から空白目駈けて齣を打込む ; [Q] : 中断を保証する。続行の場合カウンタを 0 に戻す。 ; [P] : 完成の確認(a の上にカーソルをおくと、空白を文字で埋める) ; ; 2. bug ; default の4×3の枠を採用しないで、値を入力した場合、6以上で ; も受け付けてしまう(面倒臭いから対応してない)。 ; ; 3. thanks for... ; バッファに扱い方について、mtoyo ,t.k. 両氏の御教示に与った。で、 ; これはmtoyo version です。 ; * M 90 ^\ "" (s)? . mi[, wt[, dc[,wl[, mi=0, &a("sp:default 4x3 ok") (r==-1) ? { &m("sp:stop") . } (r==1) ? >T :R &g("culumn? 1-5") (r>0) ? yy=cc=r, ? >R :S &g("line ? 1-5") (r>0) ? { tt=ll=r, >U } ? >S :T yy=cc=4, ; 横の桁 1〜5 ; default tt=ll=3, ; 縦の行 1〜5 :U (wn!=0)? #X (wt!=0)? {&#Y(0)} #x #39 #< dc-, wl4, m="@@@@@@@@@@@@@@@@@@@@@@@@@", l=(yy*tt+$60), ; sapce char #<#n(yy+2){"*"} #x :A (ll==0)? {ll=tt, >B } #<#n"*"(yy){" "} "*" #m ll--, >A :B #<#n(yy+2){"*"} (yy+1){#s} (tt){#e} mi=1, :C (ll==0) ? {(yy-1){#d} #e ll=tt,>E} ; :D &r r%=yy*tt, c=(r+$61), (m.r=='@')?? >D m.r=c, (c==l)? { c=' ', } &?("%c",c) cc--, (cc==0)? {(yy){#s}#x ll--, cc=yy, } >C :E j=0, :F (j>(yy*tt-1))? >G ; m.j='@', j++, >F ; :G mi=0, ; a=0, :H &m("sp:%3d",a) &p; c=r, (r=='s')? #s ; left (r=='d')? #d ; rignt (r=='e')? #e ; up (r=='x')? #x ; down (r==$20)? &01 ; shot (r=='p')? >L ; win (r=='q')? >I ; quit >H ; :I &a("sp:%3d end",a) (r==1)? >J ? >G ; :J #x #39 (tt*2+2){#y} #X :K wl],dc], wt], mi], ; &d . ; Macro ends :L (cd!='a')? { &b(6) >H } k=cd, :M (ll==0) ? { ll=tt, #e (yy-1){ #d } #g &?("%c",l-$20) &a("sp:%3d good, remain",a) (r==1)? { >K } ? { >J } } (cc!=1) ? { ;; 不完全 (cd==k)? { #d k++, cc--, >M }? { &b(14) &w(4) &b(4)} cc=yy, ll=cc,>H } } ? { (yy-1){#s} #x k++,ll--, cc=yy, >M } >M ;-- 1: (cd=='*'||lx>=yy+1||ly>=tt+1) ? { &b(6) . } &s "+" ; check space exist. :A #s (cd=='*') ?>E ?{(cd==$20)?{&10.}?{>A}} ;chk left :B #d (cd=='*') ?>F ?{(cd==$20)?{&11.}?{>B}} ;chk rignt :C #e (cd=='*') ?>G ?{(cd==$20)?{&12.}?{>C}} ;chk up :D #x (cd=='*') ?>H ?{(cd==$20)?{&13.}?{>D}} ;chk dowm :E #d (cd=='+') ?>B ?>E ; not exit space, back to '@'. :F #s (cd=='+') ?>C ?>F :G #x (cd=='+') ?>D ?>G :H #e (cd=='+') ?{#g &b(6) &d.}?>H 10: ; left ;slide #d (cd=='+') ?{#g#g#s#u#d a++, &d.} ?{#h#d#u#s>^} 11: ; right #s (cd=='+') ?{#g a++, &d} ?{#g#d#u#s>^} 12: ; up #x (cd=='+') ?{#g#g#e#g#x#u#e#u#x a++, &d.} ?{#e#g#x#g#e#u#x#u >^} 13: ; down #e (cd=='+') ?{#g#g#x#g#e#u#x#u#e a++, &d.} ?{#x#g#e#g#x#u#e#u >^}