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

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


<< 近づくと出現するオブジェクト | main | 振り子 >>



自動で近づき攻撃するオブジェクト

対象に対して一定の距離まで近づき、そこから遠距離攻撃を行うオブジェクトを作成するプログラムです

マウスカーソルに近づいて、弾か矢みたいなものを飛ばしてます

 

 

;ユニットデータ
ddim unitdt,5
unitdt(0)=1.0    ;生存フラグ
unitdt(1)=320.0    ;X座標
unitdt(2)=240.0    ;Y座標
unitdt(3)=0.5    ;移動スピード
unitdt(4)=0.0    ;方向
;銃データ
dim gundt,5
gundt(0)=60        ;射程距離
gundt(1)=0        ;インターバル現在値
gundt(2)=50        ;インターバル最大値
;弾丸データ
bulletmax=100
ddim bulletdt,7,bulletmax:bulletid=0
;処理開始
repeat
    color 255,255,255:boxf:color
    mux=mousex:muy=mousey
    den=sqrt(powf(mux-unitdt(1),2)+powf(muy-unitdt(2),2))
    if den>gundt(0){    ;射程距離まで近づく
        if gundt(1){
            gundt(1)--
        }
        rad=atan(muy-unitdt(2),mux-unitdt(1))
        unitdt(4)=rad
        unitdt(1)=cos(unitdt(4))*unitdt(3)+unitdt(1)
        unitdt(2)=sin(unitdt(4))*unitdt(3)+unitdt(2)
    }else{        ;攻撃
        if gundt(1){
            gundt(1)--
        }else{
            repeat bulletmax,bulletid:id=cnt
                if id>=bulletmax{id=0}
                if bulletdt(0,id)<1.0{
                    rad=atan(muy-unitdt(2),mux-unitdt(1))
                    bulletdt(0,id)=1.0        ;生存フラグ
                    bulletdt(1,id)=unitdt(1)    ;X座標
                    bulletdt(2,id)=unitdt(2)    ;Y座標
                    bulletdt(3,id)=rad        ;移動方向
                    bulletdt(4,id)=1.0        ;移動スピード
                    bulletdt(5,id)=150.0    ;持続時間
                    bulletid=id+1
                    break
                }
            loop
            gundt(1)=gundt(2)
        }
    }
    ;弾丸の処理
    repeat bulletmax
        if bulletdt(0,cnt)>=1.0{
            bulletdt(5,cnt)--
            if bulletdt(5,cnt)<1.0{
                bulletdt(0,cnt)=0.0
            }else{
                bulletdt(1,cnt)=cos(bulletdt(3,cnt))*bulletdt(4,cnt)+bulletdt(1,cnt)
                bulletdt(2,cnt)=sin(bulletdt(3,cnt))*bulletdt(4,cnt)+bulletdt(2,cnt)
                x=bulletdt(1,cnt):y=bulletdt(2,cnt)
                circle x-2,y-2,x+2,y+2
            }
        }
    loop
    x=unitdt(1):y=unitdt(2)
    circle x-4,y-4,x+4,y+4
    redraw:await 17:redraw 0
loop

 

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


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