ワンドロは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