HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0708
京浜東北・根岸線1月1日までのカウントダウンを実装するには?4解決


京浜東北・根岸線

リンク

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



GENKI

リンク

2020/7/12(Sun) 07:37:43|NO.90973

呼ばれた気がしたので!(すでに解決済みっぽいけど)

グレゴリオ暦と修正ユリウス日
https://mclab.uunyan.com/lab/hspneta/neta010.htm

修正ユリウス日換算モジュール
https://mclab.uunyan.com/dl/dl46.htm



ONION software Copyright 1997-2023(c) All rights reserved.