Skip to content

Latest commit

 

History

325 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

高専祭 5I メタバーすごろく バックエンド

現実とネット上を交差させながら遊べる「メタバーすごろく」のバックエンドサーバーです。

フロントエンド: https://github.com/shii-park/Metasugo-Frontend

サイト: https://metasugo.vercel.app

主な機能

  • リアルタイムなゲームプレイ: WebSocketを使用して、複数のプレイヤーが同時にすごろくゲームをプレイできます。
  • 多彩なマス効果: 収入、支出、クイズ、ギャンブル、分岐など、様々な効果を持つマスを実装しています。
  • Firebase連携:
    • Firebase Authentication: プレイヤーの認証を行い、安全な通信を実現します。
    • Cloud Firestore: ゲームのクリアデータ(ランキング情報)を永続化します。
  • 柔軟なゲーム設定: tiles.json ファイルを編集することで、すごろくの盤面やマスの効果を自由にカスタマイズできます。

アーキテクチャ

GoのWebフレームワークである Gin をベースに構築されています。

  • エントリーポイント (cmd/app/main.go): アプリケーションの起動、ロガーやミドルウェアの設定、Firebaseの初期化、ルーティングのセットアップなどを行います。
  • リアルタイム通信 (internal/hub): WebSocket (gorilla/websocket) を利用したリアルタイム通信の中核を担います。Hub が全クライアントの接続を管理し、ゲームの状態変更をリアルタイムにブロードキャストします。
  • ゲームロジック (internal/sugoroku, internal/game):
    • sugoroku: ゲームの基本的な要素(プレイヤー、タイル、マス効果など)を定義します。
    • game: GameManager がゲーム全体の進行を管理し、プレイヤーのアクションに応じてゲーム状態を更新し、Hub を介してクライアントに通知します。
  • APIハンドラ (internal/handler): WebSocket接続の処理や、ランキング取得などのHTTPリクエストを処理します。
  • 認証 (internal/middleware): Firebase Authenticationと連携し、リクエストの認証・認可を行います。
  • データベース (internal/service): Cloud Firestoreとのやり取りを抽象化し、データの永続化を担います。

データフロー (ゲーム進行)

  1. 接続と認証: クライアントはFirebaseのIDトークンを使ってWebSocket接続をリクエストします。サーバーはトークンを検証し、接続を確立します。
  2. プレイヤー登録: 新しいクライアントは Hub に登録され、ゲームに参加します。サーバーは現在の全プレイヤーの情報を新しいクライアントに送信します。
  3. プレイヤーのアクション:
    • クライアントが「サイコロを振る」(ROLL_DICE) などのアクションをサーバーに送信します。
    • GameManager がアクションを処理し、ゲームの状態(プレイヤーの位置、所持金など)を更新します。
  4. 状態の更新と通知:
    • 即時効果: マスの効果が即時適用される場合(例: 所持金の増減)、GameManager は全プレイヤーに状態変更 (MONEY_CHANGED など) をブロードキャストします。
    • 入力要求: マスの効果がプレイヤーの入力を必要とする場合(例: 分岐、クイズ)、サーバーは対象のプレイヤーにのみ選択肢 (BRANCH_CHOICE_REQUIRED など) を送信します。
  5. 入力への応答: プレイヤーが選択を行うと、その情報がサーバーに送信され、GameManager が結果を処理して、必要に応じて全プレイヤーに状態をブロードキャストします。
  6. 切断: クライアントが切断すると、Hub から登録解除され、ゲームから退出します。

API仕様

WebSocket API

クライアントとサーバー間のリアルタイム通信は、すべてJSON形式のメッセージで行われます。

詳細は API.md を参照してください。

REST API

エンドポイント メソッド 説明 認証
/ranking GET ゲームをクリアしたプレイヤーのランキングを取得します。 必要
/tiles GET 現在のゲームボードのタイル情報 (tiles.json) を取得します。 必要
/bestscore GET ログインしているプレイヤーの過去最高のスコアを取得します。 必要

ゲームボード設定

すごろくの盤面(マスの種類、配置、効果など)は tiles.json ファイルで定義されています。このファイルを編集することで、ゲームの内容を自由にカスタマイズできます。

詳細は Tile.md を参照してください。

利用方法

1. 前提条件

  • Go 1.18 以上
  • Firebaseプロジェクト
    • Firebase Authentication と Cloud Firestore が有効になっていること。
    • サービスアカウントキー (JSONファイル) を取得していること。

2. セットアップ

  1. リポジトリをクローン:

    git clone https://github.com/shii-park/Metasugo-Backend.git
    cd Metasugo-Backend
  2. 環境変数の設定: プロジェクトのルートに .env ファイルを作成し、以下の内容を記述します。

    # FirebaseのサービスアカウントキーのJSONファイルへのパス
    GOOGLE_APPLICATION_CREDENTIALS="./firebase-service-account.json"
    
    # FirebaseプロジェクトのID
    FIREBASE_PROJECT_ID="your-firebase-project-id"
    
    # ゲームボードのタイル定義ファイルへのパス
    TILES_JSON_PATH="./tiles.json"
    

    firebase-service-account.json は、実際に取得したサービスアカウントキーのファイル名に置き換えてください。

  3. 依存関係のインストール:

    go mod tidy

3. サーバーの実行

go run cmd/app/main.go

サーバーはデフォルトで :8080 ポートで起動します。

About

北九州高専2026高専祭 5Iのバックエンドサーバー

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages