Photo by
torita
なでしこさんで2026連打ゲーム
書きたいことはあるが……頭が悪いので今週も実現叶わず。
新年一発目から雑プログラムでの繋ぎをするという決定を下すことに。
今年こそ、少しは頭が良くなるといいが……
今回やったこと
2026年になったので、なでしこで「2026連打ゲーム」を作った。
キーを2026回連打するのにかかる時間を競う、シンプルなゲームである。
最初のキーを押してからの時間を測定する。(最初のキーが1回目となる)
プログラム
2026連打ゲーム (プログラム貯蔵庫)
ポイント
パラメータの用意
定数の目標連打回数は2026。要求する連打数を設定する。ここを変えることで、来年もその後も使い回せる?
UIの用意
DOM親要素の「行揃え」に「中央」をDOMスタイル設定。
「{目標連打回数}連打ゲーム」のラベル作成。
それの「文字サイズ」に「300%」をDOMスタイル設定。
2回、改行作成。
「なるべく早くキーを{目標連打回数}回連打しよう!」のラベル作成。
改行作成。
「連打するキーはなんでもいいぞ!」のラベル作成。
改行作成。
「※本ゲームをプレイしたことにより、キーボードやその他のデバイスの破損、その他の損害が発生しても、作者は責任を負いません。」のラベル作成。
それの「文字サイズ」に「50%」をDOMスタイル設定。
2回、改行作成。
回数表示は「何かキーを押してスタート」のラベル作成。
それの「文字サイズ」に「200%」をDOMスタイル設定。
改行作成。
タイム表示は空のラベル作成。
それの「文字サイズ」に「200%」をDOMスタイル設定。
2回、改行作成。
リトライボタンは「リトライ」のボタン作成。
それにオフをDOM可視設定。部品を並べ、UIを用意する。
状態の用意
開始時刻はNULL。
連打回数は0。連打を開始した時刻と、連打した回数を管理する変数を用意する。
時間表示用関数の用意
●(MSに)タイム表示設定とは
定数のタイム秒はMSを1000で割って切り捨て。
定数のタイムミリ秒はMSを1000で割った余り。
タイム表示に「{タイム秒}.{タイムミリ秒を3でゼロ埋め}秒」をDOMテキスト設定。
ここまで。
●経過時間表示とは
もし、開始時刻がNULLならば、空を戻す。
システム時間ミリ秒から開始時刻を引いてタイム表示設定。
{関数}経過時間表示を画面更新時実行。
ここまで。「タイム表示設定」は、ミリ秒単位の連打時間を指定し、それを秒単位に変換して表示用のラベルに設定する。
「経過時間表示」は、連打を行っている間、現在時刻に基づいて現在の連打時間を「タイム表示設定」で表示させる。
キーが押された際の処理
DOCUMENTのキー押した時には(E)
定数の現在時刻はシステム時間ミリ秒。
もし、E$repeatならば、空を戻す。
もし、連打回数が目標連打回数以上ならば、空を戻す。
連打回数を1増やす。
もし、開始時刻がNULLならば
開始時刻は現在時刻。
{関数}経過時間表示を画面更新時実行。
ここまで。
もし、連打回数が目標連打回数以上ならば
現在時刻から開始時刻を引いてタイム表示設定。
開始時刻はNULL。
リトライボタンにオンをDOM可視設定。
ここまで。
回数表示に「{連打回数}回」をDOMテキスト設定。
ここまで。イベントオブジェクトの repeat プロパティを用いて、自動リピートによるイベントであれば無視する。
また、連打が完了している場合は、処理を行わない。
それらの条件に当てはまらない場合は、連打をカウントする。
それが最初のキー押下であれば、現在時刻を開始時刻として記録し、時間表示の更新を開始する。
カウントした結果要求数に到達した場合は、時間表示を最終結果にして、更新を停止する。
また、リトライボタンも表示する。
リトライ処理
リトライボタンをクリックした時には
回数表示に「何かキーを押してスタート」をDOMテキスト設定。
タイム表示に空をDOMテキスト設定。
開始時刻はNULL。
連打回数は0。
リトライボタンにオフをDOM可視設定。
ここまで。連打が完了した時に出るリトライボタンが押された時の処理を行う。
ラベルと状態を初期表示に戻し、リトライボタンを隠す。
おわりに
なでしこさんで、「2026連打ゲーム」を作成した。
2026年だから2026連打……というクソ安直な考え。
今日も頭が悪い。


コメント