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

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


<< リッチエディットコントロール | main | aのn乗を素数で割った余り(周期性) >>



弾幕

SLG(シューティングゲーム)のような弾幕を再現したプログラムです

クリックすることで弾幕のパターンが切り替わります

 

 

#include "hgimg3.as"
hgsetreq SYSREQ_MAXOBJ,10000    ;オブジェクト最大数変更
hgini

#const patnum 1
#const csz 16

oncmd gosub *wm_lbuttondown, $0201
oncmd gosub *wm_lbuttonup, $0202

buffer 2,csz,csz*patnum
;アニメーション画像作成
boxf
x=0:y=0:deg=0
color 255,255,255:circle 0,0,csz-1,csz-1
setuv 0,0,csz-1,csz-1    ;登録テクスチャUV座標を指定
addspr sp0,1    ;2Dスプライトモデルを作成
settex csz,csz,0,-1    ;テクスチャを登録
;イベント作成
newevent evid    ;イベントリストを作成
event_prmon evid,PRMSET_MODE,OBJ_MOVE|OBJ_XFRONT    ;パラメータービット設定イベントを追加
event_wait evid,1    ;ウェイト
event_jump  evid,0    ;イベントの最初に戻る
;処理開始
screen 0
dim objiddt,1000:objfcsid=0
repeat length(objiddt)
    regobj objiddt(cnt),sp0    ;オブジェクトの登録
    setpos objiddt(cnt),-400,0
loop
spd=4
*main
    hgdraw:hgsync 17
    title"パターン:"+(flg+1)
    if wparam>0{
        gosub *mouseclick
    }
    goto *main
*wm_lbuttondown    ;マウスボタンを押す
    time=0
    return
*wm_lbuttonup    ;マウスボタンを離す
    flg++
    if flg>2:flg=0
    return
*mouseclick
    if flg=0{
        if time{
            time--
        }else{
            repeat 18
                rad=deg2rad(cnt*20)
                setevent objiddt(objfcsid),evid,0
                setpos objiddt(objfcsid),0,0
                setdir objiddt(objfcsid),cos(rad)*spd,sin(rad)*spd,0
                objfcsid++
                if objfcsid>=length(objiddt):objfcsid=0
            loop
            time=20
        }
    }else:if flg=1{
        if time{
            time--
        }else{

            rad=deg2rad(c1*10)
            setevent objiddt(objfcsid),evid,0
            setpos objiddt(objfcsid),0,0
            setdir objiddt(objfcsid),cos(rad)*spd,sin(rad)*spd,0
            objfcsid++
            if objfcsid>=length(objiddt):objfcsid=0
            rad=deg2rad(c1*10+180)
            setevent objiddt(objfcsid),evid,0
            setpos objiddt(objfcsid),0,0
            setdir objiddt(objfcsid),cos(rad)*spd,sin(rad)*spd,0
            objfcsid++
            if objfcsid>=length(objiddt):objfcsid=0
            c1++
        }
    }else:if flg=2{
        if time{
            time--
        }else{
            repeat 18
                rad=deg2rad(cnt*20+c1)
                setevent objiddt(objfcsid),evid,0
                setpos objiddt(objfcsid),0,0
                setdir objiddt(objfcsid),cos(rad)*spd,sin(rad)*spd,0
                objfcsid++
                if objfcsid>=length(objiddt):objfcsid=0
            loop
            time=6:c1+10
        }
    }
    return

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


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