ゲームを作りたい人のための ソースコード集

私がその日作った短めのソースを簡単な解説とともに載せていきます
ゲーム制作初心者にとって参考になるかもしれないソースが多いです





ゲーム木探索

オセロを使ったゲーム木探索アルゴリズムです

相手が三手先まで見て、最もひっくり返せる石の数が多い手を選びます

黒が自分、白が対戦相手です

 

 

#const global csz 64
#const global mc 8
#const global mr 8
#module
    ;石が置ける場所をチェック
    #defcfunc putcheck int x,int y,array bdmap,array dlst,int p
        ref=0
        d8x=-1,-1,0,1,1,1,0,-1
        d8y=0,-1,-1,-1,0,1,1,1
        if p=0{tp=1}else{tp=0}
        if bdmap(x,y)=-1{
            repeat length(d8x):d=cnt
                dlst(d)=0
                i=x+d8x(d)
                j=y+d8y(d)
                if 0<=i&i<mc&0<=j&j<mr{
                    if bdmap(i,j)=tp{
                        repeat
                            i+d8x(d)
                            j+d8y(d)
                            if 0<=i&i<mc&0<=j&j<mr{
                                if bdmap(i,j)=p{
                                    dlst(d)=1
                                    ref=1
                                    break
                                }else:if bdmap(i,j)=-1{
                                    break
                                }
                            }else{
                                break
                            }
                            await
                        loop
                    }
                }
            loop
        }
        return ref
    ;相手の石を裏返す
    #defcfunc stonechange int x,int y,array bdmap,array dlst,int p
        d8x=-1,-1,0,1,1,1,0,-1
        d8y=0,-1,-1,-1,0,1,1,1
        bdmap(x,y)=p
        ref=0
        repeat length(d8x):d=cnt
            if dlst(d)=0:continue
            i=x:j=y
            repeat
                i+d8x(d)
                j+d8y(d)
                if bdmap(i,j)=p{
                    break
                }else:if bdmap(i,j)=-1{
                    break
                }
                bdmap(i,j)=p
                ref++
            loop
        loop
        return ref
#global
dim bdmap,mc,mr
repeat mr:j=cnt
    repeat mc:i=cnt
        bdmap(i,j)=-1
    loop
loop
bdmap(3,3)=0
bdmap(4,4)=0
bdmap(4,3)=1
bdmap(3,4)=1
d8x=-1,-1,0,1,1,1,0,-1
d8y=0,-1,-1,-1,0,1,1,1
dim dlst,8

turnflg=0
buffer 2,mc*csz,mr*csz:color 1:boxf:color ,125
repeat mr:j=cnt
    y=j*csz+1
    repeat mc:i=cnt
        x=i*csz+1
        boxf x,y,x+csz-2,y+csz-2
    loop
loop

buffer 3,2*csz,csz:celdiv 3,csz,csz:boxf:x=0:y=0
color 1:circle x+4,y+4,x+csz-4,y+csz-4:x+csz
color 255,255,255:circle x+4,y+4,x+csz-4,y+csz-4:x+csz

screen 0,mc*csz,mr*csz:gmode 2
repeat
    if turnflg=0{
        gosub *playerturn
    }else{
        gosub *opponentturn
    }
    redraw:await 17:redraw 0
loop

*playerturn        ;自分ターン
    repeat
        ok1=k1:getkey k1,1:tk1=k1^ok1&k1:rk1=k1^ok1&ok1
        if tk1{
            putx=mousex/csz
            puty=mousey/csz
            putflg=putcheck(putx,puty,bdmap,dlst,0)
            if putflg=1{
                chgnum=stonechange(putx,puty,bdmap,dlst,0)
            }
            if putflg=1{
                turnflg=1
            }
        }
        gosub *boarddraw
        redraw:await 17:redraw 0
        if turnflg=1{
            break
        }
    loop
    return
