|
|
2020/7/8(Wed) 06:44:50|NO.90937
1月1日(元旦)までのカウントダウンを実装するにはどんなプログラムを組めば良いでしょうか
どうぶつの森の大晦日カウントダウンイベントのようなものです。
|
|
2020/7/8(Wed) 09:30:08|NO.90938
別のスレッドでも触れましたが、フリーゲルの公式を使って日付から
修正ユリウス日(1858年11月17日からの日数)を求めてその差を計算すれば、
目標の日までの日数がわかると思います。
参考: https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%AA%E3%82%A6%E3%82%B9%E9%80%9A%E6%97%A5
#module
//getmjd(p1,p2,p3)
// 「p1年 p2月 p3日」の修正ユリウス日(1858年11月17日からの日数)を返す
#defcfunc getmjd int _y,int _m,int d
y=_y
m=_m-2 //月から2を引いたもの
if m<=0 : m+=12 : y-- //1月か2月(つまりmが0か-1)の場合は月を+12、年を-1
return 365*y+y/4 + y/400 - y/100 + 30*m + 59*m/100 + d - 678912
//mjd2ymd p1,p2,p3,p4
//p1 : 修正ユリウス日
//p2,p3,p4 : 変数を指定する。それぞれ修正ユリウス日から求まった年、月、日が入る。
// 修正ユリウス日から日付を求める。
#deffunc mjd2ymd int mjd,var vy,var vm,var vd
n=mjd+678881
a=4*n + 3 + (4*(n+1)/146097+1)*3/4*4
b=(a\1461)/4*5+2
vy=a/1461 : vm=b/153+3 : vd=(b\153)/5+1
if vm>12 : vm-=12 : vy++
return
//mjd2dw(p1)
// 修正ユリウス日から曜日を返す。
#define global ctype mjd2dw(%1) (((%1)+3)\7)
#global
//以下、使用例
day_tgt=getmjd(2021,1,1)
day_now=getmjd(gettime(0),gettime(1),gettime(3))
mes "2021年1月1日まで、あと ",1
color 255,0,0
mes day_tgt-day_now,1
color 0,0,0
mes " 日。"
|
|
2020/7/9(Thu) 13:34:21|NO.90945
ああ、「あつ森のカウントダウンイベント」というのがどういうものなのか
知らなかったのですが、「翌0時までの時間を求めたい」ということでしょうか?
2020年12月31日と2021年1月1日にのみ適切に使えるコードですが、
//フェイズ1:2020年12月31日
repeat
if gettime(0)=2021 : break
rsec=86400-(gettime(4)*3600 + gettime(5)*60 + gettime(6)) //翌0:00までの秒数
s=rsec\60 : a=rsec/60
m=a\60 : h=a/60
redraw 0
color 255,255,255 : boxf : pos 0,0
mes
color 0,0,0
mes "2021年まであと ",1
color 255,0,0
mes strf(" %02d:%02d:%02d",h,m,s)
redraw 1
await 100
loop
//フェイズ2:2021年1月1日
repeat
redraw 0
color 255,255,255 : boxf : pos 0,0
color 255,0,0
mes "あけましておめでとうございます!"
color 0,0,0
mes "2021年まであと ",1
color 255,0,0
mes strf("-%02d:%02d:%02d",gettime(4),gettime(5),gettime(6)) //頭に-をつけて2021年になったことを表現
redraw 1
await 100
loop
|
|
2020/7/9(Thu) 21:15:24|NO.90948
ありがとうございます。
少し改造して大晦日のみ実行可能&2020年に限らずどんな年でも対応できるようにしてみました
oldyear=gettime(0);現在の年を記憶
if gettime(1)!12|gettime(2)!31 : dialog "大晦日のみ実行可":end;大晦日じゃなかったら終了
repeat
if gettime(0)=oldyear+1 : break
rsec=86400-(gettime(4)*3600 + gettime(5)*60 + gettime(6)) //翌0:00までの秒数
s=rsec\60 : a=rsec/60
m=a\60 : h=a/60
redraw 0
color 255,255,255 : boxf : pos 0,0
mes
color 0,0,0
mes str(oldyear+1)+"年まであと ",1
color 255,0,0
mes strf(" %02d:%02d:%02d",h,m,s)
redraw 1
await 100
loop
;年が明けた
repeat
redraw 0
color 255,255,255 : boxf : pos 0,0
color 255,0,0
mes "あけましておめでとうございます!"
color 0,0,0
mes "2021年まであと ",1
color 255,0,0
mes strf("-%02d:%02d:%02d",gettime(4),gettime(5),gettime(6)) //頭に-をつけて2021年になったことを表現
redraw 1
await 100
loop
|
|
2020/7/12(Sun) 07:37:43|NO.90973
|
|