Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗騎手目線で JRA の平地G1全24戦を駆け抜けるブラウザゲーム。
ファンファーレが鳴り、ゲートが開いたら、あなたは相棒の背中の上。 進路どり・追う/抑える(体重移動)・ムチを駆使して頂点を目指します。
JRA の平地G1全24戦を、G1のある週ごとに1戦ずつ戦います(日付は2025年の開催日程)。
| # | 日付 | レース | コース |
|---|---|---|---|
| 1 | 2/23 | フェブラリーステークス | 東京 ダ1600m |
| 2 | 3/30 | 高松宮記念 | 中京 芝1200m |
| 3 | 4/6 | 大阪杯 | 阪神 芝(内)2000m |
| 4 | 4/13 | 桜花賞 | 阪神 芝(外)1600m |
| 5 | 4/20 | 皐月賞 | 中山 芝2000m |
| 6 | 5/4 | 天皇賞(春) | 京都 芝(外)3200m |
| 7 | 5/11 | NHKマイルカップ | 東京 芝1600m |
| 8 | 5/18 | ヴィクトリアマイル | 東京 芝1600m |
| 9 | 5/25 | オークス | 東京 芝2400m |
| 10 | 6/1 | 日本ダービー | 東京 芝2400m |
| 11 | 6/8 | 安田記念 | 東京 芝1600m |
| 12 | 6/15 | 宝塚記念 | 阪神 芝(内)2200m |
| 13 | 9/28 | スプリンターズステークス | 中山 芝1200m |
| 14 | 10/19 | 秋華賞 | 京都 芝(内)2000m |
| 15 | 10/26 | 菊花賞 | 京都 芝(外)3000m |
| 16 | 11/2 | 天皇賞(秋) | 東京 芝2000m |
| 17 | 11/16 | エリザベス女王杯 | 京都 芝(外)2200m |
| 18 | 11/23 | マイルチャンピオンシップ | 京都 芝(外)1600m |
| 19 | 11/30 | ジャパンカップ | 東京 芝2400m |
| 20 | 12/7 | チャンピオンズカップ | 中京 ダ1800m |
| 21 | 12/14 | 阪神ジュベナイルフィリーズ | 阪神 芝(外)1600m |
| 22 | 12/21 | 朝日杯フューチュリティステークス | 阪神 芝(外)1600m |
| 23 | 12/27 | ホープフルステークス | 中山 芝2000m |
| 24 | 12/28 | 有馬記念 | 中山 芝2500m |
夏(7〜8月)や G1 のない週は飛ばして次の G1 へ進みます。年齢・性別の出走条件はゲームでは気にせず、相棒はすべての G1 に出走できます。 各コースは直線の長さ・コーナー半径・回り・芝/ダートを実際の競馬場に近づけて再現(直線の短い中山は前が有利、東京は末脚が生きる)。 24戦を終えるとシーズン総括。同じ相棒で翌年へ続きます(脚質は変わりません)。
index.html をブラウザで開くだけ(ビルド不要・外部ライブラリなし)。
# ローカルサーバーで開く場合
python3 -m http.server 8000
# → http://localhost:8000/
| 操作 | キー | スマホ |
|---|---|---|
| 進路(内へ/外へ) | ← / → | ◀ ▶ |
| 追う(前傾) | ↑ | 追う |
| 抑える(手綱を引く) | ↓ | 抑える |
| ムチ・スタート | Space | ムチ |
| 消音 / 一時停止 | M / Esc | ♪ |
相棒の脚質(逃げ・先行・差し・追込)は最初に決まり、乗り替わらない限り変わりません。 脚質は画面に表示されません。
レース結果画面の「シェアする」で結果を共有できます(スマホはOSの共有シート、PCはXの投稿画面。最終戦の有馬記念はシーズン総括)。「結果をコピー」で文章をコピーすることもできます。共有文には紹介記事のURL(https://techgym.jp/column/claude-code-game-keiba/ 。js/game.js の SHARE_URL)が付きます。
データはブラウザ(localStorage)に保存されます。「新しい馬に乗り替わる」で脚質ごとリセット。
端末の言語が日本語なら日本語、それ以外は英語で表示します。タイトル画面の「日本語 / English」でいつでも切り替えられます(選んだ言語は保存)。
画面の文言は js/i18n.js、レース名・競馬場・馬名・騎手コメントなどレースまわりの文言は js/sim.js にあります。
Android のアプリ名も、日本語の端末では「ダービージョッキー」、それ以外では「Derby Jockey」になります。
vercel.json で、Vercel が npm run build を実行して www/ を公開するよう設定しています(Android アプリに同梱するのと同じファイルです)。
Capacitor でゲームのファイルをアプリ内に同梱しているため、ネットにつながっていなくても遊べます。
v1.0.0 (build 12) など)とプライバシーポリシーへのリンクを表示アプリ ID は jp.techgym.keiba です(Google Play に一度公開すると変更できません)。
Android アプリでのみ広告を表示します(Web 版には広告は出ません)。
| 広告 | タイミング |
|---|---|
| バナー | トップ画面・相棒の画面・一時停止画面・結果画面の下(レース中は出さない) |
| インタースティシャル(全画面) | 新しいレースへ進むとき(出走する・次走)、タイトルへ戻るとき、一時停止から再開するとき。ただし前回から 60 秒以内は出さない(js/ads.js の INTERSTITIAL_GAP_MS) |
| リワード | 勝てなかったレースの結果画面で「広告を見て、このレースをやり直す」を選ぶと、結果を取り消して同じレースにもう一度挑戦(1 レース 1 回まで) |
android/app/src/main/res/values/strings.xml の admob_app_id、広告ユニット ID(バナー・インタースティシャル・リワード)は js/ads.js の UNITS.production にあります。derby-jockey.apk)は常に Google のテスト広告 を表示します。自分でタップしても問題ありません。ADMOB_MODE=production で本番の広告に切り替えます(scripts/build-web.js が js/ads-config.js を書き換えます)。GitHub Actions(自動): Web 版や android/ を変更して push すると、.github/workflows/android.yml が動作確認用の APK を作ります。
既定ブランチのビルドは GitHub の Release(android-latest)に自動で載るので、Android 端末で次の URL を開くか QR コードを読み取るだけで最新版をダウンロードできます。
https://github.com/techgymjp/keiba/releases/latest/download/derby-jockey.apk
ダウンロードした derby-jockey.apk を開き、「提供元不明のアプリ」のインストールを許可するとインストールできます。
動作確認用の署名鍵(android/app/debug.keystore)はリポジトリで固定しているので、新しいビルドもアンインストールせずに上書きインストールできます。
(Release に載る APK はデバッグ版です。Google Play には下の手順で作る署名済み .aab を使います)
手元の PC(Android Studio):
npm ci
npm run android:sync # Web ファイルを www/ にまとめて Android プロジェクトへコピー
npm run android:open # Android Studio で開く
アイコンと起動画面は assets/ の元画像から npx @capacitor/assets generate --android で生成しています。
upload.jks)は他のアプリと同じものを使えます。GitHub のリポジトリの Settings → Secrets and variables → Actions に次の 4 つを登録する
| 名前 | 内容 |
|---|---|
ANDROID_KEYSTORE_BASE64 | base64 -i upload.jks | tr -d '\n' | pbcopy でコピーした文字列 |
ANDROID_KEYSTORE_PASSWORD | キーストアのパスワード |
ANDROID_KEY_ALIAS | upload |
ANDROID_KEY_PASSWORD | 鍵のパスワード |
derby-jockey-release-aab(.aab)ができるバージョン番号(versionCode)は Actions の実行回数が自動で使われます。表示用のバージョン名は package.json の version です。
Android 版と同じ Capacitor のプロジェクトに ios/ を足しています(JET STRIKE と同じ構成)。Bundle ID は jp.techgym.keiba、iPhone 専用・横画面固定です。
ビルドと App Store への提出は Mac で行います。手順は docs/IOS_BUILD.md にあります。
js/ads.js の UNITS.ios、アプリ ID は ios/App/App/Info.plist の GADApplicationIdentifiernpm run ios:sync(テスト広告)/ npm run ios:release(本番広告。App Store 用)/ npm run ios:open.github/workflows/ios.yml が push のたびに、署名なしでシミュレーター向けにビルドできるかを確認するdocs/store/ios/All rights reserved. 著作権はテックジム株式会社に帰属します。無断での複製・改変・再配布、Web サイトやアプリとしての公開を禁止します。ただし、テックジムの受講生が学習目的で複製・改変することは許可します(商用利用は不可。詳しくは LICENSE)。
| ファイル | 役割 |
|---|---|
js/sim.js | 競馬場・年間カレンダー・レースシミュレーション(脚質・スタミナ・位置取り・進路妨害・コーナーロス)。DOM非依存 |
js/render.js | 疑似3Dの騎手目線描画、自馬の首・手綱・ムチ、ミニマップ |
js/audio.js | WebAudio による合成音(オリジナルのファンファーレ、蹄音、歓声、ムチ、ゲート) |
js/game.js | 進行管理、入力、実況、HUD、セーブ |
js/i18n.js | 表示言語(日本語 / 英語)の文言と切り替え |
js/ads.js / js/ads-config.js | AdMob 広告(Android アプリのみ) |
js/build-info.js | タイトル画面に出すバージョン(ビルド時に生成) |
scripts/build-web.js | Android 同梱・Vercel 公開用に www/ を作る |
android/ | Android プロジェクト(Capacitor) |
tools/balance.js | 脚質バランス検証(node tools/balance.js [レース数] [fps] [レースid]) |
?speed=4 を URL に付けると早送り(動作確認用)。