J’ai été plutôt discret ces derniers temps, pris pas mal d’occupations, dont la finalisation de nos projets de fin d’année à SUPINFO.

Nous venons juste (mes 3 collègues et moi) de passer notre soutenance orale, ce qui met enfin un terme à plusieurs mois de développement.

Notre présentation s’est très bien passée, et dans l’euphorie de la victoire, je vais vous présenter un peu plus en détail le projet sur lequel j’ai le plus travaillé : un jeu de Tower Defense développé entièrement en C#, avec l’aide de la bibliothèque graphique SFML (plus précisément, son binding .net).

RAMPART screenshot

RAMPART 1991

 

Le sujet était imposé mais nous avions le champ libre pour le langage de développement, et nous nous sommes demandé ce que pouvait donner un petit jeu en C# :)

Le jeu original, RAMPART, dont nous nous sommes inspiré, date des années 1990 et a été développé en assembleur. Il est téléchargeable ici, et est jouable en utilisant DosBox.

 

Passons au notre maintenant…

 

1. Gameplay

 

Une petite explication pour commencer : la carte se présente sous la forme d’une ile, avec plusieurs châteaux. Le but du jeu est de se construire une sorte de forteresse autour des châteaux, ce qui permettra de placer des défenses contre les vagues de bateaux ennemis qui vont arriver.

Tous les châteaux doivent êtres capturés par le joueur pour que la partie soit gagnée.

Le jeu se divise en 3 phases de gameplay :

  1. Création à l’aide de murs de forme aléatoire, d’une zone fermée, contenant un ou plusieurs châteaux.
  2. Placement de canons/tours à l’intérieur des zones sécurisées.
  3. Combat contre les vagues de bateaux ennemis. Il faut en couler en maximum le plus vite possible pour ménager les murs.

 

Le gameplay de base est très rapide, découpé en phases d’environ 15 secondes, ce qui conserve un rythme soutenu.

Il existe également un mode multi-joueur, que nous n’avons finalement pas eu le temps de commencer.

Nous avons par contre intégré un prototype de mode de jeu “stratégique”, plus orienté gestion de ressources que le jeu de base.

Le joueur doit alors répartir des ressources de base limitées pour construire des murs, des tours, des munitions…

 

Un screenshot du jeu en cours de partie :

Interface principale du jeu

 

2. Conception

 

Comme nous n’avions pas une grande expérience du développement de jeux, qui est très différent d’une application classique, le projet s’est construit de lui même, à partir de ce que nous voulions atteindre, des problèmes que nous avons rencontré, et beaucoup de refactoring. :D

J’ai essayé d’imposer une architecture cohérente et efficace le plus possible, luttant contre mon binôme et sa programmation parfois anarchique :) et bien que j’ai du faire quelques concessions à la vue de la deadline qui se rapprochait, je suis plutôt content du résultat.

Nous avons beaucoup utilisé les avantages de l’orienté objet, ce qui me permet de vous présenter ces magnifiques diagrammes UML :

Gestion des tirs et des dégats

Gestion des tirs et des dégats

 

 

Gestion des objets fixes

Gestion des objets fixes

 

J’espère que vous avez apprécié. ^^

 

 

Graphismes & particules

Graphismes & particules

 

Concernant le code pur, nous nous sommes fait plaisir (surtout mon binôme cette fois).

 

Nous avons notamment développé un générateur de maps aléatoires, un système de pathfinding pour les bateaux, ainsi qu’un moteur de particules.

 

Ce moteur de particules, il faut bien l’avouer, est en grande partie responsable de l’aspect graphique attrayant du jeu.

 

Il permet de générer feu, fumée, et explosions du plus bel effet, en prenant en charge le type de cible que le boulet atteint.

 

 

Boulets enflammés

Boulets enflammés

 

Il permet aussi de tirer des boulets enflammés, nettement plus attractifs visuellement pour le joueur :)

 

En parlant de graphismes, nous avons des textures assez immenses (256*256 par bloc), ce qui permet un zoom impressionnant, bien que peu pratique pour jouer.

 

Tous les sprites du jeu proviennent de rendu 3D haute définition (tours, bateaux, arbres…)

 

3. Vue d’ensemble du jeu

 

J’ai volontairement simplifié cet article pour ne parler que de ce qui m’intéressait, mais étant donné que c’est le résultat de plusieurs mois de travail, il est évidemment bien plus complexe : 6646 lignes de code à la dernière révision, sans compter la SFML que nous avons légèrement modifié pour nos besoins…

 

Je n’ai pour l’instant pas l’intention de publier le code ou/et une version binaire du jeu.

Ce n’est de toute façon dans son état actuel qu’une version beta améliorée… qui sera peut être terminée un jour, on ne sait jamais :)

 

Et pour terminer, une petite vidéo de démo.

 

 

Ecrit un soir d’orage, en écoutant Dope Star Inc.