ワンドロって、なに?
ワンドロは1時間で絵を完成させるということで、1時間ちょうどをはかり、それをtwitterに開始時間と終了時間をツイートできるようにしたプログラムを作ってみた。その中でいろいろとhspのQ&Aを参考にさせていただきました。 将来的にはspaceXっぽくしてみたりいろいろ改造してみようかなと思います。HSPソースを公開します。 ;引用・参考文献 ;http://hsp.tv/play/pforum.php?mode=pastwch&num=60593 ;https://hsp.tv/play/pforum.php?mode=all&num=91464 ;http://hsp.tv/play/pforum.php?mode=pastwch&num=88533 #include "hsp3utf.as" #include "hsp3util.as" ; gettimestr,getdatestrを使うため #module #define global now_ut time2ut(gettime(0),gettime(1),gettime(3),gettime(4),gettime(5),gettime(6)) #defcfunc urlencode str p1 teext=p1 sdim texten,256 sdim text_en,256 repeat strlen(teext) text_en=peek(teext,cnt) texten+=strf("%%%02x",text_en) loop return texten #defcfunc time2ut int _y,int _m,int d,int _h,int _mi,int _s y=_y m=_m-2 if m<=0 : m+=12 : y-- days=365*y + y/4 + y/400 - y/100 + 30*m+59*m/100 + d - 678912 - 40587 //↑指定した日の修正ユリウス日をフリーゲルの公式から求め、 //さらに1970年1月1日の修正ユリウス日である40587を引く。 h=_h-9 //指定した時から日本とUTCの時差である9を引く。 mi=_mi-0 //日本に関して言えば、分の修正はなし。 s=_s+0 //閏秒を考慮しない場合。考慮する場合は↓のコメントアウトを外す。 //s=_s+37 return days*86400 + h*3600 + mi*60 + s #deffunc ut2time var ry,var rm,var rd,var rh,var rmi,var rs,int _ut ut=_ut-0 //閏秒を考慮しない場合。考慮する場合は↓のコメントアウトを外す。 //ut=_ut-37 add_h=9 //日本とUTCとの時差 add_m=0 //日本とUTCとの時差(分) ut+=add_h*3600+add_m*60 days=ut/86400 : a=ut\86400 rh=a/3600 : a\=3600 rmi=a/60 : rs=a\60 // n=(days+40587)+678881 //(days+40587)で修正ユリウス日に変換。以下、フリーゲルの公式で日付を求める。 a=3+4*((4*(n+1)/146097+1)*3/4+n) b=(a\1461)/4*5+2 ry=a/1461 rm=b/153+3 rd=(b\153)/5+1 if rm>=13 : rm-=12 : ry++ return #global screen 0,320,80 ; 画面サイズ指定 sysfont 12 font msgothic,30,1 ; 文字サイズを指定 objmode 0,1 onexit gosub *areyouquit t1="":t2="" time_start=0 time_end=0 mode=0 *noonedraw cls pos 200,0:button gosub "開始",*onedraw_start pos 200,40:button gosub "終了",*onedraw_end now=now_ut timechange=1 *tmprt gettimestr t1 ; 時刻を取得 getdatestr t2 ; 日付を取得 if (now_ut!now) : now=now_ut:timechange=1 if timechange=1 { redraw 0 color 255,255,255:boxf 0,0,180,80 ; 白い色で背景を塗りつぶす color 0,0,0 ; 文字の色 font msgothic,30,1 ; 文字サイズを指定 pos 0,0:mes t1 ; 時刻を表示 if mode=0 : pos 0,40:mes t2 : else : { boxf 0,0,0:boxf 0,40,180,80 min=60*60-(now_ut-time_start) if min>0 { y=(min*180/60/60) color 00,100,255:boxf 0,40,y,80 pos 0,40:color 255,255,255:mes strf("%02d:%02d",int(min/60),int(min\60)) } else { color 170,0,0:boxf 0,40,180,80 pos 0,40:color 255,255,255:mes strf("%02d:%02d",int(abs(min)/60),int(abs(min)\60)) } } ; 日付を表示 redraw 1 } await 1 ; 1秒ウエイトする timechange=0 goto *tmprt ; 無限ループ *onedraw_start if mode=1 : return mode=1 time_start=now_ut return *onedraw_end if mode=0 : return mode=0 time_end=now_ut times=((60*60)-(time_end-time_start))/60 ut2time y,m,d,h,mi,s,time_start mtime=strf("%02d:%02d",h,mi)+"~" ut2time y,m,d,h,mi,s,time_end mtime+strf("%02d:%02d",h,mi) if times<0 : mtime+"(+"+abs(times)+")" dialog mtime exec "https://twitter.com/share?text="+urlencode(mtime),16 return *areyouquit if mode=1 : dialog "終了できませんでした" : return end return