Go Conference 2025向けのブラウザゲーム
画面内に散らばった複数のGopherくんの中から、特定のGopherくん(青い通常のGopher)だけを見つけてクリックし、最後の1体にするゲームです。
- 制限時間:30秒
- 目標:青いGopherくんを1体だけ残す(一意化)
- 正解のGopherをクリック:そのGopherが消える
- 不正解のGopherをクリック:-2秒のペナルティ
- スコア:クリア時の残り時間(ミリ秒)
- タッチエフェクト付き(成功時:赤い点線の円、失敗時:緑の「-2秒」表示)
- リザルト画面でXへのシェア機能(QRコード表示)
- WebAssemblyで動作するため、ブラウザで直接プレイ可能
find-gopher/
├── main.go # Goアプリケーション
├── server/
│ └── main.go # 開発用サーバー
├── model/ # データモデル層
│ └── effect.go # エフェクトの構造体定義
├── service/ # ビジネスロジック層
│ ├── game.go # ゲームのコントローラー
│ ├── gopher.go # Gopherの管理とクリック処理
│ ├── effect.go # エフェクトマネージャー
│ ├── assets.go # アセット管理
│ ├── image.go # 画像処理
│ ├── share.go # シェア機能
│ └── qrcode.go # QRコード生成
├── view/ # プレゼンテーション層
│ ├── renderer.go # メインレンダラー
│ ├── gopher_renderer.go # Gopher描画
│ ├── components/ # UI コンポーネント
│ │ ├── button.go # ボタンコンポーネント
│ │ ├── score_box.go # スコアボックス
│ │ └── effect.go # エフェクト描画
│ └── screens/ # 画面定義
│ ├── title.go # タイトル画面
│ ├── game.go # ゲーム画面
│ └── result.go # リザルト画面
├── internal/ # 内部パッケージ
│ └── font/
│ └── fontutil.go # フォント管理
├── assets/ # ゲームで使用するアセットファイル
├── web/ # 静的ファイル配信用ディレクトリ
│ ├── index.html # ゲームページ
│ ├── main.wasm # コンパイル済みゲーム(自動生成)
│ └── wasm_exec.js # Go WASM ランタイム
├── scripts/
│ └── build.sh # ビルドスクリプト
├── context/ # 仕様ファイル
│ └── requirements.md # ゲーム要件定義
├── CLAUDE.md # 開発ガイドライン
├── Makefile # タスクランナー
├── go.mod
└── go.sum
- Go 1.23以上
# ゲームをビルド
make build
# 開発サーバーを起動
make serve
# ブラウザで http://localhost:8080 にアクセス
mainブランチにマージされると、GitHub Actionsにより自動的にGitHub Pagesへデプロイされます。
- mainブランチへのプッシュ/マージをトリガー
- WebAssemblyビルドを実行
- GitHub Pagesへ自動デプロイ
- https://snkrdunk.github.io/find-gopher/ で公開
- BGMには以下のフリー音源を利用させて頂いております。
- 曲名: タイムリミットまであと何秒?
- アーティスト: 秦暁 様
- 掲載元: DOVA-SYNDROME