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

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


<< 穴掘り法 | main | 角が丸い四角(線) >>



通路生成(一本道)

穴掘り法で一本道の通路を作成するプログラムです

 


randomize
mc=11:mr=11
csz=24
gsel 0
dim mapdt,mc,mr
dim dx,4:dx=-1,0,1,0
dim dy,4:dy=0,-1,0,1
repeat 4
    r0=rnd(4):r1=rnd(4)
    if r0!=r1{
        tmp=dx(r0):dx(r0)=dx(r1):dx(r1)=tmp
        tmp=dy(r0):dy(r0)=dy(r1):dy(r1)=tmp
    }
loop
stx=1:sty=1:max=(mc/2)*(mr/2)
edx=mc-2:edy=mr-2
mapdt(stx,sty-1)=1
mapdt(edx,edy+1)=1
dim stack,4,max
id=0
i=stx:j=sty
;穴掘り法
mapdt(i,j)=1
repeat
    if stack(3,id)=0{
        r=rnd(4)
        stack(2,id)=r
    }else{
        if stack(3,id)>=4{
            stack(3,id)=0
            id--
            if id<=0:break
            ttdir=stack(2,id)
            mapdt(stack(0,id)+dx(ttdir),stack(1,id)+dy(ttdir))=0
            mapdt(stack(0,id)+dx(ttdir)*2,stack(1,id)+dy(ttdir)*2)=0
            i=stack(0,id):j=stack(1,id)
        }
        stack(2,id)++:if stack(2,id)>=4{stack(2,id)=0}
        r=stack(2,id)
    }
    ti=i+dx(r)*2
    tj=j+dy(r)*2
    stack(3,id)++
    if 0<=ti&ti<mc&0<=tj&tj<mr{
        if mapdt(ti,tj)=0{
            stack(0,id)=i,j,r
            mapdt(i+dx(r),j+dy(r))=1
            mapdt(ti,tj)=1
            i=ti:j=tj:id++
            if i=edx&j=edy{
                break
            }
        }
    }
    await
loop
;描写
pget 3200:boxf:color
repeat mr:cj=cnt
    repeat mc:ci=cnt
        pos ci*csz,cj*csz
        if mapdt(ci,cj)=0{
            mes"■"
        }
    loop
loop

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


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