*opponentturn    ;相手ターン
    bddtlen=mc*mr*4
    dim stbdmap,mc,mr
    dim edbdmap,mc,mr
    dim queue,8,100000
    dim q_bdmap,mc*mr,100000
    dim queuepart,2,3+1:queuepart(0,0)=0,1
    st=0:ed=1:turnflg=0:chkturn=0:turnnum=0
    queue(0,ed)=chgnum,i,j,st,d,turnflg,turnnum
    memcpy q_bdmap,bdmap,bddtlen
    repeat:turnnum=queue(6,st)+1    ;ゲーム木探索
        if turnnum<=3{
            if chkturn<turnnum{
                chkturn=turnnum
                queuepart(0,chkturn)=ed
            }
            memcpy stbdmap,q_bdmap,bddtlen,0,st*bddtlen
            turnflg=queue(5,st)^1
            repeat mr:j=cnt
                repeat mc:i=cnt
                    putflg=putcheck(i,j,stbdmap,dlst,turnflg)
                    if putflg=1{
                        memcpy edbdmap,stbdmap,bddtlen,0,0
                        chgnum=stonechange(i,j,edbdmap,dlst,turnflg)
                        queue(0,ed)=chgnum,i,j,st,d,turnflg,turnnum
                        
                        memcpy q_bdmap,edbdmap,bddtlen,ed*bddtlen,0
                        queuepart(1,chkturn)++
                        ed++
                    }
                loop
            loop
        }
        st++
        if st>=ed:break
        await
    loop
    if chkturn¥2=1{
    }else:if chkturn>1{
        chkturn-1
    }
    evalnum=-1:evalid=0

    ;3手先でひっくり返せる数が最も多い手を選ぶ
    repeat queuepart(1,chkturn),queuepart(0,chkturn)
        if evalnum<queue(0,cnt){
            evalid=cnt
            evalnum=queue(0,cnt)
        }
    loop
    if evalid>0{
        repeat
            if queue(3,evalid)=0{
                break
            }else{
                evalid=queue(3,evalid)
            }
        loop
        memcpy bdmap,q_bdmap,bddtlen,0,evalid*bddtlen
    }
    turnflg=0
    return
*boarddraw    ;盤面表示
    pos 0,0:gcopy 2,,,mc*csz,mr*csz
    repeat mr:j=cnt
        repeat mc:i=cnt
            if bdmap(i,j)>=0{
                pos i*csz,j*csz:celput 3,bdmap(i,j)
            }
        loop
    loop
    return

