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

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


<< 太陽 | main | 2直線と平行のベクトル >>



折れ線の生成

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

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

 

 

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)|-|


    この記事に対するコメント