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

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


<< 残像 | main | テイラー展開 >>



Pendulum Waves

糸の長さを少しずつ変えた振り子を複数同時に動かしたプログラムです

振り子の周期により様々な波が作り出されることから「Pendulum Waves」と呼ばれます

 


#module pendulum
    #deffunc pen_init double m_d,double m_angle,double m_x,double m_y,int m_n
        n=m_n
        ddim len,n
        ddim fx,n
        ddim fy,n
        ddim angle,2,n
        ddim ppos,2,n    ;球の位置

        m=1000.0    ;重さ
        g=9.81        ;重力
        dt=0.001    ;時間
        
        i=0
        repeat n,45
            l=4000000.0*g/powf(2.0*M_PI*cnt,2)
            len(i)=l
            fx(i)=m_x
            fy(i)=m_y
            angle(0,i)=m_angle,m_angle
            pen_setpos i
            i++
        loop
        return
    #deffunc pen_setpos int m_i
        ppos(0,m_i)=len(m_i)*sin(angle(0,m_i))+fx(m_i)
        ppos(1,m_i)=len(m_i)*cos(angle(0,m_i))+fy(m_i)
        return
    #deffunc pen_getpos array r_arr,int m_i
        r_arr(0,m_i)=ppos(0,m_i),ppos(1,m_i)
        return
    #deffunc pen_newAngle int m_i    ;振り子の角度
        angle(1,m_i)+=dt*(-m*g/len(m_i)*sin(angle(0,m_i)))
        angle(0,m_i)+=angle(1,m_i)*dt
        return
#global

#module graphic
    #deffunc gra_init    ;初期化
        gw=640        ;画面の横幅
        gh=480        ;画面の縦幅
        pnum=60        ;球の総数
        spd=5
        pen_init 400,-M_PI/4,gw/2,0,pnum
        return
    #deffunc gra_update        ;描写
        color 255,255,255:boxf 0,0,gw,gh:color
        repeat pnum:i=cnt
            repeat spd
                pen_newAngle i
            loop
        loop
        repeat pnum:i=cnt
            pen_setpos i
        loop
        ddim p,2,pnum
        repeat pnum:i=cnt
            pen_getpos p,i
            color 200,200,200:line gw/2,0,p(0,i),p(1,i)
            hsvcolor cnt*3,255,255:circle p(0,i)-8,p(1,i)-8,p(0,i)+8,p(1,i)+8
        loop
        return
#global

gra_init
repeat
    gra_update
    redraw:await 17:redraw 0
loop

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


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