0
    posted by higashijugem 13:42comments(0)|-|





    角が丸い四角(線)

    線をひいて、角を丸めた四角形を描写するプログラムです

     


    mcenx=210.0        ;中心X
    mceny=150.0        ;中心Y
    mxlen=94.0        ;縦幅/2
    mylen=124.0        ;横幅/2
    magari=32.0        ;カーブの丸み具合
    fix=0.00001
    dx=-1,-1,1,1
    dy=1,-1,-1,1

    ldir=90:l2dir=ldir+90
    repeat 4
        sxlen=mxlen-magari
        sylen=mylen-magari
        clen=sqrt(powf(sxlen,2)+powf(sylen,2))
        cdir=atan(sylen*dy(cnt),sxlen*dx(cnt))
        ccrad=cos(cdir)
        csrad=sin(cdir)
        ccenx=ccrad*clen+mcenx
        cceny=csrad*clen+mceny
        lx=cos(deg2rad(ldir))*mxlen+mcenx
        ly=sin(deg2rad(ldir))*mylen+mceny
        
        l2crad=cos(deg2rad(l2dir))
        l2srad=sin(deg2rad(l2dir))
        line l2crad*sxlen-l2crad*magari+lx+fix,l2srad*sylen-l2srad*magari+ly+fix,lx+fix,ly+fix
        ddir=ldir+90
        repeat
            ldir+5
            rad=deg2rad(ldir)
            line cos(rad)*magari+ccenx,sin(rad)*magari+cceny
            if ldir>=ddir{
                ldir=ddir
                break
            }
        loop
        line cos(deg2rad(ldir))*mxlen+mcenx+fix,sin(deg2rad(ldir))*mylen+mceny+fix
        l2dir+90
    loop

    0
      posted by higashijugem 11:39comments(0)|-|





      通路生成(一本道)

      穴掘り法で一本道の通路を作成するプログラムです

       


      randomize
      mc=11:mr=11
      csz=24
      gsel 0
      dim mapdt,mc,mr
      dim dx,4:dx=-1,0,1,0
      dim dy,4:dy=0,-1,0,1
      repeat 4
          r0=rnd(4):r1=rnd(4)
          if r0!=r1{
              tmp=dx(r0):dx(r0)=dx(r1):dx(r1)=tmp
              tmp=dy(r0):dy(r0)=dy(r1):dy(r1)=tmp
          }
      loop
      stx=1:sty=1:max=(mc/2)*(mr/2)
      edx=mc-2:edy=mr-2
      mapdt(stx,sty-1)=1
      mapdt(edx,edy+1)=1
      dim stack,4,max
      id=0
      i=stx:j=sty
      ;穴掘り法
      mapdt(i,j)=1
      repeat
          if stack(3,id)=0{
              r=rnd(4)
              stack(2,id)=r
          }else{
              if stack(3,id)>=4{
                  stack(3,id)=0
                  id--
                  if id<=0:break
                  ttdir=stack(2,id)
                  mapdt(stack(0,id)+dx(ttdir),stack(1,id)+dy(ttdir))=0
                  mapdt(stack(0,id)+dx(ttdir)*2,stack(1,id)+dy(ttdir)*2)=0
                  i=stack(0,id):j=stack(1,id)
              }
              stack(2,id)++:if stack(2,id)>=4{stack(2,id)=0}
              r=stack(2,id)
          }
          ti=i+dx(r)*2
          tj=j+dy(r)*2
          stack(3,id)++
          if 0<=ti&ti<mc&0<=tj&tj<mr{
              if mapdt(ti,tj)=0{
                  stack(0,id)=i,j,r
                  mapdt(i+dx(r),j+dy(r))=1
                  mapdt(ti,tj)=1
                  i=ti:j=tj:id++
                  if i=edx&j=edy{
                      break
                  }
              }
          }
          await
      loop
      ;描写
      pget 3200:boxf:color
      repeat mr:cj=cnt
          repeat mc:ci=cnt
              pos ci*csz,cj*csz
              if mapdt(ci,cj)=0{
                  mes"■"
              }
          loop
      loop

      0
        posted by higashijugem 22:17comments(0)|-|





        穴掘り法

        「穴掘り法」というアルゴリズムを用いて迷路を作成するプログラムです

         


        randomize
        mc=17:mr=17
        csz=24
        dim mapdt,mc,mr
        dim dx,4:dx=-1,0,1,0
        dim dy,4:dy=0,-1,0,1
        stx=1:sty=1:max=(mc/2)*(mr/2)
        dim stack,4,max
        id=0
        i=stx:j=sty
        ;穴掘り法
        mapdt(i,j)=1
        repeat
            if stack(3,id)=0{
                r=rnd(4)
            }else{
                if stack(3,id)>4{
                    stack(3,id)=0
                    id--
                    if id<=0:break
                    i=stack(0,id):j=stack(1,id)
                }
                stack(2,id)++:if stack(2,id)>=4{stack(2,id)=0}
                r=stack(2,id)
            }
            ti=i+dx(r)*2
            tj=j+dy(r)*2
            flg=0
            stack(3,id)++
            if 0<=ti&ti<mc&0<=tj&tj<mr{
                if mapdt(ti,tj)=0{
                    stack(0,id)=i,j,r
                    mapdt(i+dx(r),j+dy(r))=1
                    mapdt(ti,tj)=1
                    i=ti:j=tj:id++
                }
            }
            await 1
        loop
        ;描写
        pget 3200:boxf:color
        repeat mr:j=cnt
            repeat mc:i=cnt
                pos i*csz,j*csz
                if mapdt(i,j)=0{
                    mes"■"
                }
            loop
        loop

        0
          posted by higashijugem 22:46comments(0)|-|





          波データ

          研究所の機器とかで見る波形データみたいなものを表示するプログラムです

          マウスの左右クリックやマウスホイールで、波の形を変えることができます



          buffer 2
          gsel 0
          ceny=240.0
          rad=deg2rad(0)
          sp=1
          hi=100
          tx=50.0
          ty=sin(rad)*100+ceny
          repeat
          title""+hi+", "+sp
              muw=mousew
              getkey k1,1
              getkey k2,2
              if muw<0{sp--}
              else:if muw>0{sp++}
              if k1{
                  hi+=1
              }
              if k2{
                  hi-=1
              }
              gsel 2
              pos 0,0:gcopy 0,,,640,480
              rad=deg2rad(cnt*sp)
              x=50.0
              y=sin(rad)*hi+ceny
              line x,y,tx+1,ty
              tx=x:ty=y
              gsel 0
              pos 1,0:gcopy 2,0,,640,480
              redraw:await 17:redraw 0
          loop

          0
            posted by higashijugem 06:09comments(0)|-|





            左右対称の線

            画面の真ん中を軸に、複数の線を鏡のように左右対称に描写するプログラムです

            白い線の角をドラッグすることで線を動かせます

             


            ;片側の線データ
            dim lndt,4,2
            cenx=320
            lndt(0,0)=200,240,cenx,80
            lndt(0,1)=cenx,400,200,240
            repeat
                color:boxf:color 255,255,255
                mux=mousex:muy=mousey
                ok1=k1:getkey k1,1:tk1=k1^ok1&k1:rk1=k1^ok1&ok1
                if tk1{    ;角をクリックで線を動かせる
                    pushct=-1
                    repeat 2
                        dis=sqrt(powf(lndt(2,cnt)-mux,2)+powf(lndt(3,cnt)-muy,2))
                        if dis<=10{
                            pushct=cnt
                            break
                        }
                    loop
                    if pushct<0{
                        dis=sqrt(powf(lndt(0,length2(lndt)-1)-mux,2)+powf(lndt(1,length2(lndt)-1)-muy,2))
                        if dis<=10{
                            pushct=length2(lndt)
                        }
                    }
                }
                if k1{
                    if 0=pushct{
                        lndt(3,pushct)=muy
                    }else:if pushct=length2(lndt){
                        lndt(1,pushct-1)=muy
                    }else:if 0<pushct&pushct<length2(lndt){
                        lndt(0,pushct-1)=mux:lndt(1,pushct-1)=muy
                        lndt(2,pushct)=mux:lndt(3,pushct)=muy
                    }
                }
                if rk1{
                    pushct=-1
                }
                ;左右対称に描写
                repeat length2(lndt)
                    ex=lndt(0,cnt):ey=lndt(1,cnt)
                    sx=lndt(2,cnt):sy=lndt(3,cnt)
                    color 255,255,255
                    line ex,ey,sx,sy
                    ex=(cenx-lndt(0,cnt))+cenx:ey=lndt(1,cnt)
                    sx=(cenx-lndt(2,cnt))+cenx:sy=lndt(3,cnt)
                    color 255
                    line ex,ey,sx,sy
                loop
                redraw:await 17:redraw 0
            loop

            0
              posted by higashijugem 21:58comments(0)|-|





              徐々に線引き

              時間経過とともに線が引かれるようにするプログラムです

              vnumの値を変えることで描写速度を変更できます

               

               

              randomize
              ddim lndt,4,20
              deg=0:sum=0
              repeat
                  x=cos(deg2rad(deg))*(rnd(151)+50)+320
                  y=sin(deg2rad(deg))*(rnd(151)+50)+240
                  deg+=rnd(20)+20
                  sum++
                  if deg>=360{
                      lndt(0,cnt)=x,y
                      lndt(2,0)=x,y
                      break
                  }else{
                      lndt(0,cnt)=x,y
                      lndt(2,cnt+1)=x,y
                  }
              loop
              ;描写
              vnum=30
              repeat sum
                  ex=0f+lndt(0,cnt):ey=0f+lndt(1,cnt)
                  sx=0f+lndt(2,cnt):sy=0f+lndt(3,cnt)
                  vx=(ex-sx)/vnum
                  vy=(ey-sy)/vnum
                  pos sx,sy
                  repeat vnum,1
                      line sx+vx*cnt,sy+vy*cnt
                      redraw:await 17:redraw 0
                  loop
              loop

              0
                posted by higashijugem 21:31comments(0)|-|





                多角形の内部の反射処理

                図形の内部にバウンドするボール(オブジェクト)を置き、それらを跳ね回らせるプログラムです

                マウスホイールを動かすことでボールが動く速度を変えることができます

                 


                randomize
                ddim bldt,4        ;ボールデータ
                bldt(0)=320.0,240.0,30.0,deg2rad(rnd(360))
                ddim wldt,5,4    ;壁データ
                wldt(0,0)=500,100,100,50
                wldt(0,1)=600,300,500,100
                wldt(0,2)=300,400,600,300
                wldt(0,3)=50,250,300,400
                wldt(0,4)=100,50,50,250
                repeat
                    color:boxf:color 255,255,255
                    tmuw=mousew
                    if tmuw<0{    ;速度変更
                        bldt(2)=limitf(bldt(2)-5,0,100)
                    }else:if tmuw>0{
                        bldt(2)=limitf(bldt(2)+5,0,100)
                    }
                    repeat length2(wldt)
                        line wldt(0,cnt),wldt(1,cnt),wldt(2,cnt),wldt(3,cnt)
                    loop
                    tspd=bldt(2)
                    pos bldt(0),bldt(1)
                    hh0=bldt(0):hh1=bldt(1):hh2=bldt(2):hh3=bldt(3)
                    repeat
                        ;線分交差判定
                        tblx=bldt(0)+(cos(bldt(3))*tspd)
                        tbly=bldt(1)+(sin(bldt(3))*tspd)
                        csflg=0:wlflg=0
                        repeat length2(wldt)+1:wlct=cnt:if wlct>=length2(wldt){wlct=0}
                            x1=0f+wldt(0,wlct):y1=0f+wldt(1,wlct):x2=0f+wldt(2,wlct):y2=0f+wldt(3,wlct)
                            x3=bldt(0):y3=bldt(1):x4=tblx:y4=tbly
                            d=(x2-x1)*(y4-y3)-(y2-y1)*(x4-x3)
                            if d<-0.00001|0.00001<d{
                                u=((x3-x1)*(y4-y3)-(y3-y1)*(x4-x3))/d
                                v=((x3-x1)*(y2-y1)-(y3-y1)*(x2-x1))/d
                                if (u>=0.0&u<=1.0)&(v>=0.0&v<=1.0){
                                    ;壁とボールの軌道の交点
                                    crsx=0f+x1+u*(x2-x1)
                                    crsy=0f+y1+u*(y2-y1)
                                    ;反射ベクトル計算
                                    wldir=atan(y1-y2,x1-x2)
                                    cnflg=0:twlct=wlct
                                    wlcos=cos(wldir):wlsin=sin(wldir)
                                    blcos=-cos(bldt(3)):blsin=-sin(bldt(3))
                                    l=(wlcos*wlcos+wlsin*wlsin)*2.0
                                    if l<-0.00001|0.00001<l{
                                        t=-(wlcos*blcos+wlsin*blsin)/(wlcos*wlcos+wlsin*wlsin)*2.0
                                    }else{
                                        t=-(wlcos*blcos+wlsin*blsin)
                                    }
                                    ;反射後の移動ベクトル
                                    x=blcos+t*wlcos:y=blsin+t*wlsin
                                    bldt(3)=atan(y,x)
                                    exspd=sqrt(powf(tblx-crsx,2)+powf(tbly-crsy,2))
                                    if exspd<1{exspd=1.0}
                                    tblx=crsx+cos(bldt(3))*exspd
                                    tbly=crsy+sin(bldt(3))*exspd
                                    csflg=1
                                }
                            }
                        loop
                        if csflg{
                            bldt(0)=crsx+cos(bldt(3))
                            bldt(1)=crsy+sin(bldt(3))
                            line bldt(0),bldt(1)
                            tspd=exspd
                        }else{
                            bldt(0)=tblx
                            bldt(1)=tbly
                            break
                        }
                        await
                    loop
                    ;描写
                    tx=bldt(0):ty=bldt(1)
                    line bldt(0),bldt(1)
                    circle tx-10,ty-10,tx+10,ty+10
                    redraw:await 17:redraw 0
                loop

                0
                  posted by higashijugem 18:16comments(0)|-|





                  2直線と平行のベクトル

                  二つの線分に対して平行の線を求めるプログラムです

                  マウスドラッグで線を動かすことで、常に平行線が再描写されてます

                   


                  ;線データ
                  ddim lndt,4,2
                  lndt(0,0)=100.0,100.0,320.0,240.0
                  lndt(0,1)=320.0,240.0,320.0,460.0
                  x1=0:y1=0:x2=0:y2=0
                  repeat
                      color:boxf
                      mux=mousex:muy=mousey
                      getkey k1,1
                      getkey k2,2
                      if k1{    ;左ドラッグで線を動かす
                          lndt(0,0)=0f+mux:lndt(1,0)=0f+muy
                      }
                      if k2{    ;右ドラッグで線を動かす
                          lndt(2,1)=0f+mux:lndt(3,1)=0f+muy
                      }
                      repeat 2
                          color 255,((cnt+1)/2)*255,((cnt+1)¥2)*255
                          line lndt(0,cnt),lndt(1,cnt),lndt(2,cnt),lndt(3,cnt)
                      loop
                      color 255,255,255
                      circle lndt(0,0)-20,lndt(1,0)-20,lndt(0,0)+20,lndt(1,0)+20,0
                      circle lndt(2,1)-20,lndt(3,1)-20,lndt(2,1)+20,lndt(3,1)+20,0
                      x1=lndt(0,0):y1=lndt(1,0)
                      x2=lndt(2,0):y2=lndt(3,0)
                      wldir1=atan(y2-y1,x2-x1)        ;線1のベクトル
                      x1=lndt(0,1):y1=lndt(1,1)
                      x2=lndt(2,1):y2=lndt(3,1)
                      wldir2=atan(y2-y1,x2-x1)        ;線2のベクトル
                      wldir3=(wldir1+wldir2)/2        ;線1と線2の平行ベクトル
                      ;平行ベクトルの描写
                      color ,255
                      line -cos(wldir3)*100+320,-sin(wldir3)*100+240,cos(wldir3)*100+320,sin(wldir3)*100+240
                      redraw:await 17:redraw 0
                  loop

                  0
                    posted by higashijugem 12:48comments(0)|-|





                    折れ線の生成

                    接続された線分を作成するプログラムです

                    線分上を左クリックすることで角が生成されていき、右クリックで角が消去されます

                     

                     

                    dim ldt,5,1000
                    ldt(0,0)=1,100,50
                    ldt(0,1)=1,500,400
                    repeat
                        ok1=k1:getkey k1,1:tk1=k1^ok1&k1:rk1=k1^ok1&ok1
                        ok2=k2:getkey k2,2:tk2=k2^ok2&k2
                        mux=mousex:muy=mousey
                        color 255,255,255:boxf:color
                        ;線分描写
                        repeat
                            if ldt(0,cnt)=0:break
                            sx=ldt(1,cnt)
                            sy=ldt(2,cnt)
                            dlen=sqrt(powf(sx-mux,2)+powf(sy-muy,2))
                            if dlen<10{
                                circle sx-10,sy-10,sx+10,sy+10,0
                            }
                            if cnt=0{
                                pos ldt(1,cnt),ldt(2,cnt)
                            }else{
                                line ldt(1,cnt),ldt(2,cnt)
                            }
                        loop
                        if tk1{
                            phid=-1
                            repeat
                                ;端の移動
                                if ldt(0,cnt)=0:break
                                sx=ldt(1,cnt)
                                sy=ldt(2,cnt)
                                dlen=sqrt(powf(sx-mux,2)+powf(sy-muy,2))
                                if dlen<10{
                                    phid=cnt
                                    break
                                }
                                if ldt(0,cnt+1)=0:break
                                ex=ldt(1,cnt+1)
                                ey=ldt(2,cnt+1)
                                dlen=sqrt(powf(ex-mux,2)+powf(ey-muy,2))
                                if dlen<10{
                                    phid=cnt+1
                                    break
                                }
                                ;角の生成
                                abx=ex-sx:aby=ey-sy            ;(直線の始点→直線の終点)ベクトル
                                apx=mux-sx:apy=muy-sy        ;(直線の始点→任意の点)ベクトル
                                d=absf(abx*apy-aby*apx)        ;ベクトルの外積
                                l=sqrt(powf(ex-sx,2)+powf(ey-sy,2))    ;始点〜終点の距離
                                if d!=0{
                                    if (d/l)<10{
                                        phid=cnt+1
                                        memcpy ldt,ldt,5*4*(1000-phid),5*4*phid,5*4*cnt
                                        break
                                    }
                                }
                                await
                            loop
                        }
                        if k1{
                            if phid>=0{
                                ldt(1,phid)=mux
                                ldt(2,phid)=muy
                            }
                        }
                        if rk1{
                            phid=-1
                        }
                        if tk2{    ;角の削除
                            repeat
                                if ldt(0,cnt)=0:break
                                sx=ldt(1,cnt)
                                sy=ldt(2,cnt)
                                dlen=sqrt(powf(sx-mux,2)+powf(sy-muy,2))
                                if dlen<10{
                                    phid=cnt+1
                                    memcpy ldt,ldt,5*4*(1000-phid),5*4*cnt,5*4*phid
                                    break
                                }
                            loop
                        }
                        redraw:await 17:redraw 0
                    loop

                    0
                      posted by higashijugem 18:10comments(0)|-|