BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
合成数を素数カードで素因数分解して対戦するスピードカードゲーム
Translation pending
AI summary · revised during review
GamesHTMLGitHub @TAKA-T-POnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
中央に出た合成数カードを、自分の素数カードで素因数分解していくスピード系カードゲームです。ブラウザだけで動作する静的Webアプリで、index.html 1ファイルにHTML/CSS/JavaScriptがすべて含まれています。ビルドやサーバーは不要で、ファイルを開くかどこか静的ホスティングに置くだけで遊べます。 index.html をブラウザで直接開くだけです(file:// でも動作します)。GitHub Pages 等の静的ホスティングでも配信可能です。 タイトル画面の各設定はすべてボタン形式です(ラジオボタンやプルダウン、チェックボックスは使用していません)。 CPU対戦・2人対戦の複数選択レベルと、タイムアタックの単一選択レベルは別々に記憶されており、モードを切り替えても互いの選択状態は保持されます。CPU対戦・2人対戦では出題レベルを1つ以上選択しないとスタートできません(タイムアタックは常にちょうど1つ選択されているため、この制限にはかかりません)。設定内容は localStorage に保存され、次回起動時に復元されます(対戦成績・タイムアタックの記録などの保存は行いません)。 タイトル画面左上の「?」ボタンを押すと、ヘルプメニューが開きます。 ヘルプメニューには、次の項目があります。Read the full README ↗
中央に出た合成数カードを、自分の素数カードで素因数分解していくスピード系カードゲームです。ブラウザだけで動作する静的Webアプリで、index.html 1ファイルにHTML/CSS/JavaScriptがすべて含まれています。ビルドやサーバーは不要で、ファイルを開くかどこか静的ホスティングに置くだけで遊べます。
index.html をブラウザで直接開くだけです(file:// でも動作します)。GitHub Pages 等の静的ホスティングでも配信可能です。
localStorageに記録されていつでも選べるようになります。タイトル画面の各設定はすべてボタン形式です(ラジオボタンやプルダウン、チェックボックスは使用していません)。
CPU対戦・2人対戦の複数選択レベルと、タイムアタックの単一選択レベルは別々に記憶されており、モードを切り替えても互いの選択状態は保持されます。CPU対戦・2人対戦では出題レベルを1つ以上選択しないとスタートできません(タイムアタックは常にちょうど1つ選択されているため、この制限にはかかりません)。設定内容は localStorage に保存され、次回起動時に復元されます(対戦成績・タイムアタックの記録などの保存は行いません)。
タイトル画面左上の「?」ボタンを押すと、ヘルプメニューが開きます。
ヘルプメニューには、次の項目があります。
https://taka-t-p.github.io/math-app-portal/)を新しいタブで開きます。「あそびかた」は画面左上の「< メニュー」ボタン(10ページ目は「次へ」の代わりに「メニューへ戻る」ボタン)で、「倍数の見分け方」は画面下部の「メニューへ戻る」ボタンで、それぞれヘルプメニューへ戻れます。ヘルプメニュー自体には「タイトルへ戻る」ボタンがあります。ヘルプ画面を開いても、選択中のモード・CPU強さ・出題レベル(対戦用・タイムアタック用)・ハンデ設定・サウンド設定は変更されません。
28)が1枚表示されます。28 = 2×2×7 なら、2を2回・7を1回まで出せます)。| 素数 | 初級・中級のみ | 上級・プロ級のみ | 初級/中級と上級/プロ級が混在 |
|---|---|---|---|
| 2 | 6 | 5 | 5 |
| 3 | 5 | 4 | 4 |
| 5 | 4 | 3 | 4 |
| 7 | 3 | 3 | 3 |
| 11 | 0(出題されないため配られない) | 3 | 2 |
いずれの組み合わせでも1人あたりの素数カード合計は18枚で統一されています(2人対戦でハンデを設定した場合を除く。下記「2人対戦のハンデ設定」参照)。
上記に「終了カード」1枚を加えたものが各プレイヤーの山札です(先頭5枚が初期手札、残りが引き札)。終了カードはシャッフル対象外で、必ず山札の一番下に固定されます。
タイトル画面で「2人対戦」を選んでいるとき、モード選択の下に「ハンデ設定」のスライドバーが表示されます。
ハンデは以下の手順で反映されます。1P・2Pそれぞれ通常どおり18枚ずつの素数カード(上記の表の比率)を用意したうえで、設定枚数が少ない側から多い側へ、ランダムに選んだカードを設定枚数の差の分だけ渡してからシャッフルし、山札と初期手札(先頭5枚)を決めます。例えば「1P:16枚 2P:20枚」の場合、1Pの18枚のうちランダムに2枚が選ばれ2P側に渡されてから、それぞれのプレイヤーの手札・山札が組まれます。
カード枚数が少ないほど山札を早く引き切りやすく(=勝利条件を早く満たしやすく)なるため、実力差のある2人が対戦するときに、枚数の少ない側が有利になるように調整する機能です。ハンデの設定値は localStorage に保存され、次回起動時にも復元されます。
| レベル | 色 | 枚数 |
|---|---|---|
| 初級 | 青 | 18枚 |
| 中級 | 緑 | 14枚 |
| 上級 | オレンジ | 20枚 |
| プロ級 | 赤 | 20枚 |
選択したレベルのカードをすべて合わせて1つの山札としてシャッフルします。山札が尽きたら、これまでに使用済みのカードを再シャッフルして山札として再利用します(直前と同じ数字が連続しないよう簡易的に調整)。
自分が出そうとした素数を、直前1.5秒以内に相手(またはCPU)がすでに出していた場合は、お手つき扱いにはなりません。「この数は先に出された!」と表示され、カードは消費されず、他のカードは引き続き出せます。このときカードは画面中央方向へ0.3秒でスライドし、0.3秒かけて元の位置へ戻るアニメーションが再生されます。
上記の救済条件に当てはまらない誤ったカードを出すと「お手つき」になります。
ゲーム中いつでも「パス」ボタンを押すと、10秒カウントダウンが始まります(役割は元の「10カウント宣言」から変わっていません、ボタンの表示テキストのみ変更)。
以下のいずれかの条件を満たすとラウンド終了処理が始まります。
条件を満たした瞬間に入力はロックされますが、2秒後に画面中央へ「ターン終了!」の表示が現れます(即座には表示されません)。この演出は水色半透明のカードとして表示され、画面全体を暗くすることはありません。カード内には完了した合成数の素因数分解(例: 28=2×2×7)が表示され、「次へ」ボタンを押すまで次のラウンドは始まりません。2人用モードでは、このカード全体が90度回転して表示されます(合成数表示と同じ向き)。
「次へ」を押すと、場の合成数カード・使用済みカード表示・お手つき/パスの状態がリセットされ、次のラウンドが始まります。ただし合成数カードの数字はすぐには表示されず、まず「?」と表示され、1秒後に実際の数字に切り替わります。「?」が表示されている間は、素数カードを出すことはできません。
CPU側の手札は常に180度回転して表示されます(1人用モードでも)。2人用モードでは、上段(2P)の手札・山札残り枚数・パスボタン一式がまとめて180度回転し、下段(1P)から見た並び順(パス → 山札残り → 手札 の順で画面端から中央へ向かう並び)と一致するように配置されています。合成数カード周辺の表示(合成数カード・使用済みカード)は、2人用モードのときだけ右に90度回転し、かつ画面右寄りに表示されます(上下どちらから見ても公平に読みにくくするため)。
手札の各カードは、素数を出した位置がそのまま空きスロット(点線の枠)になり、1秒後に新しいカードがその同じ位置へ下(または回転先の対応する方向)からスライドインして補充されます。左詰めにはなりません。
山札残り枚数は「山札 残りN枚」の形式で表示され、数字部分のみ太字・2倍サイズで表示されます。残り枚数がちょうど3枚になった瞬間、手札のすぐ上に「残り3枚!」という半透明の警告が大きく表示され、1.2秒かけてフェードアウトします。
使用済み素数カード(そのラウンド中に出されたカード)は合成数カードの左右に小さな丸チップとして残され、1Pが出したものは白地に黒文字、2P/CPUが出したものは濃色地に薄い文字で表示されます。ラウンドが終わると消去されます。
スタートボタンを押すと、タイトル画面が非表示になります。1人用(CPU対戦)の場合はここでCPUキャラクターが登場し(詳細は「CPUキャラクター」参照)、約1.8秒表示された後、山札の準備が完了した「3」「2」「1」「START!」のカウントダウンが画面中央に表示されます(それぞれ効果音付き)。カウントダウン終了後に最初の合成数カードが表示され、対戦が始まります。2人用モードではキャラクター演出はなく、従来通りカウントダウンから始まります。
CPUは以下の情報のみを使って行動します(プレイヤーの手札の中身は使用しません)。
行動タイミングごとに、難易度に応じた反応時間(下表)だけ待ってからカードを1枚出します。お手つき率に応じてランダムに正解/わざと無効カードを選び、無効カードが手札にない場合は正解カードを出します。現在の合成数の出題レベルが「上級」または「プロ級」のときは、反応時間の下限に+100msされ、その分だけ反応が遅くなります。
| 強さ | 反応時間(初級・中級) | 反応時間(上級・プロ級) | お手つき率 |
|---|---|---|---|
| レベル1 | 3200〜5200ms | 3300〜5300ms | 22% |
| レベル2 | 2400〜4000ms | 2500〜4100ms | 15% |
| レベル3 | 1700〜3000ms | 1800〜3100ms | 8% |
| レベル4 | 1200〜2200ms | 1300〜2300ms | 4% |
| レベル5 | 800〜1500ms | 900〜1600ms | 1% |
| MAX | 440〜900ms | 540〜1000ms | 0%(お手つきしない) |
CPUはゲーム終了後(GAME_OVER)や、ラウンド終了演出中・お手つきロック中はカードを出しません。CPU強さがレベル4・レベル5・MAXのとき、CPUがお手つきすると自動的に「パス」を宣言し、10秒カウントダウンが始まります(レベル1〜3ではこの自動パスは発生しません)。
1人用(CPU対戦)モードでは、選択したCPU強さごとに固有の敵キャラクターが登場します。反応速度やお手つき率などCPU自体の強さは変更されず、演出のみの追加です。2人用モードではキャラクター関連の表示は一切行われません。
| 強さ | キャラクター |
|---|---|
| レベル1 | 🐥 ピヨファクター |
| レベル2 | 🐺 プライムウルフ |
| レベル3 | 🥷 素数忍者シノビ |
| レベル4 | 🧙 ファクター魔導士 |
| レベル5 | 🐉 プライムドラゴン |
| MAX | 🤖 PRIME-X |
プレイ中に右上の「ポーズ」ボタンを押すと、「タイトル画面へ戻りますか?」の確認ダイアログが表示されます。
いずれかのプレイヤーの素数山札が尽きる(終了カードを引く)とゲーム終了です。
勝敗表示の下には「出したカードの枚数」として、両者が正式に場に出した素数カードの累計枚数が表示されます。1人用では「1P:13枚 CPU:10枚」のように表示され、2人用では表示順が逆になり、矢印付きで「←2P:10枚 1P:13枚→」のように表示されます。
結果画面には以下のボタンがあります。
CPU対戦・2人対戦とは独立したモードで、山札・CPU・パス・お手つきロックといった対戦モードの概念は使用しません。
28 = 2×2×7 なら「2→2→7」でも「7→2→2」でも正解)タイム表示は「TIME 00:18.42」の形式(分:秒.100分の1秒)で、開始カウントダウン終了・1問目表示と同時に計測が始まります。
その問題でまだ必要な素因数ではないカードをタップすると、お手つきになります。
合成数カードは画面中央に表示され、その右に「ヒント」ボタンとヒントの残り使用回数(「残り3回」など)が配置されます。
42で何も解答していない状態でヒントを押すと、自動的に「7」がタップされ「残り6」と表示されます)60で「2×3」まで解答済みなら60÷(2×3)=10)が合成数の下に「残り10」のように表示されますタイムアタック中も右上に「ポーズ」ボタンが表示されます。ただし不正防止のため、確認ダイアログを表示している間もタイムは進み続けます(一時停止して考える時間を稼ぐことはできません)。「いいえ」で対戦に戻るか、「はい」で進行中の記録を破棄してタイトル画面へ戻ります(設定は保持されます)。
10問正解(クリア)したときのみ、出題レベルごとに最速タイムを自己ベストとしてlocalStorageに保存します。お手つき3回によるゲームオーバー時は記録を更新・保存しません。クリア画面には「TIME 00:18.42」の下に、そのレベルの自己ベスト「BEST 00:18.42」が表示されます。今回のプレイで自己ベストを更新した場合は、「TIME」の文字が黄色く光ります。
10問正解すると「CLEAR!」(虹色のグラデーションと光るエフェクト付き)画面に、出題レベルを添えた「上級 10問正解!」のような見出しに続けて、ペナルティ加算後の最終タイム・自己ベスト・お手つき回数と加算秒数が表示されます。3回お手つきすると「GAME OVER」画面に、その時点の正解数・停止時タイムが表示されます(この場合は自己ベストの更新判定は行われません)。いずれの画面にも「もう一度」(同じ出題レベルで新しい10問を再抽選)と「タイトルへ」ボタンがあります。「次の相手と戦う」ボタンやCPUキャラクターの演出はタイムアタックには表示されません。
「もう一度」「タイトルへ」ボタンの下には「問題履歴」がスクロール表示され、今回のプレイで出題された問題(最大10問、ゲームオーバー時は中断までに出題された分のみ)を「第1問 12=2×2×3」のように、番号と正しい素因数分解の形式で確認できます(解答した順番などは反映されません)。
CPU対戦・2人対戦・タイムアタックでのプレイ実績に応じて、ブロンズ・シルバー・ゴールドの3段階×26種類(計78個)のトロフィーを獲得できます。称号の装備やタイトル画面への表示、オンラインランキングとの連携は行わず、あくまで実績の記録・閲覧のみの機能です。獲得状況はゲームバランス(CPUの強さや出題内容など)に一切影響しません。
prefers-reduced-motion設定時はアニメーション・パーティクルを省略し、サウンドOFF時は効果音を鳴らしません。localStorage(対戦成績・タイムアタックの自己ベストとは別のキー)に保存され、次回起動時にも復元されます。外部音源は使用せず、Web Audio API で単純な電子音を都度生成しています(カウントダウン、正解、お手つき、先出されメッセージ、ラウンド終了、パスの残りカウント、勝敗など)。タイムアタックでも対戦モードと同じカウントダウン・お手つき・クリア・ゲームオーバーの効果音を再利用していますが、1問正解したとき(「正解!」表示のタイミング)だけは3音の専用効果音を鳴らします(素因数を1つタップするごとの効果音は対戦モードと共通の2音です)。ブラウザの自動再生制限対策として、AudioContextはスタートボタン押下時に初期化されます。
index.html 単体で完結する静的HTML/CSS/JavaScriptstate)と、状態変更後に全体を再描画する render() 関数のみで構成clamp()、100dvh、env(safe-area-inset-*) などを使用し、スマートフォン縦画面を基準に、タブレット/PCでも表示が崩れないようにしていますlocalStorage にモード・CPU強さ・出題レベル(対戦用・タイムアタック用それぞれ)・サウンド設定を保存するほか、タイムアタックの出題レベルごとの自己ベストタイムとアチーブメントの達成状況をそれぞれ別キーで保存します(対戦成績そのものの履歴保存は行わず、アチーブメント判定に必要な集計値のみを保持します)performance.now() の差分に基づいており、setInterval の呼び出し回数には依存しません