// IMW版 スクリーンセーバー // くらげ(?)が漂います // コンパイルして、拡張子を .exe → .scr に変更すれば // スクリーンセーバーとして使えます // キーが押されたりクリックされたら終了させる KEYDOWN { end ; } LBUTTONDOWN { end ; } RBUTTONDOWN { end ; } // マウスが動いたら終了させる MOUSEMOVE { // ms_move の値が 10 までは終了させない // こうしないといきなり終了してしまう ms_move = ms_move + 1 ; if(ms_move > 10){ end ; } } CREATE { SetWinStyle(4) ; SetWinSize(SCR_X,SCR_Y) ; SetWinPos(0,0,0) ; SetWinColor(0) ; SetTimer(100) ; SubScreen(SCR_X,SCR_Y) ; Data("map",1,16) ; vpit = 8 ; // 高さ hpit = 16 ; // 幅 kaku = 18 ; // 角の数 最大32まで Create3DPack(1,kaku*15*2+kaku*2) ; Set3DCenter(SCR_X/2,SCR_Y/2,2000) ; count = SEC ; ms_move = 0 ; } TIMER { count = (count + 1) % 360 ; // 形状を更新 n = 0 ; loop(16){ map(0,n) = (sin((n+count)*30) + 2) * hpit ; n = n + 1 ; } // 色を更新 cr = (sin(count*1)+1)*64 ; cg = (sin(count*2)+1)*127 ; cb = (sin(count*3)+1)*127 ; // 座標データ作成 call("MakeData") ; // 姿勢更新 Set3DLocalRotateX(1,count*2) ; Set3DLocalRotateY(1,count*8) ; Set3DLocalRotateZ(1,count) ; // 位置更新 Set3DCenter(SCR_X/2+sin(count*1)*300,SCR_Y/2+sin(count*2)*200,2000) ; SelectScreen(0) ; FullPaint(0) ; Draw3DPack(1) ; CopyBMP(0,0,0,SCR_X,SCR_Y,1,0,0,SCR_X,SCR_Y,0) ; } // 座標データ作成 MakeData { p = 360 / kaku ; x = p / 2 ; Clear3DPack(1) ; // ふたの部分 loop(kaku){ fx1 = -cos(x) * map(0,0) ; fz1 = sin(x) * map(0,0) ; fx2 = -cos(x+p) * map(0,0) ; fz2 = sin(x+p) * map(0,0) ; fx3 = 0 ; fz3 = 0 ; fy3 = - vpit * 8 ; Add3DPack(1,fx3,fy3+vpit,fz3,fx1,fy3,fz1,fx2,fy3,fz2,cr,cg,cb) ; x = x + p ; } // 胴の部分 s = 0 ; loop(15){ loop(kaku){ fx1 = -cos(x) * map(0,s) ; fz1 = sin(x) * map(0,s) ; fx2 = -cos(x+p) * map(0,s) ; fz2 = sin(x+p) * map(0,s) ; fy = - vpit * (8-s) ; sx1 = -cos(x) * map(0,s+1) ; sz1 = sin(x) * map(0,s+1) ; sx2 = -cos(x+p) * map(0,s+1) ; sz2 = sin(x+p) * map(0,s+1) ; sy = - vpit * (7-s) ; Add3DPack(1,fx2,fy,fz2,fx1,fy,fz1,sx1,sy,sz1,cr,cg,cb) ; Add3DPack(1,fx2,fy,fz2,sx1,sy,sz1,sx2,sy,sz2,cr,cg,cb) ; x = x + p ; } s = s + 1 ; } // 底の部分 loop(kaku){ fx1 = -cos(x) * map(0,15) ; fz1 = sin(x) * map(0,15) ; fx2 = -cos(x+p) * map(0,15) ; fz2 = sin(x+p) * map(0,15) ; fx3 = 0 ; fz3 = 0 ; fy3 = vpit * 7 ; Add3DPack(1,fx3,fy3-vpit,fz3,fx2,fy3,fz2,fx1,fy3,fz1,cr,cg,cb) ; x = x + p ; } }