ホームページ >ウェブフロントエンド >jsチュートリアル >React を使用してマルチプレイヤー チェス ゲームを構築する方法を学ぶ
こんにちは、ようこそ! ??
今日は、SuperViz を使用してマルチプレイヤー チェス ゲームを構築する方法を説明するチュートリアルをお届けします。マルチプレイヤー ゲームはリアルタイムの同期とプレイヤー間の対話を必要とします。そのため、SuperViz の機能にとって理想的なアプリケーションとなります。
このチュートリアルでは、2 人のプレーヤーがリアルタイムで対戦し、互いの動きをリアルタイムで確認できるチェス ゲームの作成方法を説明します。
react-chessboard ライブラリを使用してチェス盤をセットアップし、chess.js でゲーム状態を管理し、SuperViz でプレイヤーの動きを同期する方法を示します。この設定により、複数の参加者がチェス ゲームに参加し、手を動かし、シームレスでインタラクティブなチェス ゲーム環境を体験できるようになります。 始めましょう!
このチュートリアルに従うには、SuperViz アカウントと開発者トークンが必要です。すでにアカウントと開発者トークンをお持ちの場合は、次のステップに進むことができます。
アカウントを作成するには、SuperViz 登録に移動し、Google または電子メール/パスワードを使用してアカウントを作成します。メール/パスワードを使用する場合は、アカウントを確認するためにクリックする必要がある確認リンクを受け取ることに注意することが重要です。
SDK を使用するには、開発者トークンを提供する必要があります。このトークンは、SDK リクエストをアカウントに関連付けるために不可欠です。開発用と運用用の両方の SuperViz トークンをダッシュボードから取得できます。このチュートリアルの次のステップで必要になるため、開発者トークンをコピーして保存します。
まず、SuperViz を統合する新しい React プロジェクトをセットアップする必要があります。
まず、Create React App with TypeScript を使用して新しい React アプリケーションを作成します。
npm create vite@latest chess-game -- --template react-ts cd chess-game
次に、プロジェクトに必要なライブラリをインストールします。
npm install @superviz/sdk react-chessboard chess.js uuid
このチュートリアルでは、Tailwind CSS フレームワークを使用します。まず、tailwind パッケージをインストールします。
npm install -D tailwindcss postcss autoprefixer npx tailwindcss init -p
次に、テンプレートのパスを構成する必要があります。プロジェクトのルートにある tailwind.config.js を開き、次のコードを挿入します。
/** @type {import('tailwindcss').Config} */ export default { content: [ "./index.html", "./src/**/*.{js,ts,jsx,tsx}", ], theme: { extend: {}, }, plugins: [], }
次に、tailwind ディレクティブをグローバル CSS ファイルに追加する必要があります。 (src/index.css)
@tailwind base; @tailwind components; @tailwind utilities;
プロジェクト ルートに .env ファイルを作成し、SuperViz 開発者キーを追加します。このキーは、SuperViz サービスでアプリケーションを認証するために使用されます。
VITE_SUPERVIZ_API_KEY=YOUR_SUPERVIZ_DEVELOPER_KEY
このステップでは、SuperViz を初期化し、リアルタイムのチェスの手を処理するためのメイン アプリケーション ロジックを実装します。
src/App.tsx を開き、SuperViz を使用してメイン アプリケーション コンポーネントをセットアップし、共同作業環境を管理します。
import { v4 as generateId } from 'uuid'; import { useCallback, useEffect, useRef, useState } from "react"; import SuperVizRoom, { Realtime, RealtimeComponentEvent, RealtimeMessage, WhoIsOnline } from '@superviz/sdk'; import { Chessboard } from "react-chessboard"; import { Chess, Square } from 'chess.js';
説明:
API キー、ルーム ID、およびプレーヤー ID の定数を定義します。
const apiKey = import.meta.env.VITE_SUPERVIZ_API_KEY as string; const ROOM_ID = 'chess-game'; const PLAYER_ID = generateId();
説明:
チェスの移動メッセージを処理するためのタイプを作成します。
type ChessMessageUpdate = RealtimeMessage & { data: { sourceSquare: Square; targetSquare: Square; }; };
説明:
メインのアプリコンポーネントを設定し、状態変数を初期化します。
export default function App() { const [initialized, setInitialized] = useState(false); const [gameState, setGameState] = useState<Chess>(new Chess()); const [gameFen, setGameFen] = useState<string>(gameState.fen()); const channel = useRef<any | null>(null);
説明:
Create an initialize function to set up the SuperViz environment and configure real-time synchronization.
const initialize = useCallback(async () => { if (initialized) return; const superviz = await SuperVizRoom(apiKey, { roomId: ROOM_ID, participant: { id: PLAYER_ID, name: 'player-name', }, group: { id: 'chess-game', name: 'chess-game', } }); const realtime = new Realtime(); const whoIsOnline = new WhoIsOnline(); superviz.addComponent(realtime); superviz.addComponent(whoIsOnline); setInitialized(true); realtime.subscribe(RealtimeComponentEvent.REALTIME_STATE_CHANGED, () => { channel.current = realtime.connect('move-topic'); channel.current.subscribe('new-move', handleRealtimeMessage); }); }, [handleRealtimeMessage, initialized]);
Explanation:
Create a function to handle chess moves and update the game state.
const makeMove = useCallback((sourceSquare: Square, targetSquare: Square) => { try { const gameCopy = gameState; gameCopy.move({ from: sourceSquare, to: targetSquare, promotion: 'q' }); setGameState(gameCopy); setGameFen(gameCopy.fen()); return true; } catch (error) { console.log('Invalid Move', error); return false; } }, [gameState]);
Explanation:
Create a function to handle piece drop events on the chessboard.
const onPieceDrop = (sourceSquare: Square, targetSquare: Square) => { const result = makeMove(sourceSquare, targetSquare); if (result) { channel.current.publish('new-move', { sourceSquare, targetSquare, }); } return result; };
Explanation:
Create a function to handle incoming real-time messages for moves made by other players.
const handleRealtimeMessage = useCallback((message: ChessMessageUpdate) => { if (message.participantId === PLAYER_ID) return; const { sourceSquare, targetSquare } = message.data; makeMove(sourceSquare, targetSquare); }, [makeMove]);
Explanation:
Use the useEffect hook to trigger the initialize function on component mount.
useEffect(() => { initialize(); }, [initialize]);
Explanation:
Return the JSX structure for rendering the application, including the chessboard and collaboration features.
return ( <div className='w-full h-full bg-gray-200 flex items-center justify-center flex-col'> <header className='w-full p-5 bg-purple-400 flex items-center justify-between'> <h1 className='text-white text-2xl font-bold'>SuperViz Chess Game</h1> </header> <main className='w-full h-full flex items-center justify-center'> <div className='w-[500px] h-[500px] shadow-sm border-2 border-gray-300 rounded-md'> <Chessboard position={gameFen} onPieceDrop={onPieceDrop} /> <div className='w-[500px] h-[50px] bg-gray-300 flex items-center justify-center'> <p className='text-gray-800 text-2xl font-bold'>Turn: {gameState.turn() === 'b' ? 'Black' : 'White'}</p> </div> </div> </main> </div> );
Explanation:
Here's a quick overview of how the project structure supports a multiplayer chess game:
To run your application, use the following command in your project directory:
npm run dev
This command will start the development server and open your application in the default web browser. You can interact with the chessboard and see moves in real-time as other participants join the session.
このチュートリアルでは、リアルタイム同期に SuperViz を使用してマルチプレイヤー チェス ゲームを構築しました。チェスの手を処理するように React アプリケーションを構成し、複数のプレーヤーが共有チェス盤上でシームレスに共同作業できるようにしました。このセットアップは、ゲーム インタラクションが必要なさまざまなシナリオに合わせて拡張およびカスタマイズできます。
詳細については、GitHub リポジトリにある完全なコードとその他の例を自由に調べてください。
以上がReact を使用してマルチプレイヤー チェス ゲームを構築する方法を学ぶの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。