Transcendence

Un jeu en ligne de Pong en 3D, avec un matchmaking, un tchat, et un classement.

Transcendence est le dernier projet du cursus principal de l'École 42. Il doit être réalisé en équipe, dans notre cas nous étions 4 (Lucas, Alex, Arthur et moi-même). L'objectif est de réaliser un jeu de Pong en ligne avec quelques contraintes :

  • Le jeu doit pouvoir être joué en temps réel, avec WebSocket
  • Un matchmaking doit être mis en place pour permettre aux joueurs de trouver des adversaires
  • Un tchat doit être intégré pour permettre aux joueurs de communiquer
  • Les joueurs doivent pouvoir ajouter des amis et bloquer des joueurs
  • On doit intégrer de la double authentification
  • Un classement doit être mis en place pour permettre aux joueurs de se comparer
  • Il faut impérativement utiliser Nest.JS pour le backend, et les deux parties doivent être réalisées en TypeScript
  • La techno de BDD doit être PostgreSQL
  • Docker doit être utilisé pour le déploiement

La répartition des tâches

Alors que nous étions en train d'avancer sur RedesignerLab avec Arthur et Alex, Lucas qui n'avait jamais fait de web a pris les devants pour ce projet. On a choisi au préalable les technologies qu'on allait utiliser (Vue.js, TypeORM, Three.js, TailwindCSS), et Lucas a commencé à travailler sur le frontend, et la structure du projet. Arthur a alors pris en charge la partie sociale du backend (amitié, chat, blocage), tandis qu'Alex s'est occupé de l'authentification. De mon côté, j'avais en charge du jeu en lui-même, du matchmaking, et du classement.

Ma partie : le jeu

J'avais dès le départ l'ambition de réaliser le jeu en 3D, avec Three.js, dans un style minimaliste. J'ai regardé quelques exemples de jeux de Pong en 3D, et j'ai commencé à travailler sur la physique de la balle, et des raquettes, sans gestion en multijoueur. J'ai ensuite intégré la gestion des rooms, et le matchmaking, pour finalement intégrer la gestion des scores et du classement.

L'une des difficultés rencontrées a été de gérer correctement les collisions, notamment avec la latence. Tres.js, n'était pas tout à fait stable à ce moment, et j'ai dû faire quelques modifications pour que le jeu soit jouable.

Lorsque le jeu a été fonctionnel, j'ai également refactor certaines parties du backend pour éliminer des bugs et de potentiels side-effects indésirables de certaines fonctionnalités. Enfin, j'ai aidé au déploiement, particulièrement sur l'élaboration de la configuration Nginx.

Le résultat

Le jeu est fonctionnel, et a été présenté à la fin du cursus. Nous avons eu d'excellents retours de la part des autres étudiants et du staff de l'École, et nous avons été très fiers de ce que nous avions accompli, particulièrement dans le temps imparti. Alors que le projet se réalise généralement en 4 mois, nous l'avons réalisé en 3 mois, en allant plus loin que ce qui était demandé (avec le jeu en 3D, et sur la robustesse de nos endpoints).

Le code est librement consultable sur GitHub, des instructions sont également disponibles pour déployer notre réalisation.

La room de jeuLe jeu en lui-même