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

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


<< ゲーム木探索 | main | アンチエイリアス付きの直線 >>



多次元配列の拡張

整数型、実数型、文字列型の多次元配列を拡張するプログラムです

要素数を増やしたり次元数を増やすことができます

 


#module
#deffunc arrayset array setarr,array getarr,array len
    repeat len(0):cnt0=cnt
        if len(1)<1:setarr(cnt0)=getarr(cnt0)
        repeat len(1):cnt1=cnt
            if len(2)<1:setarr(cnt0,cnt1)=getarr(cnt0,cnt1)
            repeat len(2):cnt2=cnt
                if len(3)<1:setarr(cnt0,cnt1,cnt2)=getarr(cnt0,cnt1,cnt2)
                repeat len(3):cnt3=cnt
                    setarr(cnt0,cnt1,cnt2,cnt3)=getarr(cnt0,cnt1,cnt2,cnt3)
                loop
            loop
        loop
    loop
    return
;int,double,strの配列を拡張する、引数は1次元〜4次元の要素数
#deffunc arr2extension array resarr,int len0,int len1,int len2,int len3
    reslen=length(resarr),length2(resarr),length3(resarr),length4(resarr)
    tmplen=len0,len1,len2,len3
    arraytype=vartype(resarr)
    if arraytype=vartype("int"){
        dtlen=4
        dim tmparr,len0,len1,len2,len3
    }else:if arraytype=vartype("double"){
        dtlen=8
        ddim tmparr,len0,len1,len2,len3
    }else:if arraytype=vartype("str"){
        sdim tmparr,varsize(resarr),len0,len1,len2,len3
    }
    if arraytype=vartype("int")|arraytype=vartype("double"){
        cplen=dtlen:ptlen=dtlen
        repeat 4
            if reslen(cnt)>0:cplen*reslen(cnt)
            if tmplen(cnt)>0:ptlen*tmplen(cnt)
        loop
        maxdtlen=ptlen:flg=0
        repeat 3
            i=3-cnt
            if tmplen(i)>0{
                ptlen/tmplen(i)
            }
            if reslen(i)>0{
                cplen/reslen(i)
                repeat reslen(i)
                    memcpy tmparr,resarr,cplen,ptlen*cnt,cplen*cnt
                loop
            }
        loop
    }else:if arraytype=vartype("str"){    ;文字列型はmemcpyを使えないので別途処理
        arrayset tmparr,resarr,reslen
    }
    if arraytype=vartype("int"){
        dim resarr,len0,len1,len2,len3
        memcpy resarr,tmparr,maxdtlen
    }else:if arraytype=vartype("double"){
        ddim resarr,len0,len1,len2,len3
        memcpy resarr,tmparr,maxdtlen
    }else:if arraytype=vartype("str"){
        sdim resarr,varsize(tmparr),len0,len1,len2,len3
        arrayset resarr,tmparr,tmplen
    }
    return
#global
dim a,2,2    ;整数型配列
a(1,1)=1
arr2extension a,3,3,3
a(2,2,2)=2
ddim b,2,2    ;実数型配列
b(1,1)=1.0
arr2extension b,3,3,3
b(2,2,2)=2.0
sdim c,2,2    ;文字列型配列
c(1,1)="a"
arr2extension c,3,3,3
c(2,2,2)="b"
;表示
repeat 3:k=cnt
    repeat 3:j=cnt
        repeat 3:i=cnt
            pos i*20,j*20+k*100
            mes""+a(i,j,k)
            pos i*80+100,j*20+k*100
            mes""+b(i,j,k)
            pos i*20+400,j*20+k*100
            if c(i,j,k)=""{mes"_"}else{mes""+c(i,j,k)}
        loop
    loop
loop

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


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