[トップ][編集][ノート][編集履歴][一覧][最近の更新][->English]

HSPで将棋プログラムを作ろう!!サブルーチン群

*wnd
        #include "llmod.as"
        mref bmscr, 67  // BMSCR構造体
        hWnd = bmscr.13 // HSPウィンドウハンドル
        prm = hWnd, -16 // HSPのウィンドウスタイル
        dllproc "GetWindowLongA",prm,2,D_USER
        style = dllret  // 現在のウィンドウスタイルを取得
        style = style | 0x00010000      // WS_MAXIMIZEBOXを追加
        prm = hWnd, -16, style
        dllproc "SetWindowLongA",prm,3,D_USER   // 設定
        prm = hWnd, 3
        dllproc "ShowWindow", prm, 2, D_USER    // 最大化表示
        return

*st
        sdim kif,64000                                  ;内部表現の棋譜保存用変数
        dim ms,10,10 : dim mk,2,9 : dim mk2,2,9         ;msはマス、mkは持ち駒、mk2は評価関数で持ち駒の差分を知るための変数
        dim kiki,2,10,10                                ;kikiは利き、kiki.0.x.yはxy升の先手駒の利きの合計でkiki.1.x.yは後手
        sdim okte,64000,2                               ;okteは合法手を格納する。okte.0が先手でokte.1が後手用
        tesuu=0                                         ;手数
        ms.0.0=-7 : ms.1.0=-6 : ms.2.0=-5 : ms.3.0=-4 : ms.4.0=-1 : ms.5.0=-4 : ms.6.0=-5 : ms.7.0=-6 : ms.8.0=-7 : ms.1.1=-2 : ms.7.1=-3
        ms.0.2=-8 : ms.1.2=-8 : ms.2.2=-8 : ms.3.2=-8 : ms.4.2=-8 : ms.5.2=-8 : ms.6.2=-8 : ms.7.2=-8 : ms.8.2=-8
        repeat 9 : ms.cnt.6=8 : loop
        ms.1.7=3 : ms.7.7=2 : ms.0.8=7 : ms.1.8=6 : ms.2.8=5 : ms.3.8=4 : ms.4.8=1 : ms.5.8=4 : ms.6.8=5 : ms.7.8=6 : ms.8.8=7
;       mk.0.0=2,0,1,0,2,0,2,0,4,0,4,0,4,0,4,0,4,0
;       mk.0.0=2,2,1,1,2,2,2,2,4,4,4,4,4,4,4,4,4,4
;       dim ms,10,10 : ms.3.3=0 : ms.4.8=8 : mk.0.8=2 : mk.1.7=8
        return


*bh
        color 255,195,82
        boxf BX+281,BY-(3*KYS)+256,BX+420,BY+288        ;先手の駒台
        boxf BX+281,BY-(4*KYS)+128,BX+420,BY+128        ;後手の駒台
        boxf BX,BY,KXS*9+BX,KYS*9+BY
        color
        repeat 10
                line BX+(KXS*cnt),BY,BX+(KXS*cnt),BY+(KYS*9)
                line BX,BY+(KYS*cnt),BX+(KXS*9),BY+(KYS*cnt)
        loop
        return


*hh
        color : pos 480,0 : mes kif
        pos 580,0 : mes mxte : mes mxpnt
        repeat 9 : x=cnt
                repeat 9 : y=cnt
                        pos x*12+50,y*12+350 : mes kiki.0.x.y
                        pos x*12+200,y*12+350 : mes kiki.1.x.y
                loop
        loop
        return

*ks
        stick s,0
        if s&1 : if tesuu>0 : gosub *back : gosub *back
;       getkey g,37 : if g=1 : if tesuu>0 : gosub *back

