個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗サッカーの オフサイド をテーマにしたブラウザゲームです。 あなたは赤チームの守備ライン。ドリブルで攻めてくる相手がパスを出す瞬間に、ラインから遅れている DF をタップしてラインを上げ、 相手を オフサイドトラップ にかけます。遊びながら、オフサイドが成立する条件・成立しない条件を学べます。全 10 プレーで何回ピンチを止められるかを競います。 場面は 13 種類からランダムに選ばれ(同じ場面は 2 回まで・続けては出ない)、同じ場面でも選手の配置・ラインの高さ・遅れている DF・パスのタイミングは毎回変わります。
画面は テレビ中継のようにメインスタンドの上から守備ラインを横から見る3D視点(右が守るゴール)。ナイター照明のスタジアム・選手・ボタン・花火・歓声などの質感は techgymjp/corner-kick(コーナーキック)と同じ作りです。
index.html をブラウザで開くだけで遊べます(ビルド不要)。3D描画に同梱の three.js(vendor/three.min.js, MIT License)を使っています。
GitHub Pages などの静的ホスティングにそのまま置けます。
ナビ ON なら、今のオフサイドライン(後ろから2人目の守備者の位置を示す赤い線)と、パスが出る合図(パサーの足元のオレンジの輪と「パスが来る!」)、 判断のチェックリスト(「スローイン・ゴールキック・コーナーキックから?ボールより後ろ?自陣?ならオフサイドなし」)が出ます。 ナビは答えを教えません。どの DF を上げるか、上げずに「マーク」するかは、ルールを使って自分で判断します。
| 条件 | ゲームでの再現 |
|---|---|
| 頭・胴体・足が相手陣内にあり、ボールと後ろから2人目の相手の両方よりゴールラインに近いとオフサイドポジション | パスの瞬間の位置で判定。差を cm / m で表示 |
| 同じ高さはオンサイド | 差が 10cm 未満は「同じ高さ → オンサイド」 |
| 判定は 味方がボールをプレーした瞬間 | 早すぎ(相手に戻られる)・遅すぎ・パスのあとのタップはすべて失敗 |
| ロングパス でも判定はキックの瞬間 | ロングボールの場面。蹴ったあとの飛び出しは関係ない |
| オフサイドポジションにいる だけでは反則ではない(プレーに関わると反則) | 旗は受け手がボールに関わったときに上がる。「2人が裏を狙う」では、おとりの11番がオフサイドポジションでも、パスを受けない限り反則にならない |
| 後ろから2人目 は GK も数える | 「キーパーが前に」: GK が前に出ていて、その後ろに DF が残っている。上げるべきは GK の後ろの DF |
| 自陣 にいる選手はオフサイドにならない | 「高いライン」: 9番は自陣から走り出す。上げずにカバーするのが正解 |
| ボールより後ろ の選手はオフサイドにならない | 「サイドをえぐられた」: ゴールライン近くからのマイナスのパス(カットバック) |
| ゴールキック・スローイン・コーナーキック からはオフサイドにならない | 「スローイン」「ゴールキック」「コーナーキック」: ラインを上げるとマークが外れて失点。上げずに競り合うのが正解 |
| ピッチの外に出た守備者は ゴールライン上にいる とみなす | 「DFがピッチの外に」: 倒れた DF がゴールラインの外にいるので、後ろから2人目は GK。上げてもオフサイドにならない |
| GK が 手で投げた ボールはオフサイドがある(判定は手から離れた地点。2025/26 の改正) | 「キーパーのスロー」: スローインとちがって罠にかけられる |
| フリーキック からはオフサイドがある | 「フリーキック」: 遅れている DF が 2 人。2 人とも上げないとオフサイドにならない |
タイトル画面の「📘 オフサイドのルール」では、上の条件に加えて、相手が意図的にプレーしたボール・ GK が手で投げたボールの判定位置(2025/26 の改正)・罰則(間接フリーキック)もまとめています。 出典: IFAB Laws of the Game 2025/26 Law 11(日本語版: JFA サッカー競技規則)。
| 場面 | 正解 |
|---|---|
| 中央突破 | 遅れている DF 1 人をパスの瞬間に上げる |
| ラインがそろっていない | 遅れている DF 2 人を両方上げる |
| ロングボール | 相手陣内からのロングボール。遅れている DF を上げる |
| 2人が裏を狙う | ラインを決めている DF を上げる。おとりのオフサイドポジションは反則ではない |
| キーパーが前に | GK の後ろに残っている DF を、少し早めに上げる |
| フリーキック | 遅れている DF 2 人を両方上げる |
| キーパーのスロー | 遅れている DF を上げる(GK のスローはオフサイドがある) |
| スローイン | 上げない(スローインからはオフサイドなし)。マークの DF が競り勝つ |
| ゴールキック | 上げない(ゴールキックからはオフサイドなし) |
| コーナーキック | 上げない(コーナーキックからはオフサイドなし) |
| サイドをえぐられた | 上げない(ボールより後ろの選手はオフサイドなし) |
| 高いライン | 上げない(自陣から走る選手はオフサイドなし)。カバーの DF が先に追いつく |
| DFがピッチの外に | 上げない(外に出た DF はゴールライン上とみなすので、後ろから2人目は GK) |
後半になるほど、相手の反応が速くなり、パスの振りかぶりが短くなり、遅れている DF とラインの差が小さくなります。
| 操作 | タッチ / マウス | キーボード |
|---|---|---|
| DF を上げる | DF の頭の上の番号のバッジ(または選手)をタップ | 1〜4(画面の奥の DF から順に) |
| マーク(体を寄せる) | 右の「マーク」ボタン | Space(または K) |
| 次のプレーへ(結果画面) | タップ | Space |
| 一時停止 | — | P / Esc |
| 音のオン/オフ | 画面上部のスピーカーボタン | M |
| ナビのオン/オフ | 画面上部の「ナビ」ボタン | N |
音はすべて Web Audio API で合成しています(音声ファイルなし)。
日本語と英語に対応しています。端末の言語が日本語なら日本語、それ以外は英語で表示し、タイトル画面左下のボタンで切り替えられます。
文言は i18n.js にまとめています。
Google Play で公開中: https://play.google.com/store/apps/details?id=jp.techgym.offside (ブラウザ版のタイトル画面の「📱 Android アプリ」ボタンからも開けます。アプリの中では出しません)
Capacitor でゲームのファイルをアプリに同梱し、Android アプリにしています(オフラインで遊べます)。
構成は techgymjp/jet-fighter の docs/ANDROID_PORTING.md、techgymjp/corner-kick と同じです。
jp.techgym.offsideビルドは GitHub Actions(.github/workflows/android.yml)で行います。
npm ci → npm run build(www/ に Web ファイルをコピーし、ads-config.js と build-info.js を生成)→ npx cap sync android → ./gradlew assembleDebugandroid-latest の offside.apk を差し替え(動作確認用・テスト広告)
https://github.com/techgymjp/offside/releases/tag/android-latest(QR コード: docs/apk-qr.png)https://github.com/techgymjp/offside/releases/latest/download/offside.apkANDROID_KEYSTORE_BASE64 / ANDROID_KEYSTORE_PASSWORD / ANDROID_KEY_ALIAS / ANDROID_KEY_PASSWORD)があれば、本番広告で署名付き AAB を作り Artifact に上げるAdMob のアプリ ID は android/app/src/main/res/values/strings.xml の admob_app_id、本番の広告ユニット ID は ads.js の UNITS.production にあります。
本番の広告ユニット ID はバナー・インタースティシャル・リワードの 3 つとも入っています(空にした種類は Google Play 用の AAB では出さない)。
動作確認用 APK はどれもテスト広告、Google Play 用の AAB は本番の広告です。
Google Play のストア掲載情報(日英の紹介文・リリースノート)とスクリーンショット・フィーチャーグラフィックは docs/store/ にあります(docs/store/listing.md)。
手元で試すとき: npm install → npm run android:sync → npm run android:open(Android Studio が必要)。
アイコンと起動画面は assets/ の元画像(夜のスタジアムで副審の旗とオフサイドライン)から作っています。
Android 版と同じ Capacitor のプロジェクトに ios/ を足して作っています。構成は techgymjp/jet-fighter(JET STRIKE)の iOS 版と同じです。
Mac での作業手順(ビルド・App Store Connect へのアップロード・審査用の画面録画・審査への提出)は docs/IOS_BUILD.md にあります。
jp.techgym.offside(Android と同じ)。ホーム画面の名前は「オフサイドトラップ」/「Offside Trap」ads.js の UNITS.ios、AdMob のアプリ ID は ios/App/App/Info.plist の GADApplicationIdentifiernpm run ios:sync(テスト広告)/ npm run ios:release(本番広告。App Store 用)/ npm run ios:open(Xcode で開く).github/workflows/ios.yml)で、push のたびに署名なしでビルドできるかを確認するdocs/store/ios/(スクリーンショット 2622×1206 日英各 4 枚、ヘッダ 3840×1646、検索結果 3840×2560)| ファイル | 内容 |
|---|---|
game.js | ゲームの進行・場面づくり・オフサイドの判定・選手とボールの動き・入力・2D の表示(HUD・バッジ・VAR・解説・ミニマップ) |
scene3d.js | 3D 描画(スタジアム・ゴールとネット・選手・副審の旗・ボール・オフサイドライン・花火・カメラ) |
sound.js | 音(Web Audio API で合成) |
i18n.js | 日本語 / 英語の文言(ルールの説明を含む) |
ads.js | 広告(AdMob。Android アプリのときだけ動く) |
android/ ios/ capacitor.config.json scripts/build-web.js | Android / iOS アプリ(Capacitor) |
テスト用に window.Offside(newGame(seed)、startAt(index, seed)、update(dt)、setBot(fn)、tap(key)、forceKind など)を公開しています。
著作権はテックジム株式会社に帰属します(All rights reserved)。許可なく複製・改変・再配布すること、Web サイトやアプリとして公開・販売すること、名前・ロゴ・アイコン・画像を使うことを禁止します。 テックジムの受講生が学習目的で複製・改変することは許可しますが、アプリストアでの公開・広告の掲載・販売などの商用利用は禁止し、著作権表示を残してください。 同梱の three.js は MIT License です。詳しくは LICENSE を見てください。
Offside Trap — a 3D football browser game about the offside trap and the offside law.
docs/IOS_BUILD.md for the iOS build steps.index.html in a browser to play.