Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Deno Deploy とWebSocketを使ったオンライン四目並べゲーム

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for AKB428 AKB428
December 18, 2023

Deno Deploy とWebSocketを使ったオンライン四目並べゲーム

Deno Deploy とWebSocketを使ったオンライン四目並べゲーム
「しずくと四目並べしよ!オンライン」開発資料

2023/12/19
Serverless Frontend Meetup #4 「FaaS」 #serverlessF
発表資料
https://serverless-frontend.connpass.com/event/304564/

ゲームURLサンプル
https://yonmoku.deno.dev/room/akb70

Avatar for AKB428

AKB428

December 18, 2023
Tweet

Other Decks in Programming

Transcript

  1. 概要 • プロジェクトの目的: このプロジェクトは、 DenoとWebSocketを用いたリアルタイム Webアプリケー ションの開発過程とその技術的な側面を理解することを目的としています。 • アプリケーションの概要 :

    開発されたアプリケーションは、オンラインでプレイできる四目並べゲーム です。プレイヤーはリアルタイムで駒を配置し、ゲームの進行を他のプレイヤーと共有します。 • 技術スタック: 主な技術として、フロントエンドには JavaScriptとHTML5 Canvasを、バックエンドには DenoとWebSocketプロトコルを使用しています。また、データ管理とリアルタイム通信には Supabaseを活用しています。 • ポイント: リアルタイムWebアプリケーションの開発には、ユーザー間のインタラクションの即時性と データの同期が重要です。このプレゼンテーションでは、これらの要素を如何にして実現しているか に焦点を当てます。
  2. WebSocket通信の詳細 クライアント側の処理 • ウェブソケットの接続は、 JavaScriptを使用して WebSocket オブジェクトを作成することで開始されます。 • 接続が開始されると、クライアントはサーバーにメッセージを送信できます。 •

    クライアントはサーバーからのメッセージをリアルタイムで受信し、適切に処理します。 サーバー側の処理 • サーバーは、 DenoのWebSocket APIを利用してクライアントからの接続を受け入れます。 • クライアントからのデータを受信した際には、適切な応答や処理を行い、必要に応じてクライアントにデータを送信します。 • ゲームの状態更新やプレイヤー間のアクションをリアルタイムで処理し、反映させます。 通信の流れ • クライアントが行動(例 : 石を置く、キャラクターを選択する)を行う。 • 行動データは WebSocketを介してサーバーに送信されます。 • サーバーはこのデータを処理し、ゲームの状態を更新。 • 更新されたゲーム状態は、同じ部屋にいる他のクライアントにブロードキャストされます。
  3. サーバーの構成 • Deno Deployを活用: 本プロジェクトでは、Deno Deployをバックエンドとして採用しています。Deno Deployは、 WebSocketを用いたリアルタイム通信に対応しており、本プロジェクトの四目並べゲームにおける即時性とインタラク ティブな体験を実現しています。 •

    サーバーの役割: • WebSocket通信のハンドリング: クライアントからのWebSocket接続を受け入れ、双方向のリアルタイム通信 を管理します。 • ゲーム状態の管理: ゲームの進行状況、プレイヤーの行動、ゲームボードの状態などを管理し、適切なタイミ ングでクライアントに情報を配信します。 • Supabaseとの連携: ゲームの状態はSupabaseに保存され、サーバーはデータベースの変更をリアルタイム で監視し、必要に応じてクライアントへの情報を更新します。 • Supabaseの役割: • データの永続化: プレイヤーの設定、ゲームの進行状態などのデータを安全に保存し、アプリケーションの再 起動や複数セッションにわたって情報を保持します。 • リアルタイムデータベース: ゲームの状態が変更されるたびに、その情報をリアルタイムでサーバーに通知 し、ユーザー体験の向上に貢献します。
  4. ゲームの実装 • フロントエンド(クライアントサイド) : • JavaScriptとHTML5 Canvasの使用: ゲームのインターフェースは HTML5のCanvas要素を使用して描画され、 JavaScriptでゲームロジックが実装されています。

    • ユーザーインタラクション: プレイヤーはマウスクリックでゲームボード上に石を置きます。石は下から積み上げ る形で配置され、四目並べのルールに従います。 • バックエンド(サーバーサイド) : • Deno DeployとWebSocket: サーバーサイドはDeno Deployを利用し、WebSocketを通じてクライアント間のリ アルタイム通信を実現しています。 • ゲーム状態の同期と管理: サーバーはゲームの状態を管理し、プレイヤー間での状態同期を担います。 • ゲームロジック: • ゲーム終了の判定: 任意のプレイヤーが横、縦、斜めに 4つの石を並べた場合、ゲームは終了し、勝利プレイ ヤーが決定されます。 • 勝利セルのハイライト: 勝利条件を満たしたセルは特別な色でハイライトされ、勝利の視覚的な確認を提供しま す。 • データの永続化: • Supabaseの活用: ゲームの進行状態やプレイヤーの設定などは Supabaseに保存され、セッション間でのデー タの永続化が可能になっています。