テトリス
無印SPALM用
plg <-という名前のソース
w=width h=height mx=10 my=20 sz=10 ox=(w-sz*mx)/2 oy=sz*2 rsp=sz*3 ks=(2<<15)+(2<<4) kt=2 kh=2<<16 kr=(2<<13)+(2<<5) kl=(2<<12)+(2<<3) kb=(2<<11)+(2<<1) kd=(2<<14)+(2<<7) @(cl,-1,0x00BFFF,0x005FFF,0xFF20FF,0xFF8000,0x00DF00,0xFF3F3F,0xFFDF00,0xFAFAFA) @(cl1,-1,0x007FFF,0x0037BF,0xBF37BF,0xBF5F1F,0x00BF00,0xDF0000,0xF0C800,0xEFEFEF) @(scp,100,300,500,800,800,1200,1600) @(sct,"Single","Double","Triple","Tetris","T-spin Single","T-spin Double","T-spin Triple") @(zero,"","0","00","000","0000","00000","000000","0000000") @(a,0,1,1,0,1)@(b,0,0,-1,2,2) @(a1,-1,1,1,-1)@(a2,1,1,-1,-1) @(b1,1,-1,1,-1) @(c,0,-2,1,-2,1)@(d,0,0,0,1,-2) @(c1,1,1,-1,-1)@(c2,0,1,-1,-1) @(c3,1,-1,-1,1)@(c4,1,0,0,0) @(d1,1,-1,1,1)@(d2,0,-1,1,1) @(d3,-1,-1,-1,1)@(d4,-1,0,0,0) for(i=0;i-4;++i){for(j=0;j-5;++j){ srx0[0][i][j]=a[j]*a1[i] srx0[1][i][j]=a[j]*a2[i] sry0[0][i][j]=sry0[1][i][j]=b[j]*b1[i] srx1[0][i][j]=(j?c[j]*c1[i]+c2[i]:0;) srx1[1][i][j]=(j?c[j]*c3[i]+c4[i]:0;) sry1[0][i][j]=(j&4?d[j]*d1[i]+d2[i]:0;) sry1[1][i][j]=(j&4?d[j]*d3[i]+d4[i]:0;) }} lock() makeimg(bu,mx*sz+2,h) for(i=0;i-9;++i){ makeimg(bl[i],sz,sz)trgt(bl[i]) col(cl[i])frect(0,0,sz,sz) col(cl1[i])rect(-1,-1,sz,sz) } makeimg(title,w,h)trgt(title) clear(0,0,w,h) col(0)setfont("S") text("TETRiS",w/2,h/4,1|16) text("push select to start",w/2,h/2,1|16) text("push 0 to end",w/2,h/2+sthigh,1|16) trgt(off) unlock(0) func cell(fx,fy){ return (fx>=0)&(fx<mx)&(fy<my)?strat(yl[fx],fy+5):8; } func drawtm(f,fx,fy,fsz){if(f){ col(cl[f--]) fa=(3+(!f||(f==6)))*fsz/2 fox=fx-fa foy=fy-fa frect(fox+fsz,foy+fsz,fsz,fsz) frect(fox+fsz*((f==4)?0:2;),foy+fsz,fsz,fsz) if(f>3){fa=fsz*((f==6)?2:0;) frect(fox+((f&1)?0:fsz;),foy+fa,fsz,fsz) frect(fox+fsz*((f&1)?1:2;),foy+fa,fsz,fsz) }else{ frect(fox,foy+fsz,fsz,fsz) if(f){ frect(fox+fsz*(f-1),foy,fsz,fsz) }else{ frect(fox+fsz*3,foy+fsz,fsz,fsz) } } }} func init(){ lock() trgt(bu) clear(0,0,w,h) col(0)rect(0,oy-1,mx*sz+1,my*sz+1) trgt(off) clear(0,0,w,h) unlock(0) lv=keyflg=1 sp=max(1,sz*3-(lv*3*sz/15)) st=ln=sc=key=htm=0 for(i=0;i-mx;++i){yl[i]="8" for(j=-5;j-my;++j){ xl[j]=0 yl[i]=0.yl[i] } } for(rdtm="0123456",i=0;i-3;++i){ stc[i]=strat(rdtm,a=abs(rand)%strlen(rdtm)) rdtm=substr(rdtm,0,a).substr(rdtm,a+1) } } func inittm(f){ x=3 y=-3 yy=sp-1 rf=ry=tmr=tsf=0 ++tm tmsz=2+(!f||(f==6)) tmx[0]=tmy[0]=tmy[1]=1 tmx[1]=((f==4)?0:2;) if(f>3){ tmx[2]=tmx[3]=((f&1)?0:1;) ++tmx[3] tmy[2]=tmy[3]=((f==6)?2:0;) }else{ tmx[2]=0 tmy[2]=1f?(tmx[3]=f-1,tmy[3]=0):(tmx[3]=3,tmy[3]=1); } }
ここから本体
FrontPage
関数一覧
記号一覧
SPALM入門
作品集
自作関数活用術
ダウンロード先
うpロダ
wikiの使い方
SPALMまでの歴史
現行スレ