Maison >interface Web >js tutoriel >Apprenez à créer un jeu d'échecs multijoueur avec React
Bonjour et bienvenue ! ??
Aujourd'hui, j'apporte un tutoriel pour vous guider dans la création d'un jeu d'échecs multijoueur à l'aide de SuperViz. Les jeux multijoueurs nécessitent une synchronisation et une interaction en temps réel entre les joueurs, ce qui en fait des applications idéales pour les capacités de SuperViz.
Ce didacticiel vous montrera comment créer un jeu d'échecs dans lequel deux joueurs peuvent jouer l'un contre l'autre en temps réel, en voyant les mouvements de chacun au fur et à mesure qu'ils se produisent.
Nous montrerons comment configurer un échiquier à l'aide de la bibliothèque React-Chessboard, gérer l'état du jeu avec chess.js et synchroniser les mouvements des joueurs avec SuperViz. Cette configuration permet à plusieurs participants de rejoindre une partie d'échecs, d'effectuer des mouvements et de découvrir un environnement de jeu d'échecs transparent et interactif. Commençons !
Pour suivre ce tutoriel, vous aurez besoin d'un compte SuperViz et d'un token de développeur. Si vous disposez déjà d'un compte et d'un token de développeur, vous pouvez passer à l'étape suivante.
Pour créer un compte, accédez à l'inscription SuperViz et créez un compte en utilisant Google ou un e-mail/mot de passe. Il est important de noter que lorsque vous utilisez un e-mail/un mot de passe, vous recevrez un lien de confirmation sur lequel vous devrez cliquer pour vérifier votre compte.
Pour utiliser le SDK, vous devrez fournir un jeton de développeur, car ce jeton est essentiel pour associer les requêtes du SDK à votre compte. Vous pouvez récupérer les jetons SuperViz de développement et de production à partir du tableau de bord. Copiez et enregistrez le jeton de développeur, car vous en aurez besoin dans les prochaines étapes de ce didacticiel.
Pour commencer, vous devrez mettre en place un nouveau projet React dans lequel nous intégrerons SuperViz.
Tout d'abord, créez une nouvelle application React à l'aide de Create React App with TypeScript.
npm create vite@latest chess-game -- --template react-ts cd chess-game
Ensuite, installez les bibliothèques nécessaires à notre projet :
npm install @superviz/sdk react-chessboard chess.js uuid
Dans ce tutoriel, nous utiliserons le framework CSS Tailwind. Tout d’abord, installez le package tailwind.
npm install -D tailwindcss postcss autoprefixer npx tailwindcss init -p
Nous devons ensuite configurer le chemin du modèle. Ouvrez tailwind.config.js à la racine du projet et insérez le code suivant.
/** @type {import('tailwindcss').Config} */ export default { content: [ "./index.html", "./src/**/*.{js,ts,jsx,tsx}", ], theme: { extend: {}, }, plugins: [], }
Ensuite, nous devons ajouter les directives tailwind au fichier CSS global. (src/index.css)
@tailwind base; @tailwind components; @tailwind utilities;
Créez un fichier .env à la racine de votre projet et ajoutez votre clé de développeur SuperViz. Cette clé sera utilisée pour authentifier votre application auprès des services SuperViz.
VITE_SUPERVIZ_API_KEY=YOUR_SUPERVIZ_DEVELOPER_KEY
Dans cette étape, nous implémenterons la logique principale de l'application pour initialiser SuperViz et gérer les mouvements d'échecs en temps réel.
Ouvrez src/App.tsx et configurez le composant principal de l'application à l'aide de SuperViz pour gérer l'environnement collaboratif.
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';
Explication :
Définissez des constantes pour la clé API, l'ID de la salle et l'ID du joueur.
const apiKey = import.meta.env.VITE_SUPERVIZ_API_KEY as string; const ROOM_ID = 'chess-game'; const PLAYER_ID = generateId();
Explication :
Créez un type pour gérer les messages de mouvements d'échecs.
type ChessMessageUpdate = RealtimeMessage & { data: { sourceSquare: Square; targetSquare: Square; }; };
Explication :
Configurez le composant principal de l'application et initialisez les variables d'état.
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);
Explication :
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.
Dalam tutorial ini, kami membina permainan catur berbilang pemain menggunakan SuperViz untuk penyegerakan masa nyata. Kami mengkonfigurasi aplikasi React untuk mengendalikan pergerakan catur, membolehkan berbilang pemain bekerjasama dengan lancar pada papan catur yang dikongsi. Persediaan ini boleh dilanjutkan dan disesuaikan agar sesuai dengan pelbagai senario yang memerlukan interaksi permainan.
Jangan ragu untuk menerokai kod penuh dan contoh lanjut dalam repositori GitHub untuk mendapatkan butiran lanjut.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!