サカタカップ

みんなで「えいっ!!」と引っ張るゲーム

https://github.com/NKMAK/matter.js-test

GitHub

Redis

Python

Docker

HTML

ボールをパチンコのように弾き、全員で協力してゴールを目指すゲーム

Tanakaryuki

推しアイデア

Web上で物理エンジンで遊ぶ

作った背景

カオスなゲームが好きだから

推し技術

リアルタイム通信のWebSocket、物理演算エンジンのMatter.js、高速データ管理のRedisを活用し、スムーズで直感的なゲーム体験を実現!

プロジェクト詳細

アプリ詳細

みんなで協力してボールをゴールに導くゲーム WebSocket を用いたスムーズな同期と、Matter.js によるリアルな物理演算で、直感的な操作を実現。


ゲームの流れ

1. オーナーが部屋を作成

  • オーナーはゲームルームを作成し、Room ID が発行される。
  • WebSocket 接続を確立し、ゲームのホストとなる。

2. 参加者が入室

  • 参加者はオーナーから共有された Room ID を入力し、部屋に参加。

3. ゲーム開始

  • オーナーが「開始」ボタンを押すと、全プレイヤーにゲーム開始の通知を送信。
  • Matter.js で描画された 2D ゴルフのステージが表示される(ステージは固定)。

4. ボールをゴールに入れる

  • プレイヤーはボールの弾く向きと強さを決定。
  • Matter.js の物理エンジンを利用し、ボールをドラッグしてエイム & パワーを設定。
  • 設定が完了すると、サーバへ情報を送信。

5. サーバが最終ベクトルを計算

  • 全プレイヤーの入力を集計し、サーバがベクトルの平均を計算。

6. 返却されたベクトル情報を実行

  • クライアント上で計算されたベクトルを適用し、ボールを動かす。
  • ゴールに触れなければ継続、触れたらゲームクリア!!。

使用技術

WebSocket(FastAPI) : 全プレイヤーのリアルタイム通信を実現 Matter.js : 物理エンジンを用いた 2D ゴルフの描画・挙動を制御 Redis : 高速なデータ管理でスムーズな同期を実現


難しかったところ

  • 作成するプロダクトがハッカソン中に2回変更した
  • WebSocketのルーム管理
  • ゲームの状態管理
  • Matter.js(物理エンジン)の挙動が不安定

こんな人におすすめ

  • 友達とリアルタイムで遊べるゲームを楽しみたい人
  • 直感的な物理演算ゲームが好きな人
  • 協力プレイで戦略を考えながら遊びたい人

みんなでボールを飛ばし、ゴールを目指そう。

Tanakaryuki

@Tanakaryuki