▶ 実 行
▶ 実行
クリア
今、なんどきだい?
by 最上(もがみ)
# ----------------------------------- # --- 今、なんどきだい? version2.0 # --- 今の時刻(変更可能)を昔の時刻に変換して時そばごっこ。 # --- 16文のおそばがいくらになるでしょうか!? # --- 参考サイト:https://www.gakken.co.jp/kagakusouken/spread/oedo/03/kaisetsu1.html # --- (1)指定の年月日で、日の出・日の入り時刻を特定します。(緯度・経度は日本で固定) # --- (2)指定時刻の昼夜を判定し、半刻を算出後、昔の時刻をわりだします。 # --- (3)お勘定の時、一文かすることができるかどうかを判定します。 # --- (4)結果を表示します。 # ----------------------------------- # --- ver1.1 エラーチェックを少し追加 # --- ver1.2 描画のちらつきを軽減 # --- ver1.3 結果説明追加 # --- ver1.4 時刻計算修正 # --- 明け六つの開始時刻を日の出の35分前、暮れ六つの終了時刻を日の入り35分後とし、 # --- 昼を7分割、夜を5分割して割り当て # --- ver1.5 結果判定に引き分けを追加 # --- ver1.6 結果寸劇用の画像を変更。タイトルとあらすじ追加。 # --- ver1.7 おそばは16文でした!(二八そば) # --- ver2.0 指定の年月日で 日出日の入り時刻を取得できるようにしました。 # --- Sunset and sunrise times API(https://sunrise-sunset.org)が公開しているAPIを # --- 利用しています。 # --- 「おはこん番地は!?」APIや、国立天文台のサイトとは数分のずれがあるようです # --- http://labs.bitmeister.jp/ohakon/index.cgi # --- https://eco.mtk.nao.ac.jp/cgi-bin/koyomi/koyomix.cgi # ----------------------------------- // 初期値 TCNT=0 経度=139.7414 // 東京(江戸) 緯度=35.6581 API="https://api.sunrise-sunset.org/json?" // 寸劇表示用情報 // 0:クリアフラグ, 1:背景BG, 2:吹き出しFUKIDASHI、3:文字描画位置x、4:文字描画位置y、5:文字サイズ、6:文字色、7:セリフ IMG =1 POSX = 3 POSY = 4 MOJISIZE = 5 MOJIIRO = 6 SERIFU1 = 7 MISE = 6 KYAKU = 7 HANTEI = 10 台本={ "0": [1, "https://n3s.nadesi.com/image.php?f=97.png", "https://n3s.nadesi.com/image.php?f=91.png", 30, 50, 20, 黒色, "ごちそうさん"], "1": [0, "", "", 30, 80, 20, 黒色, "いくらだい?"], "2": [1, "", "https://n3s.nadesi.com/image.php?f=102.png", 170, 90, 20, 黒色, "16文です"], "3": [1, "https://n3s.nadesi.com/image.php?f=98.png", "https://n3s.nadesi.com/image.php?f=91.png", 10, 50, 20, 黒色, "ひい ふう みい よお"], "4": [0, "", "", 10, 80, 20, 黒色, "いつ むう なな やあ"], "5": [1, "", "https://n3s.nadesi.com/image.php?f=91.png", 30, 50, 20, 黒色, "今、なんどきだい?"], "6": [1, "", "https://n3s.nadesi.com/image.php?f=102.png", 160, 90, 20, 黒色, "test"], "7": [1, "", "https://n3s.nadesi.com/image.php?f=91.png", 30, 50, 20, 黒色, "test1"], "8": [0, "https://n3s.nadesi.com/image.php?f=97.png", "https://n3s.nadesi.com/image.php?f=91.png", 30, 80, 20, 黒色, "ごちそうさん"], "9": [1, "", "https://n3s.nadesi.com/image.php?f=102.png", 170, 90, 20, 黒色, "まいど~"], "10":[1, "", "", 30, 30, 20, 黒色, "test3", 50, 100, 70, 赤色, "test4", 55, 125, 15, 黒色, "test5"] } // 数え方のならび KAZOEKATA = ["", "一つ", "二つ", "三つ", "四つ", "五つ", "六つ", "七つ", "八つ", "九つ", "とお", "十一", "十二", "十三","十四","十五","十六" ] // 昔の時刻 L_NANDOKILIST = [6, 5, 4, 9, 8, 7, 6] D_NANDOKILIST = [5, 4, 9, 8, 7] // GUI作成 空のエディタ作成して、年エディタに代入。「年」のラベル作成。 空のエディタ作成して、月エディタに代入。「月」のラベル作成。 空のエディタ作成して、日エディタに代入。「日」のラベル作成。 空のエディタ作成して、時エディタに代入。「時」のラベル作成。 空のエディタ作成して、分エディタに代入。「分」のラベル作成。改行作成 「この日付と時刻で時そばごっこをする」のボタン作成して、開始ボタンに代入。改行作成 「昔の時刻は、その日の日の出・日の入り時刻で一刻(いっとき)を割り出しています。」のラベル作成。改行作成 「日の出頃の”明け六つ”からはじまり、五つ、四つ、九つ、八つ、七つ、と続いて」のラベル作成。改行作成 「”暮れ六つ”までが昼の時刻です。(夜もそんな感じ)」のラベル作成。改行作成 「※実際のお蕎麦屋さんでマネしないでください。」のラベル作成。改行作成 // エディタサイズ調整 年エディタに{ 「width」:「50px」、 }をDOMスタイル一括設定 月エディタに{ 「width」:「25px」、 }をDOMスタイル一括設定 日エディタに{ 「width」:「25px」、 }をDOMスタイル一括設定 時エディタに{ 「width」:「25px」、 }をDOMスタイル一括設定 分エディタに{ 「width」:「25px」、 }をDOMスタイル一括設定 // 初期値 今の年月日と時刻 今日を「/」で区切ってtmpに代入。 tmp[0]を年エディタにテキスト設定。 tmp[1]を月エディタにテキスト設定。 tmp[2]を日エディタにテキスト設定。 今を「:」で区切ってtmpに代入。 tmp[0]を時エディタにテキスト設定。 tmp[1]を分エディタにテキスト設定。 "https://n3s.nadesi.com/image.php?f=103.png"を[0,0]に画像描画。 「40px sans-serif」に描画フォント設定 黒色に塗色設定 [30, 50]へ"時そばごっこ"を文字描画 「20px sans-serif」に描画フォント設定 [20, 100]へ"日時を指定して"を文字描画 [20, 130]へ"蕎麦屋のそばを食べたら、"を文字描画 [20, 160]へ"一体いくらになるでしょう!?"を文字描画 「15px sans-serif」に描画フォント設定 [15, 200]へ"…要するに、"を文字描画 赤色に塗色設定 [20, 230]へ"蕎麦屋に「九つ」と"を文字描画 [20, 260]へ"言わせれば成功です。"を文字描画 #----------------- 開始ボタンをクリックした時には、 全タイマー停止。 // 入力チェック y=(年エディタのテキスト取得を英数半角変換)*1 m=(月エディタのテキスト取得を英数半角変換)*1 d=(日エディタのテキスト取得を英数半角変換)*1 H=(時エディタのテキスト取得を英数半角変換)*1 M=(分エディタのテキスト取得を英数半角変換)*1 もし、((y<1)または(y>9999))ならば 「西暦(1~9999)を入力してください」と言う。戻る。 ここまで もし、((m<1)または(m>12))ならば 「月(1~12)を入力してください」と言う。戻る。 ここまで もし、((d<1)または(d>31))ならば 「日(1~31)を入力してください」と言う。戻る。 ここまで もし、((H<0)または(H>23))ならば 「時刻(0~23)を入力してください」と言う。戻る。 ここまで もし、((M<0)または(M>59))ならば 「時刻(0~59)を入力してください」と言う。戻る。 ここまで // ver2.0 ときそばごっこ(y, m, d, H, M, 緯度, 経度)。 /* ver1.0-1.7までのプログラム sun=基準時刻取得(y, m, d)。 toki = 時刻判定(sun[0], sun[1], H*60+M)。 TCNT=0 台本仕上げ(toki[0], toki[1], toki[2])。 全描画クリア。 「ときそば」を1秒毎。 */ ここまで #--------------------------------------------- ●基準時刻取得(y, m, d) // 季節を判定し、日の出の35分前と、日の入り35分後の時刻を返す md = m*100+d rtn = [] // 春 3/21 5:44-17:53 もし、(204≦md && md<505)ならば rtn = [5*60+44-35, 17*60+53+35] ここまで // 夏 6/21 4:25-19:00 もし、(505≦md && md<807)ならば rtn = [4*60+25-35, 19*60+0+35] ここまで // 秋 9/23 5:29-17:37 もし、(807≦md && md<1107)ならば rtn = [5*60+29-35, 17*60+37+35] ここまで // 冬 12/22 6:47-16:32 もし、(1107≦md || md<0204)ならば rtn = [6*60+47-35, 16*60+32+35] ここまで rtnを戻す ここまで HH = 0 MM = 0 #--------------------------------------------- ●ときそばごっこ(y, m, d, hh, mm, lat, lng) HH = hh MM = mm // 指定日の日の出日の入り時刻を取得 date=「{y}-{mを2でゼロ埋め}-{dを2でゼロ埋め}」 // 東経は負の値 URL=API & 「lat={lat}&lng={lng}&date={date}&formatted=0」 //URLを表示。 URLにGET送信した時には //"成功"と表示。 J=対象をJSONデコード。//YYYY-MM-DDThh:mm:ss+00:00 r=J["results"]["sunrise"]。 s=J["results"]["sunset"]。 // Tで区切る r = rを「T」で区切る。 s = sを「T」で区切る。。 // +で区切る r = r[1]を「+」で区切る。 s = s[1]を「+」で区切る。 // :で区切る sunrizeTime = r[0]を「:」で区切る。 susetTime = s[0]を「:」で区切る。 // 日本時間に変換(時差+9時間) sunrizeTime[0] = ((sunrizeTime[0]+9)を24で割った余り) susetTime[0] = ((susetTime[0]+9)を24で割った余り) //sunrizeTimeを表示。 //susetTimeを表示。 // 日の出の35分前と、日の入り35分後の時刻に補正して 時刻判定 //sunrizeTime[0] = (sunrizeTime[0] + (((60 + sunrizeTime[1]-35)/60)の整数部分) - 1) //sunrizeTime[1] = ((60 + sunrizeTime[1]-35)を60で割った余り) //susetTime[0] = (susetTime[0] + ((susetTime[1]+35)/60)の整数部分) //susetTime[1] = ((susetTime[1]+35)を60で割った余り) toki = 時刻判定((sunrizeTime[0]*60+sunrizeTime[1]-35), (susetTime[0]*60+susetTime[1]+35), HH*60+MM)。 TCNT=0 台本仕上げ(toki[0], toki[1], toki[2])。 全描画クリア。 「ときそば」を1秒毎。 ここまで。 ここまで #--------------------------------------------- ●時刻判定(pSunrize, pSunset, pTime) rtn = [0,0,0] // 昔の時刻、今の時間帯ここからここまで HANTOKI = 0 idx = 0 // 昼夜判定 もし、(pSunrize≦pTime && pTime<pSunset)ならば // 昼 ITTOKI = ((pSunset- pSunrize)/7)の整数部分 // 一刻の時間を算出 idx = ((pTime- pSunrize)/ITTOKI)の整数部分 rtn[0] = L_NANDOKILIST[idx] rtn[1] = pSunrize + ITTOKI*idx rtn[2] = pSunrize + ITTOKI*(idx+1) 違えば // 夜 ITTOKI = ((pSunrize + 24*60 - pSunset)/5)の整数部分 // 一刻の時間を算出 もし、(pSunset ≦ pTime)ならば idx = ((pTime-pSunset)/ITTOKI)の整数部分 ここまで もし、(pTime < pSunrize)ならば idx = ((pTime+24*60-pSunset)/ITTOKI)の整数部分 ここまで rtn[0] = D_NANDOKILIST[idx] rtn[1] = pSunset + ITTOKI*idx rtn[2] = pSunset + ITTOKI*(idx+1) -1 ここまで rtnを戻す ここまで #--------------------------------------------- ●台本仕上げ(pToki, pStart, pEnd) 台本[MISE][SERIFU1] = 「へえ、{KAZOEKATA[pToki]}で」 台本[KYAKU][SERIFU1] = 「{KAZOEKATA[pToki+1]}、{KAZOEKATA[pToki+2]}…」 台本[HANTEI][SERIFU1] = 「16文のそばが、{8+16-pToki}文に!」 もし、(pToki=9)ならば 台本[HANTEI][SERIFU1+5] = 「成 功」 台本[HANTEI][IMG] = "https://n3s.nadesi.com/image.php?f=99.png" 違えば もし、(pToki=8)ならば 台本[HANTEI][SERIFU1+5] = 「引 分」 台本[HANTEI][IMG] = "https://n3s.nadesi.com/image.php?f=100.png" 違えば 台本[HANTEI][SERIFU1+5] = 「失 敗」 台本[HANTEI][IMG] = "https://n3s.nadesi.com/image.php?f=101.png" ここまで ここまで sHH = (pStart/60)の整数部分 sHH = sHHを24で割った余り sMM = pStartを60で割った余り eHH = (pEnd/60)の整数部分 eHH = eHHを24で割った余り eMM = pEndを60で割った余り 台本[HANTEI][SERIFU1+10] = 「{KAZOEKATA[pToki]}({sHHを2でゼロ埋め}:{sMMを2でゼロ埋め}~{eHHを2でゼロ埋め}:{eMMを2でゼロ埋め})」 //台本[HANTEI][SERIFU1+10]を表示。 ここまで #--------------------------------------------- ●ときそば flg = 台本[TCNT][0] もし、flg=1ならば [0,0,300,170]の描画クリア。 ここまで imgBG = 台本[TCNT][1] imgFUKIDASHI = 台本[TCNT][2] もし、(imgBG="")でなければ imgBGを[0,0]に画像描画。 ここまで もし、(imgFUKIDASHI="")でなければ imgFUKIDASHIを[0,0]に画像描画。 ここまで // 質問と選択肢描画 「{台本[TCNT][MOJISIZE]}px sans-serif」に描画フォント設定 「{台本[TCNT][MOJIIRO]}」に塗色設定 [台本[TCNT][POSX], 台本[TCNT][POSY]]へ台本[TCNT][SERIFU1]を文字描画 もし、(TCNT=HANTEI)ならば 「{台本[TCNT][MOJISIZE+5]}px sans-serif」に描画フォント設定 「{台本[TCNT][MOJIIRO+5]}」に塗色設定 [台本[TCNT][POSX+5], 台本[TCNT][POSY+5]]へ台本[TCNT][SERIFU1+5]を文字描画 「{台本[TCNT][MOJISIZE+10]}px sans-serif」に描画フォント設定 「{台本[TCNT][MOJIIRO+10]}」に塗色設定 [台本[TCNT][POSX+10], 台本[TCNT][POSY+10]]へ台本[TCNT][SERIFU1+10]を文字描画 ここまで TCNT= TCNT + 1 ここまで
9a60075d44eb70747554880c8f4d9a4d
1051