;       if (tesuu\2)=1 : await 5 : gosub *ghsy1 : notesel okte.1 : notemax max : rnd r,max : te="" : noteget te,r : gosub *go           ;手がランダムのCPU
        if (tesuu\2)=1 : gosub *yomi1           ;1手読みCPU
        
        if s&4 {
;       getkey g,39 : if g=1 {
                if (tesuu\2)=0 : gosub *ghsy0 : notesel okte.0 : notemax max : rnd r,max : te="" : noteget te,r : gosub *go
                }
                
        if mousex<=((KXS*9)+BX) : if BX<=mousex : if BY<=mousey : if mousey<=((KYS*9)+BY) {             ;盤上の駒の操作
                if frksh=1 : if s&256 : tox=(mousex-BX)/KXS : toy=(mousey-BY)/KYS : tok=ms.tox.toy : gosub *nari : gosub *hk : gosub *hk : if in!-1 : frksh=0 : gosub *go : return : else : ms.tox.toy=tok : ms.frx.fry=frk : if man=1 : mk.0.frk++ : frk=0 : frksh=0 : man=0 : return : else : frk=0 : frksh=0 : return
                if frksh=0 : if s&256 : gosub *ghsy0 : gosub *ghsy1 : frx=(mousex-BX)/KXS : fry=(mousey-BY)/KYS : frk=ms.frx.fry : if frk!0 : ms.frx.fry=0 : frksh=1
                }
        
        if frksh=0 {                    ;駒台上の駒の操作       ここでの変数manは持ち駒を操作する場合、その駒を駒台からこのサブルーチンで1つ減らしてマウスで持った様に見せることにより *goでも余分に1つ駒が減るのを防ぐ為と、合法手でない手を指した場合の処理のところでこのサブルーチンで減らした分を戻す為のフラグ。 *goの終わりでmanを初期化
                repeat 9 : c=cnt
                        repeat mk.0.c
                                if c>1 : if mousex>=((mk.0.c-cnt)*10+BX+280+((c\2)*60)) : if mousex<=(((mk.0.c-cnt)*10+BX+280+((c\2)*60))+KXS) : if mousey>=(BY-(((9-c)/2)*KYS)+256) : if mousey<=((BY-(((9-c)/2)*KYS)+256)+KYS) : if s&256 : gosub *ghsy0 : frx=9 : fry=9 : frk=c : mk.0.c-- : frksh=1 : man=1 : break
                        loop
                loop
        }
        
        return

*nari   ;先手用だけ
        prm=0
        if (tesuu\2)=0 : if (frk!1)&(frk!4) : if frx!9 {
                if frk<=5 : if (toy<=2)|(fry<=2) : dialog "成りますか?",2 : if stat=6 : prm=1 : else : prm=0
                if (frk=7)|(frk=8) {
                                if toy=0 : prm=1
                                if (toy=1)|(toy=2) : dialog "成りますか?",2 : if stat=6 : prm=1 : else : prm=0
                                }
                if frk=6 {
                        if toy<=1 : prm=1
                        if toy=2 : dialog "成りますか?",2 : if stat=6 : prm=1 : else : prm=0
                        }
                }
        return

*hk     ;合法手リストに指した手があるか調べる
        if (frk>0)&(frk<9) : frk4="  "+frk
        if frk>9 : frk4=" "+frk
        if (tok>0)&(tok<9) : tok4="  "+tok
        if tok>9 : tok4=" "+tok
        if tok=0 : tok4="  "+tok
        
        if (frk<0)&(frk>-9) : frk4=" "+frk
        if frk<-9 : frk4=""+frk
        if (tok<0)&(tok>-9) : tok4=" "+tok
        if tok<-9 : tok4=""+tok
        te=""+tox+toy+frk4+prm+frx+fry+tok4
        if (tesuu\2)=0 : instr in,okte.0,te
        if (tesuu\2)=1 : instr in,okte.1,te
        return


*kh
        repeat 9 : x=cnt                        ;盤上の駒の表示
                repeat 9 : y=cnt
                        repeat 9 : z=(cnt*-1)
                                if ms.x.y=z : pos x*KXS+BX,y*KYS+BY : color 255,255,255 : gmode 4,KXS,KYS,255 : gcopy 2,(cnt-1)*KXS+1,KYS*3,KXS,KYS
                                if ms.x.y=cnt : pos x*KXS+BX,y*KYS+BY : color 255,255,255 : gmode 4,KXS,KYS,255 : gcopy 2,(cnt-1)*KXS+1,0,KXS,KYS
                        loop
                        repeat 7 : z=(cnt*-1)-12 : z2=cnt+12
                                if ms.x.y=z : pos x*KXS+BX,y*KYS+BY : color 255,255,255 : gmode 4,KXS,KYS,255 : gcopy 2,(z*-1-11)*KXS+1,KYS*4,KXS,KYS
                                if ms.x.y=z2 : pos x*KXS+BX,y*KYS+BY : color 255,255,255 : gmode 4,KXS,KYS,255 : gcopy 2,(z2-11)*KXS+1,KYS,KXS,KYS
                        loop
                loop
        loop
        
        repeat 9 : c=cnt                        ;駒台上の駒の表示
                repeat mk.0.c
                        if c>1 : if mk.0.c>0 : pos (mk.0.c-cnt)*10+BX+280+((c\2)*60),BY-(((9-c)/2)*KYS)+256 : color 255,255,255 : gmode 4,KXS,KYS,255 : gcopy 2,(c-1)*KXS+1,0,KXS,KYS
                loop
                repeat mk.1.c
                        if c>1 : if mk.1.c>0 : pos (mk.1.c-cnt)*10+BX+280+((c\2)*60),BY-((c/2)*KYS)+128 : color 255,255,255 : gmode 4,KXS,KYS,255 : gcopy 2,(c-1)*KXS+1,KYS*3,KXS,KYS
                loop
        loop
        
        if frksh=1 {                            ;マウスで動かしている駒の表示
                color 255,255,255
                if (frk>0)&(frk<9) : pos mousex-(KXS/2),mousey-(KYS/2) : gmode 4,KXS,KYS,255 : gcopy 2,(frk-1)*KXS+1,0,KXS,KYS
                if frk>9 : pos mousex-(KXS/2),mousey-(KYS/2) : gmode 4,KXS,KYS,255 : gcopy 2,(frk-11)*KXS+1,KYS,KXS,KYS
                if (frk<0)&(frk>-9) : pos mousex-(KXS/2),mousey-(KYS/2) : gmode 4,KXS,KYS,255 : gcopy 2,(frk*-1-1)*KXS+1,KYS*3,KXS,KYS
                if frk<-9 : pos mousex-(KXS/2),mousey-(KYS/2) : gmode 4,KXS,KYS,255 : gcopy 2,(frk*-1-11)*KXS+1,KYS*4,KXS,KYS
                }

        return


*go     ;指し手を表す文字列型変数teをもとに駒を動かす
        tox="" : strmid tox,te,0,1 : int tox
        toy="" : strmid toy,te,1,1 : int toy
        tok="" : strmid tok,te,2,3 : int tok
        prm="" : strmid prm,te,5,1 : int prm
        frx="" : strmid frx,te,6,1 : int frx
        fry="" : strmid fry,te,7,1 : int fry
        frk="" : strmid frk,te,8,3 : int frk
        if prm=1 {
                if (tesuu\2)=1 : tok-=10
                if (tesuu\2)=0 : tok+=10
                }
        ms.frx.fry=0 : frk=ms.tox.toy : ms.tox.toy=tok
        if man=0 : if frx=9 {
                if (tesuu\2)=0 : mk.0.tok--
                if (tesuu\2)=1 : tok=tok*-1 : mk.1.tok--
                }
        
        if frk>9 : frk-=10
        if frk<-9 : frk+=10
        if (tesuu\2)=0 : frk=frk*-1 : mk.0.frk++
        if (tesuu\2)=1 : mk.1.frk++

        kif+=""+te+"\n"
        if (tesuu\2)=0 : snd 0
        tesuu++ : man=0
        return


*back
        notesel kif : noteget te,tesuu-1 : notedel tesuu-1
        tox="" : strmid tox,te,0,1 : int tox
        toy="" : strmid toy,te,1,1 : int toy
        tok="" : strmid tok,te,2,3 : int tok
        prm="" : strmid prm,te,5,1 : int prm
        frx="" : strmid frx,te,6,1 : int frx
        fry="" : strmid fry,te,7,1 : int fry
        frk="" : strmid frk,te,8,3 : int frk
        ms.frx.fry=tok : ms.tox.toy=frk
        if frx=9 {
                if (tesuu\2)=1 : mk.0.tok++
                if (tesuu\2)=0 : tok=tok*-1 : mk.1.tok++
                }
        
        if frk>9 : frk-=10
        if frk<-9 : frk+=10
        if (tesuu\2)=1 : frk=frk*-1 : mk.0.frk--
        if (tesuu\2)=0 : mk.1.frk--
        
        tesuu--
        return


*ghsy1
        okte.1=""
        repeat 9 : x=cnt
                repeat 9 : y=cnt
                        ;**************************後手用****************************
                        if ms.x.y=-8 : x2=x : y2=y+1 : if ms.x2.y2>=0 : gosub *msx2y2
                        if ms.x.y=-7 {
                                repeat 8
                                        x2=x : y2=y+1+cnt
                                        if y2>8 : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y2 : break
                                        if ms.x2.y2=0 : gosub *msx2y2
                                loop
                                }
                        if ms.x.y=-6 : x2=x-1 : if x2>=0 : y2=y+2 : if ms.x2.y2>=0 : gosub *msx2y2
                        if ms.x.y=-6 : x2=x+1 : if x2<=8 : y2=y+2 : if ms.x2.y2>=0 : gosub *msx2y2

                        if ms.x.y=-5 : x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2>=0 : gosub *msx2y2                ;真下移動
                        if ms.x.y=-5 : x2=x-1 : y2=y-1 : if (x2>=0)&(y2>=0) : if ms.x2.y2>=0 : gosub *msx2y2    ;左上移動
                        if ms.x.y=-5 : x2=x-1 : y2=y+1 : if (x2>=0)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y2    ;左下移動
                        if ms.x.y=-5 : x2=x+1 : y2=y-1 : if (x2<=8)&(y2>=0) : if ms.x2.y2>=0 : gosub *msx2y2    ;右上移動
                        if ms.x.y=-5 : x2=x+1 : y2=y+1 : if (x2<=8)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y2    ;右下移動

                        if ms.x.y=-4 : x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2>=0 : gosub *msx2y2                ;真下移動
                        if ms.x.y=-4 : x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2>=0 : gosub *msx2y2                ;真上移動
                        if ms.x.y=-4 : x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2>=0 : gosub *msx2y2                ;真左移動
                        if ms.x.y=-4 : x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2>=0 : gosub *msx2y2                ;真右移動
                        if ms.x.y=-4 : x2=x-1 : y2=y+1 : if (x2>=0)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y2    ;左下移動
                        if ms.x.y=-4 : x2=x+1 : y2=y+1 : if (x2<=8)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y2    ;右下移動

                        if ms.x.y=-3 {
                                repeat 8                        ;左上方向
                                        x2=x-1-cnt : y2=y-1-cnt
                                        if (x2<0)|(y2<0) : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y2 : break
                                        if ms.x2.y2=0 : gosub *msx2y2
                                loop
                                repeat 8                        ;左下方向
                                        x2=x-1-cnt : y2=y+1+cnt
                                        if (x2<0)|(y2>8) : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y2 : break
                                        if ms.x2.y2=0 : gosub *msx2y2
                                loop
                                repeat 8                        ;右上方向
                                        x2=x+1+cnt : y2=y-1-cnt
                                        if (x2>8)|(y2<0) : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y2 : break
                                        if ms.x2.y2=0 : gosub *msx2y2
                                loop
                                repeat 8                        ;右下方向
                                        x2=x+1+cnt : y2=y+1+cnt
                                        if (x2>8)|(y2>8) : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y2 : break
                                        if ms.x2.y2=0 : gosub *msx2y2
                                loop
                                }

                        if ms.x.y=-2 {
                                repeat 8                        ;上方向
                                        x2=x : y2=y-1-cnt
                                        if y2<0 : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y2 : break
                                        if ms.x2.y2=0 : gosub *msx2y2
                                loop
                                repeat 8                        ;下方向
                                        x2=x : y2=y+1+cnt
                                        if y2>8 : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y2 : break
                                        if ms.x2.y2=0 : gosub *msx2y2
                                loop
                                repeat 8                        ;左方向
                                        x2=x-1-cnt : y2=y
                                        if x2<0 : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y2 : break
                                        if ms.x2.y2=0 : gosub *msx2y2
                                loop
                                repeat 8                        ;右方向
                                        x2=x+1+cnt : y2=y
                                        if x2>8 : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y2 : break
                                        if ms.x2.y2=0 : gosub *msx2y2
                                loop
                                }

                        if ms.x.y=-1 : x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2>=0 : gosub *msx2y2                ;真下移動
                        if ms.x.y=-1 : x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2>=0 : gosub *msx2y2                ;真上移動
                        if ms.x.y=-1 : x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2>=0 : gosub *msx2y2                ;真左移動
                        if ms.x.y=-1 : x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2>=0 : gosub *msx2y2                ;真右移動
                        if ms.x.y=-1 : x2=x-1 : y2=y-1 : if (x2>=0)&(y2>=0) : if ms.x2.y2>=0 : gosub *msx2y2    ;左上移動
                        if ms.x.y=-1 : x2=x-1 : y2=y+1 : if (x2>=0)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y2    ;左下移動
                        if ms.x.y=-1 : x2=x+1 : y2=y-1 : if (x2<=8)&(y2>=0) : if ms.x2.y2>=0 : gosub *msx2y2    ;右上移動
                        if ms.x.y=-1 : x2=x+1 : y2=y+1 : if (x2<=8)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y2    ;右下移動

                        if ms.x.y=-18 : x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2>=0 : gosub *msx2y29              ;真下移動
                        if ms.x.y=-18 : x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2>=0 : gosub *msx2y29              ;真上移動
                        if ms.x.y=-18 : x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2>=0 : gosub *msx2y29              ;真左移動
                        if ms.x.y=-18 : x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2>=0 : gosub *msx2y29              ;真右移動
                        if ms.x.y=-18 : x2=x-1 : y2=y+1 : if (x2>=0)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y29  ;左下移動
                        if ms.x.y=-18 : x2=x+1 : y2=y+1 : if (x2<=8)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y29  ;右下移動

                        if ms.x.y=-17 : x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2>=0 : gosub *msx2y29              ;真下移動
                        if ms.x.y=-17 : x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2>=0 : gosub *msx2y29              ;真上移動
                        if ms.x.y=-17 : x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2>=0 : gosub *msx2y29              ;真左移動
                        if ms.x.y=-17 : x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2>=0 : gosub *msx2y29              ;真右移動
                        if ms.x.y=-17 : x2=x-1 : y2=y+1 : if (x2>=0)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y29  ;左下移動
                        if ms.x.y=-17 : x2=x+1 : y2=y+1 : if (x2<=8)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y29  ;右下移動

                        if ms.x.y=-16 : x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2>=0 : gosub *msx2y29              ;真下移動
                        if ms.x.y=-16 : x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2>=0 : gosub *msx2y29              ;真上移動
                        if ms.x.y=-16 : x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2>=0 : gosub *msx2y29              ;真左移動
                        if ms.x.y=-16 : x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2>=0 : gosub *msx2y29              ;真右移動
                        if ms.x.y=-16 : x2=x-1 : y2=y+1 : if (x2>=0)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y29  ;左下移動
                        if ms.x.y=-16 : x2=x+1 : y2=y+1 : if (x2<=8)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y29  ;右下移動

                        if ms.x.y=-15 : x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2>=0 : gosub *msx2y29              ;真下移動
                        if ms.x.y=-15 : x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2>=0 : gosub *msx2y29              ;真上移動
                        if ms.x.y=-15 : x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2>=0 : gosub *msx2y29              ;真左移動
                        if ms.x.y=-15 : x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2>=0 : gosub *msx2y29              ;真右移動
                        if ms.x.y=-15 : x2=x-1 : y2=y+1 : if (x2>=0)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y29  ;左下移動
                        if ms.x.y=-15 : x2=x+1 : y2=y+1 : if (x2<=8)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y29  ;右下移動

                        if ms.x.y=-13 {
                                repeat 8                        ;左上方向
                                        x2=x-1-cnt : y2=y-1-cnt
                                        if (x2<0)|(y2<0) : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y29 : break
                                        if ms.x2.y2=0 : gosub *msx2y29
                                loop
                                repeat 8                        ;左下方向
                                        x2=x-1-cnt : y2=y+1+cnt
                                        if (x2<0)|(y2>8) : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y29 : break
                                        if ms.x2.y2=0 : gosub *msx2y29
                                loop
                                repeat 8                        ;右上方向
                                        x2=x+1+cnt : y2=y-1-cnt
                                        if (x2>8)|(y2<0) : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y29 : break
                                        if ms.x2.y2=0 : gosub *msx2y29
                                loop
                                repeat 8                        ;右下方向
                                        x2=x+1+cnt : y2=y+1+cnt
                                        if (x2>8)|(y2>8) : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y29 : break
                                        if ms.x2.y2=0 : gosub *msx2y29
                                loop
                                x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2>=0 : gosub *msx2y29              ;真下移動
                                x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2>=0 : gosub *msx2y29              ;真上移動
                                x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2>=0 : gosub *msx2y29              ;真左移動
                                x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2>=0 : gosub *msx2y29              ;真右移動
                                }

                        if ms.x.y=-12 {
                                repeat 8                        ;上方向
                                        x2=x : y2=y-1-cnt
                                        if y2<0 : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y29 : break
                                        if ms.x2.y2=0 : gosub *msx2y29
                                loop
                                repeat 8                        ;下方向
                                        x2=x : y2=y+1+cnt
                                        if y2>8 : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y29 : break
                                        if ms.x2.y2=0 : gosub *msx2y29
                                loop
                                repeat 8                        ;左方向
                                        x2=x-1-cnt : y2=y
                                        if x2<0 : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y29 : break
                                        if ms.x2.y2=0 : gosub *msx2y29
                                loop
                                repeat 8                        ;右方向
                                        x2=x+1+cnt : y2=y
                                        if x2>8 : break
                                        if ms.x2.y2<0 : break
                                        if ms.x2.y2>0 : gosub *msx2y29 : break
                                        if ms.x2.y2=0 : gosub *msx2y29
                                loop
                                x2=x-1 : y2=y-1 : if (x2>=0)&(y2>=0) : if ms.x2.y2>=0 : gosub *msx2y29  ;左上移動
                                x2=x-1 : y2=y+1 : if (x2>=0)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y29  ;左下移動
                                x2=x+1 : y2=y-1 : if (x2<=8)&(y2>=0) : if ms.x2.y2>=0 : gosub *msx2y29  ;右上移動
                                x2=x+1 : y2=y+1 : if (x2<=8)&(y2<=8) : if ms.x2.y2>=0 : gosub *msx2y29  ;右下移動
                                }
                loop
        loop
        
        
        notesel okte.1 : notemax max
        repeat max
                noteget te,cnt
                tox="" : strmid tox,te,0,1 : int tox
                toy="" : strmid toy,te,1,1 : int toy
                tok="" : strmid tok,te,2,3 : int tok
                prm="" : strmid prm,te,5,1 : int prm
                frx="" : strmid frx,te,6,1 : int frx
                fry="" : strmid fry,te,7,1 : int fry
                frk="" : strmid frk,te,8,3
                if toy>=6 : if tok=-8 : okte.1+=""+tox+toy+" -81"+frx+fry+frk+"\n"
                if toy=8 : if tok=-8 : notedel cnt
                if toy=8 : if tok=-7 : te=""+tox+toy+" -71"+frx+fry+frk : noteadd te,cnt,1
                if toy=7 : if tok=-7 : okte.1+=""+tox+toy+" -71"+frx+fry+frk+"\n"
                if toy=6 : if tok=-7 : okte.1+=""+tox+toy+" -71"+frx+fry+frk+"\n"
                if toy=6 : if tok=-6 : okte.1+=""+tox+toy+" -61"+frx+fry+frk+"\n"
                if toy>=7 : if tok=-6 : te=""+tox+toy+" -61"+frx+fry+frk : noteadd te,cnt,1
                if (toy>=6)|(fry>=6) : if tok=-5 : okte.1+=""+tox+toy+" -51"+frx+fry+frk+"\n"
                if (toy>=6)|(fry>=6) : if tok=-3 : okte.1+=""+tox+toy+" -31"+frx+fry+frk+"\n"
                if (toy>=6)|(fry>=6) : if tok=-2 : okte.1+=""+tox+toy+" -21"+frx+fry+frk+"\n"
        loop
        
        repeat 9 : x=cnt
                repeat 9 : y=cnt
                        if ms.x.y=-8 : nihu=1 : break   ;2歩チェック
                loop
                if nihu=0 {
                        repeat 9 : y=cnt
                                if mk.1.8>0 : if y!8 : if ms.x.y=0 : okte.1+=""+x+y+" -8099  0"+"\n"
                        loop
                }
                nihu=0
                repeat 9 : y=cnt
                        if mk.1.7>0 : if y!8 : if ms.x.y=0 : okte.1+=""+x+y+" -7099  0"+"\n"
                        if mk.1.6>0 : if y<7 : if ms.x.y=0 : okte.1+=""+x+y+" -6099  0"+"\n"
                        if mk.1.5>0 : if ms.x.y=0 : okte.1+=""+x+y+" -5099  0"+"\n"
                        if mk.1.4>0 : if ms.x.y=0 : okte.1+=""+x+y+" -4099  0"+"\n"
                        if mk.1.3>0 : if ms.x.y=0 : okte.1+=""+x+y+" -3099  0"+"\n"
                        if mk.1.2>0 : if ms.x.y=0 : okte.1+=""+x+y+" -2099  0"+"\n"
                loop
        loop
        
        return

*ghsy0
        okte.0=""
        repeat 9 : x=cnt
                repeat 9 : y=cnt
                        ;**************************先手用****************************
                        if ms.x.y=8 : x2=x : y2=y-1 : if ms.x2.y2<=0 : gosub *x2y2
                        if ms.x.y=7 {
                                repeat 8
                                        x2=x : y2=y-1-cnt
                                        if y2<0 : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y2 : break
                                        if ms.x2.y2=0 : gosub *x2y2
                                loop
                                }

                        if ms.x.y=6 : x2=x-1 : if x2>=0 : y2=y-2 : if ms.x2.y2<=0 : gosub *x2y2
                        if ms.x.y=6 : x2=x+1 : if x2<=8 : y2=y-2 : if ms.x2.y2<=0 : gosub *x2y2

                        if ms.x.y=5 : x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2<=0 : gosub *x2y2                   ;真上移動
                        if ms.x.y=5 : x2=x-1 : y2=y-1 : if (x2>=0)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y2       ;左上移動
                        if ms.x.y=5 : x2=x-1 : y2=y+1 : if (x2>=0)&(y2<=8) : if ms.x2.y2<=0 : gosub *x2y2       ;左下移動
                        if ms.x.y=5 : x2=x+1 : y2=y-1 : if (x2<=8)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y2       ;右上移動
                        if ms.x.y=5 : x2=x+1 : y2=y+1 : if (x2<=8)&(y2<=8) : if ms.x2.y2<=0 : gosub *x2y2       ;右下移動

                        if ms.x.y=4 : x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2<=0 : gosub *x2y2                   ;真下移動
                        if ms.x.y=4 : x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2<=0 : gosub *x2y2                   ;真上移動
                        if ms.x.y=4 : x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2<=0 : gosub *x2y2                   ;真左移動
                        if ms.x.y=4 : x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2<=0 : gosub *x2y2                   ;真右移動
                        if ms.x.y=4 : x2=x-1 : y2=y-1 : if (x2>=0)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y2       ;左上移動
                        if ms.x.y=4 : x2=x+1 : y2=y-1 : if (x2<=8)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y2       ;右上移動

                        if ms.x.y=3 {
                                repeat 8                        ;左上方向
                                        x2=x-1-cnt : y2=y-1-cnt
                                        if (x2<0)|(y2<0) : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y2 : break
                                        if ms.x2.y2=0 : gosub *x2y2
                                loop
                                repeat 8                        ;左下方向
                                        x2=x-1-cnt : y2=y+1+cnt
                                        if (x2<0)|(y2>8) : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y2 : break
                                        if ms.x2.y2=0 : gosub *x2y2
                                loop
                                repeat 8                        ;右上方向
                                        x2=x+1+cnt : y2=y-1-cnt
                                        if (x2>8)|(y2<0) : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y2 : break
                                        if ms.x2.y2=0 : gosub *x2y2
                                loop
                                repeat 8                        ;右下方向
                                        x2=x+1+cnt : y2=y+1+cnt
                                        if (x2>8)|(y2>8) : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y2 : break
                                        if ms.x2.y2=0 : gosub *x2y2
                                loop
                                }

                        if ms.x.y=2 {
                                repeat 8                        ;上方向
                                        x2=x : y2=y-1-cnt
                                        if y2<0 : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y2 : break
                                        if ms.x2.y2=0 : gosub *x2y2
                                loop
                                repeat 8                        ;下方向
                                        x2=x : y2=y+1+cnt
                                        if y2>8 : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y2 : break
                                        if ms.x2.y2=0 : gosub *x2y2
                                loop
                                repeat 8                        ;左方向
                                        x2=x-1-cnt : y2=y
                                        if x2<0 : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y2 : break
                                        if ms.x2.y2=0 : gosub *x2y2
                                loop
                                repeat 8                        ;右方向
                                        x2=x+1+cnt : y2=y
                                        if x2>8 : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y2 : break
                                        if ms.x2.y2=0 : gosub *x2y2
                                loop
                                }

                        if ms.x.y=1 : x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2<=0 : gosub *x2y2                   ;真下移動
                        if ms.x.y=1 : x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2<=0 : gosub *x2y2                   ;真上移動
                        if ms.x.y=1 : x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2<=0 : gosub *x2y2                   ;真左移動
                        if ms.x.y=1 : x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2<=0 : gosub *x2y2                   ;真右移動
                        if ms.x.y=1 : x2=x-1 : y2=y-1 : if (x2>=0)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y2       ;左上移動
                        if ms.x.y=1 : x2=x-1 : y2=y+1 : if (x2>=0)&(y2<=8) : if ms.x2.y2<=0 : gosub *x2y2       ;左下移動
                        if ms.x.y=1 : x2=x+1 : y2=y-1 : if (x2<=8)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y2       ;右上移動
                        if ms.x.y=1 : x2=x+1 : y2=y+1 : if (x2<=8)&(y2<=8) : if ms.x2.y2<=0 : gosub *x2y2       ;右下移動

                        if ms.x.y=18 : x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2<=0 : gosub *x2y29                 ;真下移動
                        if ms.x.y=18 : x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2<=0 : gosub *x2y29                 ;真上移動
                        if ms.x.y=18 : x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2<=0 : gosub *x2y29                 ;真左移動
                        if ms.x.y=18 : x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2<=0 : gosub *x2y29                 ;真右移動
                        if ms.x.y=18 : x2=x-1 : y2=y-1 : if (x2>=0)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y29     ;左上移動
                        if ms.x.y=18 : x2=x+1 : y2=y-1 : if (x2<=8)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y29     ;右上移動

                        if ms.x.y=17 : x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2<=0 : gosub *x2y29                 ;真下移動
                        if ms.x.y=17 : x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2<=0 : gosub *x2y29                 ;真上移動
                        if ms.x.y=17 : x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2<=0 : gosub *x2y29                 ;真左移動
                        if ms.x.y=17 : x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2<=0 : gosub *x2y29                 ;真右移動
                        if ms.x.y=17 : x2=x-1 : y2=y-1 : if (x2>=0)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y29     ;左上移動
                        if ms.x.y=17 : x2=x+1 : y2=y-1 : if (x2<=8)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y29     ;右上移動

                        if ms.x.y=16 : x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2<=0 : gosub *x2y29                 ;真下移動
                        if ms.x.y=16 : x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2<=0 : gosub *x2y29                 ;真上移動
                        if ms.x.y=16 : x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2<=0 : gosub *x2y29                 ;真左移動
                        if ms.x.y=16 : x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2<=0 : gosub *x2y29                 ;真右移動
                        if ms.x.y=16 : x2=x-1 : y2=y-1 : if (x2>=0)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y29     ;左上移動
                        if ms.x.y=16 : x2=x+1 : y2=y-1 : if (x2<=8)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y29     ;右上移動

                        if ms.x.y=15 : x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2<=0 : gosub *x2y29                 ;真下移動
                        if ms.x.y=15 : x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2<=0 : gosub *x2y29                 ;真上移動
                        if ms.x.y=15 : x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2<=0 : gosub *x2y29                 ;真左移動
                        if ms.x.y=15 : x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2<=0 : gosub *x2y29                 ;真右移動
                        if ms.x.y=15 : x2=x-1 : y2=y-1 : if (x2>=0)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y29     ;左上移動
                        if ms.x.y=15 : x2=x+1 : y2=y-1 : if (x2<=8)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y29     ;右上移動

                        if ms.x.y=13 {
                                repeat 8                        ;左上方向
                                        x2=x-1-cnt : y2=y-1-cnt
                                        if (x2<0)|(y2<0) : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y29 : break
                                        if ms.x2.y2=0 : gosub *x2y29
                                loop
                                repeat 8                        ;左下方向
                                        x2=x-1-cnt : y2=y+1+cnt
                                        if (x2<0)|(y2>8) : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y29 : break
                                        if ms.x2.y2=0 : gosub *x2y29
                                loop
                                repeat 8                        ;右上方向
                                        x2=x+1+cnt : y2=y-1-cnt
                                        if (x2>8)|(y2<0) : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y29 : break
                                        if ms.x2.y2=0 : gosub *x2y29
                                loop
                                repeat 8                        ;右下方向
                                        x2=x+1+cnt : y2=y+1+cnt
                                        if (x2>8)|(y2>8) : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y29 : break
                                        if ms.x2.y2=0 : gosub *x2y29
                                loop
                                x2=x : y2=y+1 : if y2<=8 : if ms.x2.y2<=0 : gosub *x2y29                        ;真下移動
                                x2=x : y2=y-1 : if y2>=0 : if ms.x2.y2<=0 : gosub *x2y29                        ;真上移動
                                x2=x-1 : y2=y : if x2>=0 : if ms.x2.y2<=0 : gosub *x2y29                        ;真左移動
                                x2=x+1 : y2=y : if x2<=8 : if ms.x2.y2<=0 : gosub *x2y29                        ;真右移動
                                }

                        if ms.x.y=12 {
                                repeat 8                        ;上方向
                                        x2=x : y2=y-1-cnt
                                        if y2<0 : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y29 : break
                                        if ms.x2.y2=0 : gosub *x2y29
                                loop
                                repeat 8                        ;下方向
                                        x2=x : y2=y+1+cnt
                                        if y2>8 : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y29 : break
                                        if ms.x2.y2=0 : gosub *x2y29
                                loop
                                repeat 8                        ;左方向
                                        x2=x-1-cnt : y2=y
                                        if x2<0 : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y29 : break
                                        if ms.x2.y2=0 : gosub *x2y29
                                loop
                                repeat 8                        ;右方向
                                        x2=x+1+cnt : y2=y
                                        if x2>8 : break
                                        if ms.x2.y2>0 : break
                                        if ms.x2.y2<0 : gosub *x2y29 : break
                                        if ms.x2.y2=0 : gosub *x2y29
                                loop
                                x2=x-1 : y2=y-1 : if (x2>=0)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y29            ;左上移動
                                x2=x-1 : y2=y+1 : if (x2>=0)&(y2<=8) : if ms.x2.y2<=0 : gosub *x2y29            ;左下移動
                                x2=x+1 : y2=y-1 : if (x2<=8)&(y2>=0) : if ms.x2.y2<=0 : gosub *x2y29            ;右上移動
                                x2=x+1 : y2=y+1 : if (x2<=8)&(y2<=8) : if ms.x2.y2<=0 : gosub *x2y29            ;右下移動
                                }
                loop
        loop
        
                
        notesel okte.0 : notemax max
        repeat max
                noteget te,cnt
                tox="" : strmid tox,te,0,1 : int tox
                toy="" : strmid toy,te,1,1 : int toy
                tok="" : strmid tok,te,2,3 : int tok
                prm="" : strmid prm,te,5,1 : int prm
                frx="" : strmid frx,te,6,1 : int frx
                fry="" : strmid fry,te,7,1 : int fry
                frk="" : strmid frk,te,8,3
                if toy<=2 : if tok=8 : okte.0+=""+tox+toy+"  81"+frx+fry+frk+"\n"
                if toy=0 : if tok=8 : notedel cnt
                if toy=0 : if tok=7 : te=""+tox+toy+"  71"+frx+fry+frk : noteadd te,cnt,1
                if toy=1 : if tok=7 : okte.0+=""+tox+toy+"  71"+frx+fry+frk+"\n"
                if toy=2 : if tok=7 : okte.0+=""+tox+toy+"  71"+frx+fry+frk+"\n"
                if toy=2 : if tok=6 : okte.0+=""+tox+toy+"  61"+frx+fry+frk+"\n"
                if toy<=1 : if tok=6 : te=""+tox+toy+"  61"+frx+fry+frk : noteadd te,cnt,1
                if (toy<=2)|(fry<=2) : if tok=5 : okte.0+=""+tox+toy+"  51"+frx+fry+frk+"\n"
                if (toy<=2)|(fry<=2) : if tok=3 : okte.0+=""+tox+toy+"  31"+frx+fry+frk+"\n"
                if (toy<=2)|(fry<=2) : if tok=2 : okte.0+=""+tox+toy+"  21"+frx+fry+frk+"\n"
        loop
        
        
        repeat 9 : x=cnt
                repeat 9 : y=cnt
                        if ms.x.y=8 : nihu=1 : break    ;2歩チェック
                loop
                if nihu=0 {
                        repeat 9 : y=cnt
                                if mk.0.8>0 : if y!0 : if ms.x.y=0 : okte.0+=""+x+y+"  8099  0"+"\n"
                        loop
                }
                nihu=0
                repeat 9 : y=cnt
                        if mk.0.7>0 : if y!0 : if ms.x.y=0 : okte.0+=""+x+y+"  7099  0"+"\n"
                        if mk.0.6>0 : if y>1 : if ms.x.y=0 : okte.0+=""+x+y+"  6099  0"+"\n"
                        if mk.0.5>0 : if ms.x.y=0 : okte.0+=""+x+y+"  5099  0"+"\n"
                        if mk.0.4>0 : if ms.x.y=0 : okte.0+=""+x+y+"  4099  0"+"\n"
                        if mk.0.3>0 : if ms.x.y=0 : okte.0+=""+x+y+"  3099  0"+"\n"
                        if mk.0.2>0 : if ms.x.y=0 : okte.0+=""+x+y+"  2099  0"+"\n"
                loop
        loop
        
        return


*msx2y2         ;ms.x.y>-9の時用
        if ms.x2.y2<9 : okte.1+=""+x2+y2+" "+ms.x.y+"0"+x+y+"  "+ms.x2.y2+"\n"
        if ms.x2.y2>9 : okte.1+=""+x2+y2+" "+ms.x.y+"0"+x+y+" "+ms.x2.y2+"\n"
        return

*msx2y29        ;ms.x.y<-9の時用
        if ms.x2.y2<9 : okte.1+=""+x2+y2+""+ms.x.y+"0"+x+y+"  "+ms.x2.y2+"\n"
        if ms.x2.y2>9 : okte.1+=""+x2+y2+""+ms.x.y+"0"+x+y+" "+ms.x2.y2+"\n"
        return

*x2y2           ;ms.x.y<9の時用
        if ms.x2.y2=0 : okte.0+=""+x2+y2+"  "+ms.x.y+"0"+x+y+"  "+ms.x2.y2+"\n" : return
        if ms.x2.y2>-9 : okte.0+=""+x2+y2+"  "+ms.x.y+"0"+x+y+" "+ms.x2.y2+"\n"
        if ms.x2.y2<-9 : okte.0+=""+x2+y2+"  "+ms.x.y+"0"+x+y+""+ms.x2.y2+"\n"
        return

*x2y29          ;ms.x.y>9の時用
        if ms.x2.y2=0 : okte.0+=""+x2+y2+" "+ms.x.y+"0"+x+y+"  "+ms.x2.y2+"\n" : return
        if ms.x2.y2>-9 : okte.0+=""+x2+y2+" "+ms.x.y+"0"+x+y+" "+ms.x2.y2+"\n"
        if ms.x2.y2<-9 : okte.0+=""+x2+y2+" "+ms.x.y+"0"+x+y+""+ms.x2.y2+"\n"
        return

*kr0
        kiki.0.x2.y2++
        return

*kr1
        kiki.1.x2.y2++
        return

*yomi1
        gosub *ghsy1 : notesel okte.1 : notemax max : sdim mxte,64000 : mxpnt=-10000            ;mxteは後手の最善手を格納する変数
        repeat 9 : mk2.0.cnt=mk.0.cnt : mk2.1.cnt=mk.1.cnt : loop
        repeat max
                pnt=0   ;評価関数で使う変数の初期化 pntはポイント mxpntはマックスポイント
;               await : redraw 0 : color 255,255,255 : boxf : color
;               gosub *bh               ;盤表示
                notesel okte.1 : noteget te,cnt : gosub *go : gosub *hyouka
;               gosub *kh               ;駒表示
;               gosub *hh               ;変数表示
                title ""+cnt
;               redraw 1
                gosub *back
        loop
        await 600 : notesel mxte : notemax max : rnd r,max : te="" : noteget te,r : gosub *go : snd 0   ;最善手リストからランダムに選んで指す
        return

*hyouka
        ;プラスの評価
        repeat 9
                if cnt>0 : if mk.1.cnt>mk2.1.cnt : pnt+=100
        loop
        
        ;マイナスの評価
        
        
        if pnt=mxpnt : mxte+=""+te+"\n"
        if pnt>mxpnt : sdim mxte,64000 : mxpnt=pnt : mxte+=""+te+"\n"
        return