Programmation de jeux vidéo : par où commencer ?

Publié le 13 janvier 2006 et mis à jour le 11 octobre 2012

Par Laurent GomilaSite personnel

 

Nombreux sont celles et ceux qui souhaitent entrer dans le cercle des développeurs de jeux. Malheureusement, cela se révèle bien souvent beaucoup plus compliqué qu'on ne le croit, surtout pour les débutants.
Cet article vous aidera, je l'espère, à clarifier les choses, choisir les bons outils et faire vos premiers pas dans le monde du jeu vidéo.
Une version actualisée de ce tutoriel est maintenant disponible.

Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Share on Google+      



0. Nouvelle version
1. Introduction
2. Identifier ses besoins
3. Choix de la plateforme
3.1. Développement pour consoles
3.2. Développement pour téléphones portables
3.3. Développement pour PDA / Palm / PocketPC
4. Choix des armes
4.1. Les logiciels tout-en-un (pour les créatifs)
4.1.1. RPG Maker
4.1.2. MUGEN
4.1.3. Conclusion
4.2. Les langages BASIC (pour les progueux du dimanche)
4.2.1. DarkBasic Pro - 3D Games Creator Pro
4.2.2. PureBasic
4.2.3. BlitzBasic
4.2.4. Conclusion
4.2.5. Hyperion
4.3. Les langages bas niveau (pour les passionnés)
4.3.1. Je débarque : je ne connais aucun langage
4.3.2. Je maîtrise déjà un langage de programmation
5. Choix des bibliothèques
5.1. Les bibliothèques de jeu : tout en un
5.2. Les moteurs
5.3. Les APIs bas niveau
5.4. Les bibliothèques utiles
6. Méthodologie
6.1. L'extrem programming (XP)
6.2. UML quoiqu'il arrive
6.3. L'outil ultime du codeur : le crayon et le bout de papier
6.4. CVS / SVN, ou comment gérer proprement ses sources
6.5. Conseils d'ordre général pour bien progresser
7. Et maintenant ?
7.1. Ressources
7.2. Sites communautaires
7.3. Jeux open-source
7.4. Intégrer une équipe
8. Conclusion
9. Téléchargements


0. Nouvelle version

Une version actualisée de ce tutoriel est maintenant disponible.


1. Introduction

Ces dernières années le marché du jeu vidéo a explosé, à tel point qu'il est de nos jours plus important que celui du grand écran.

Les jeux vidéo attirent un public de plus en plus large, mais séduisent également de plus en plus de développeurs. Malheureusement, la programmation de jeu vidéo est souvent méconnue et beaucoup imaginent que ce sera aussi "fun" que de jouer. Le fait est que c'est totalement faux, en vérité le jeu vidéo demande beaucoup d'investissement ainsi que des connaissances théoriques et pratiques assez poussées, que la plupart des codeurs n'ont pas forcément.

Toutefois, pour ceux qui sont bien conscients de tout cela, coder un jeu vidéo ne se révèle tout de même pas une partie de plaisir, et beaucoup se perdent dans la jungle du développement de jeux.

Cet article est donc une introduction à la programmation de jeux, et a pour but d'orienter et de conseiller les débutants, afin de leur fournir de bonnes bases pour démarrer et continuer sereinement le développement de jeux.

warning Attention, cet article ne parlera donc que de programmation ; tout ce qui concerne le game design, la scénarisation, le dessin, la modélisation, ... ne sera pas abordé ici.

2. Identifier ses besoins

Le codage d'un jeu vidéo est une tâche complexe, longue et requierant de nombreuses compétences. Il est donc très probable que tous les aspects de la création d'un jeu vidéo ne vous intéressent pas. Comme je l'ai précisé en introduction, si ce qui vous intéresse dans un jeu ce n'est pas la programmation, alors vous pouvez d'ores et déjà stopper la lecture de cet article : il ne parlera que de développement.

La programmation d'un jeu se compose elle aussi de nombreuses compétences : rendu 2D / 3D, physique, intelligence artificielle, réseau, rendu sonore, scripting, logique de jeu, ... Il est possible de maîtriser chacun de ces domaines, mais autant vous le dire : en apprendre un seul à la fois est déjà suffisamment compliqué, ne vous dispersez donc pas. D'autant plus que votre boulot au sein d'une équipe de développement de jeu sera certainement limité à un seul domaine (voire à un sous-ensemble de ce domaine), vous n'aurez jamais à toucher à tout.

Une fois votre domaine préféré identifié, il faut savoir que ce n'est pas parce qu'on l'aime qu'il sera facile de l'appréhender. Chacune de ces disciplines requiert en effet de solides connaissances théoriques, que ce soit en algèbre linéaire pour la programmation 3D, en physique pour la... physique, en logique pour l'IA, en protocoles bas niveau pour le réseau, etc. Assurez-vous donc d'être à jour à ce niveau, ou de commencer votre apprentissage par ça si ce n'est pas le cas.

Le second besoin à identifier, et certainement le plus important, concerne votre motivation. Il y a globalement deux types de codeurs de jeux : ceux qui veulent le plus rapidement possible concrétiser leur esprit créatif, et ceux qui veulent coder pour coder, acquerir un maximum d'expérience, quelque soit le jeu qui se trouve derrière. Nous verrons plus tard l'incidence que cela aura sur le choix des technologies.


3. Choix de la plateforme

Le jeu vidéo se démocratise, et touche de plus en plus de plateformes :

  • Ordinateurs personnels
  • Consoles de salon
  • Consoles portables
  • Téléphones portables
  • PDAs
  • Internet / jeux en ligne
Précision qui ne mange pas de pain : quelque soit la plateforme que vous ciblerez, le développement lui se fera bien entendu toujours sur ordinateur. Simplement, vous générerez avec les outils adéquats des fichiers compatibles avec la plateforme cible, et non des binaires utilisables par votre système d'exploitation. Vous vous imaginiez vraiment développer un jeu de A à Z sur une Game Boy ?

Bien que la théorie du jeu vidéo reste la même quelque soit la plateforme, il faut savoir qu'au niveau technique il pourra exister de grosses différences selon celle que vous choisirez.

Par exemple, viser les ordinateurs personnels peut paraître plus facile du fait des nombreux outils et bibliothèques disponibles de par le net ; cela peut par contre devenir un vrai challenge pour gérer toutes les combinaisons de systèmes et de matériels à supporter pour toucher tous les joueurs. Les consoles au contraire, peuvent rebuter de par la spécificité des outils à utiliser, par contre vous n'aurez aucun souci au niveau de la compatibilité puisque vous n'aurez à gérer qu'une seule et unique configuration.

info Une bibliothèque (library) est un ensemble de fonctions, classes ou variables, que vous pouvez utiliser pour effectuer des tâches bien spécifiques (parcourir des fichiers XML, traiter des images, manipuler des dates, ...) sans avoir à les reprogrammer.
N'oubliez pas non plus que selon la plateforme que vous choisirez, vous aurez accès ou non à certains outils ou certaines APIs. On peut le dire : à ce niveau le développement sous Windows est plus fourni ; attention je n'ai pas dit non plus qu'il était difficile de se procurer de quoi développer sous Unix.
Le développement multi-plateforme est bien sûr la panacée, mais cela demande des efforts supplémentaires que l'on n'est pas forcément apte à faire lorsqu'on débute.

info Une API (Application Programming Interface) est une bibliothèque de fonctions, permettant en général d'accéder au matériel ou à des fonctions du système d'exploitation. La nuance avec bibliothèque est assez faible.
Dans un premier temps concentrez-vous donc sur une unique plateforme, voire une unique configuration (la vôtre). Cela sera bien suffisant pour acquérir un bout d'expérience, et les considérations relatives à la gestion de plusieurs systèmes ou configurations sont plutôt pénibles voire inutiles pour un débutant.

A choisir entre ordinateurs personnels et consoles ou téléphones portables, je dirais qu'il vaut mieux se concentrer dans un premier temps sur le premier, mais les autres plateformes sont aujourd'hui tout à fait accessibles pour les débutants, et rien ne vous empêche de vous lancer par exemple dans du développement pour GBA ou pour Nokia.

Voici quelques pistes qui vous permettront de faire vos débuts dans le développement autre que sur PC, si cela vous tente. Pour ce qui est du développement pour PC, tout le reste de l'article lui est consacré.


3.1. Développement pour consoles

Sony PSP
La PSP se programme en C++, à l'aide du PSP SDK. Pour executer un jeu il faudra un émulateur, ou modifier celui-ci afin qu'il passe la protection Sony, à l'aide d'un logiciel prévu pour cela.


info Un SDK (Software Development Kit) accompagne généralement une API ou un matériel, et contient tout ce qu'il faut pour programmer avec : documentation, fichiers nécessaires au développement (bibliothèques, en-têtes, ...), exemples, etc.
Nintendo DS
Le développement sur DS s'effectue en C, avec un kit de développement spécifique. Pour faire tourner vos créations vous pourrez au choix utiliser un émulateur (pour executer vos jeux sur PC) ou un PassMe (moyen d'executer vos jeux sur la console).
Voici un tutoriel expliquant les outils à utiliser et les étapes à effectuer afin de compiler et faire tourner son premier jeu DS : Développer sur DS - Jour 1.


Microsoft XBoX
Le développement XBoX se fait très bien (cette console ressemblant étrangement à un PC), il suffit pour cela de modifier quelque peu votre console et d'utiliser le SDK XBoX.
Tout ceci est détaillé dans ce tutoriel : Convert your normal XBox into a development machine.


Il est bien sûr possible de développer des jeux pour à peu près toutes les autres consoles, nous ne les listerons pas ici étant donné leur nombre élevé.


3.2. Développement pour téléphones portables

Domaine en pleine expansion (et sans doute d'avenir), le développement sur téléphone portable est plus simple et (heureusement) plus ou moins homogène, en Java (J2ME -- la version pour mobiles). A noter que l'environnement Java NetBeans possède un plugin spécialement conçu pour J2ME. Ensuite, il faudra certainement aller chercher sur le site officiel du constructeur que vous ciblez, et utiliser les différents SDK et outils qu'il propose.

Liens :
en J2ME
en Nokia Developers


3.3. Développement pour PDA / Palm / PocketPC

N'étant clairement pas mon point fort, je vous donne en vrac quelques liens et vous laisse découvrir le sujet. Les sites sont suffisamment bien fournis pour que vous vous y retrouviez facilement.



4. Choix des armes

Rappelez-vous, nous parlions dans le chapitre 2 de la motivation qui vous pousse à vouloir faire des jeux vidéo. Et bien c'est maintenant que cette considération a son importance.


4.1. Les logiciels tout-en-un (pour les créatifs)

Le jeu vidéo ayant la côte chez les développeurs, vous imaginez bien qu'il existe des outils permettant d'écrire un jeu de A à Z sans avoir de connaissances poussées en programmation (voire aucune) -- un peu à la manière des éditeurs HTML permettant de concevoir un site web sans aligner une seule ligne de code.

Et il en existe même une multitude : du générateur de RPG au moteur de StreetFighter-like, vous trouverez sûrement le logiciel qui conviendra à la fois à vos exigences et à vos compétences. Bien sûr, inutile de dire que les plus simples seront les plus limités.

Il ne faut cependant pas considérer négativement ces logiciels : ils représentent au contraire une opportunité rêvée de créer vos jeux vidéo avec un minimum d'efforts. Après tout, pourquoi faudrait-il savoir manipuler des pointeurs pour faire un casse-brique ?


4.1.1. RPG Maker

Comme son nom l'indique, RPG Maker permet de réaliser des RPG en 2D, et ceci sans aucun effort de programmation.

Il se décline en une multitude de versions, toutes payantes (les versions gratuites que vous pourrez trouver sont illégales) :

  • Rpg Maker 95+
  • Rpg Maker 2000
  • Rpg Maker 2003
  • Rpg Maker XP
  • 3D RPG Editor
  • ...
Quelques créations RPGMaker :

Exemple 1 de programme RPGMaker Exemple 2 de programme RPGMaker Exemple 3 de programme RPGMaker



4.1.2. MUGEN

MUGEN est un logiciel multiplateforme (MS-DOS (!) et Linux) permettant de créer des jeux de combat 2D. Beaucoup de choses sont personnalisables, principalement via des scripts : personnages, animations, polices, barres de vie, menus, ...

Les versions / licenses sont soumises à controverse, je vous laisse découvrir les détails sur les différents sites consacrés au logiciel.

Quelques exemples en image :

Exemple 1 de programme MUGEN Exemple 2 de programme MUGEN Exemple 3 de programme MUGEN

Site (non officiel -- la société créatrice Elecbyte n'existe plus) : http://www.streetmugen.com/.


4.1.3. Conclusion

Ces deux échantillons ne représentent bien sûr pas tout ce qui se fait, il existe beaucoup d'autres logiciels de création de jeux vidéo : 3D Game Maker, The Game Factory, FPS Creator, 2D Fighter Maker, ... N'hésitez pas à chercher pour trouver votre bonheur !

Enfin, comme vous l'aurez remarqué ces types de logiciels offrent un moyen de créer des jeux vidéo sans toucher une seule ligne de programmation ; nous n'y reviendrons donc pas dans la suite de ce tutoriel, qui ne concerne (comme l'indique le titre) que la programmation à proprement parler.


4.2. Les langages BASIC (pour les progueux du dimanche)

Cet engouement pour le jeu vidéo n'a pas fait que des bébés dans le monde des logiciels, il a également eu un impact sur les langages de programmation. Ainsi toute une famille de langages basés sur le BASIC (le BASIC est à la base, comme son nom l'indique, un langage plutôt simple) a vu le jour. Ces langages permettent de tirer parti de la puissance de la programmation, tout en restant à un niveau suffisamment élevé pour ne pas s'embêter avec des syntaxes bizarroïdes ou des considérations ennuyeuses, ayant peu de rapport avec le jeu en lui-même. Pour vous en convaincre, voici un bout de code DarkBasic donné en exemple sur le site officiel du langage :

XRotate Object 1, 180
Scale Sprite 1, 100
Mirror Bitmap 1
Set Text Font "Arial"
Set Light To Object Position
If Joystick Fire A() Then GoSub PlayerShoot
				
Difficile de faire plus simple n'est-ce pas ?


4.2.1. DarkBasic Pro - 3D Games Creator Pro

Aussi étrange que cela puisse paraître, "3D Games Creators Pro" est la traduction française de "DarkBasic Pro". Ne soyez donc pas surpris, et pensez à ces deux dénominations si vous souhaitez faire des recherches sur le net.

DarkBasic est un environnement de programmation fournissant de nombreuses fonctionnalités orientées jeu vidéo, via un langage très simple. Basé sur la dernière version de DirectX, il permet d'utiliser facilement les derniers effets à la mode tels que les shaders, le rendu cartoon, ou encore l'animation squelettale.

Le tout est vendu à 90$, mais une version d'évaluation est disponible.

Voici quelques exemples de jeux développés à l'aide de DarkBasic :

Exemple 1 de programme DarkBasic Exemple 2 de programme DarkBasic Exemple 3 de programme DarkBasic



4.2.2. PureBasic

PureBasic est un langage de programmation également très simple, fait pour les débutants aussi bien que pour les experts. Il offre de nombreuses fonctionnalités très simplement (moteurs 2D, 3D, environnement de développement complet : éditeur, debuggeur, ...), tout en mettant l'accent sur les performances. Au-delà des jeux vidéo, PureBasic permet tout aussi bien de créer des interfaces graphiques et à peu près n'importe quel type d'applications.

Tout ceci est portable (Windows, Linux, MacOS, AmigaOS) et payant (69$) ; une version d'évaluation gratuite est également disponible.

Voici quelques captures d'écrans qui vous convaincront que l'on peut faire plein de belles choses avec ce langage :

Exemple 1 de programme PureBasic Exemple 2 de programme PureBasic Exemple 3 de programme PureBasic

Site officiel : http://www.purebasic.com/.


4.2.3. BlitzBasic

Les environnements basés sur le langage BlitzBasic sont au nombre de trois :

  • BlitzPlus : applications et jeux 2D (60 $)
  • Blitz3D : jeux 3D (100 $)
  • BlitzMax : langage plus évolué, destiné aux développeurs plus expérimentés (80 $)
Chacun étant livré avec un environnement complet, différents modules, des exemples de code, des tutoriels et la documentation de référence.

Quelques captures d'écrans de ce que l'on peut créer avec BlitzBasic :

Exemple 1 de programme BlitzBasic Exemple 2 de programme BlitzBasic Exemple 3 de programme BlitzBasic

Site officiel : http://www.blitzmax.com/.


4.2.4. Conclusion

Vous l'aurez compris, quelque soit le langage que vous choisirez vous accéderez à une syntaxe très simple ainsi qu'à des outils complets, permettant de créer des jeux performants pouvant rivaliser avec certains jeux commerciaux ; il vous faudra également mettre la main au porte-monnaie.
Et là encore la seule plateforme visée sera le PC, voire dans certains cas uniquement les systèmes Windows.


4.2.5. Hyperion

Hyperion n'est pas, comme la section le suggère, un environnement BASIC. Cependant, sa simplicité et sa puissance permettent de placer celui-ci aux côtés des trois environnements vus précédemment.

Hyperion est un projet francophone assez méconnu, mais qui mériterait pourtant de l'être davantage. Il s'agit d'un moteur 3D OpenGL constamment mis à jour pour coller aux nouvelles techniques, que l'on peut programmer via un langage XML. On peut également utiliser des scripts Lua pour gérer tout ce qui est dynamique, et enfin, GLSL pour écrire des shaders et personnaliser les effets graphiques. Ces trois langages très simples en font une excellente base pour qui veut apprendre la 3D, mais également un outil parfait pour développer rapidement des démos 3D, des benchmarks, des petits jeux, ou encore expérimenter la programmation sur GPU via les shaders.

Le projet est plutôt complet : vous trouverez sur le site officiel des tas de tutoriels, des démos, ainsi que des codes sources pour vous familiariser avec l'API. Le tout étant bien sûr livré avec un logiciel permettant de faire tourner directement vos programmes XML.

L'API tourne pour l'instant uniquement sur Windows. Par contre bonne surprise : Hyperion est livré sous forme de freeware.

Quelques captures d'écran :

Exemple 1 de programme Hyperion Exemple 2 de programme Hyperion Exemple 3 de programme Hyperion



4.3. Les langages bas niveau (pour les passionnés)

Commençons par faire tomber une idée reçue : il n'existe pas de meilleur langage pour faire du jeu vidéo ou pour utiliser telle ou telle API. On peut développer avec succès un jeu avec à peu près tout et n'importe quoi : C, C++, Java, Visual Basic, Q-BASIC, assembleur, Python, Delphi, ... Si vous ne vous êtes pas encore engagés dans un langage en particulier alors il faudra assurément vous orienter dans une certaine direction, sinon vous êtes tout à fait libre d'utiliser votre langage préféré -- du moins pour commencer.


4.3.1. Je débarque : je ne connais aucun langage

Là vous avez déjà un problème, vu qu'il faudra apprendre un langage avant de commencer à programmer des jeux (faire les deux en même temps est rarement une bonne idée). A moins bien sûr que vous ayiez choisi un RPGMaker ou un BASIC orienté jeu vidéo, mais dans ce cas vous n'avez rien à faire dans ce chapitre.

Le choix d'un langage est délicat et dépend bien souvent de beaucoup de paramètres personnels n'ayant rien à voir avec le jeu vidéo. Si toutefois vous voulez savoir quel langage sera le plus adapté à vos besoins en terme de jeu vidéo, alors il est clair qu'il vaudra mieux en choisir certains plutôt que d'autres.

A l'heure actuelle, le langage le plus utilisé dans les jeux vidéo commerciaux est le C++. Il fournit puissance, maîtrise du bas niveau et flexibilité. D'autant plus que la plupart des bibliothèques orientées jeu vidéo seront écrites et utilisables en C++, ce qui n'est nettement pas négligeable. Et comme vous vous en doutez l'apprentissage de ce langage est relativement long et difficile ; on ne peut pas avoir le beurre et l'argent du beurre. Cependant si vous êtes motivés, il s'agit clairement du langage de choix.

Le C est lui également très utilisé, mais tend à disparaître (au niveau du jeu vidéo, pas globalement) étant donné la nécessité croissante d'une approche objet, surtout pour les jeux conséquents. Même John Carmack, papa des Quake et Doom et éternel réticent à la programmation objet, se serait mis au C++.

Pour démarrer en C ou C++ il vous faudra un bon livre ou cours, ainsi qu'un environnement de programmation pourvu d'un compilateur performant. Pour le jeu vidéo, l'environnement gratuit Code::Blocks couplé au compilateur (lui aussi gratuit) Visual C++ 2003 Toolkit sera parfait ; en effet beaucoup de bibliothèques sont à la base développées pour ce compilateur, et il vous faudra fournir des efforts supplémentaires si vous en utilisez un autre (l'exemple le plus parlant étant certainement l'utilisation de DirectX).

Viennent ensuite quelques langages 100% objet, à savoir les .Net (VB.NET et C# surtout) et le Java. Ces langages sont plus simples à manipuler que le C et le C++, d'une part grâce à un fonctionnement légèrement plus flexible, mais surtout de par la présence d'un runtime conséquent (en gros pas besoin d'aller chercher plein de bibliothèques, beaucoup de fonctionnalités sont fournies en standard) et également d'une machine virtuelle. Ainsi ces langages vont droit au but et évitent par exemple la gestion de la mémoire et toutes ces choses désagréables de bas niveau, moyennement des performances un chouïa moindre.
Ce qu'il faut retenir de tout cela, c'est que ces langages sont tout à fait adaptés au développement de jeu, de par leur relative simplicité et leur orientation 100% objet. Nul doute qu'ils vont se frayer une belle place dans le jeu vidéo ces prochaines années, surtout le C# qui est un langage relativement nouveau.

Le développement .NET se fait principalement à l'aide de Visual Studio, mais il existe à l'heure actuelle quelques environnements gratuits comme C# Builder édition personnelle , SharpDevelop ou encore un plugin C# pour Eclipse.
Pour ce qui est de Java, l'environnement le plus utilisé est certainement Eclipse. Il vous faudra également le dernier kit de développement J2SE pour compiler vos applications.

On peut également citer Delphi, qui permettra de créer des jeux sans quasiment aucune limitation. L'avantage étant que c'est un langage qui est souvent abordé lors des études, donc que vous connaîtrez peut-être déjà. L'inconvénient est que peu d'APIs ou bibliothèques sont adaptées à Delphi, et qu'il vous faudra peut-être galérer quelque peu pour disposer de tous les outils nécessaires à la création de vos jeux.

Tous ces langages sont certainement les plus adaptés au développement de jeu, cependant gardez bien en tête que les autres langages en sont aussi capables, pour peu que vous ne tapiez pas directement dans un Doom 4 pour vos débuts.


4.3.2. Je maîtrise déjà un langage de programmation

... Alors continuez à l'utiliser, et ne vous laissez surtout pas impressionner par les arguments trollesques du genre "on ne peut faire des jeux qu'en C++" ou "Java c'est trop lent". Selon le langage vous découvrirez peut-être ses limitations concernant le développement de jeu, mais alors seulement à ce moment-là vous saurez qu'il faut changer, pas avant. Personnellement je suis passé au C++ en voyant que mon moteur 3D sous VB6 tournait à 5 images/sec, mais ça ne m'a pas empêché pendant plusieurs mois de développer divers jeux avec ce langage. Le plus important est d'être à l'aise avec le langage avec lequel vous allez débuter votre apprentissage du jeu vidéo.


5. Choix des bibliothèques

info Cette partie ne concerne que les développeurs utilisant un langage de programmation : les logiciels type RPGMaker ou MUGEN ne permettent bien entendu pas d'utiliser les APIs et bibliothèques que nous allons détailler ici.
Le développement de jeu est long et complexe, et nécessite des outils de bas niveau difficiles à coder, par exemple pour afficher de la 3D, lire du son, ou encore manipuler une image. En fait, faire un jeu à partir de rien est impossible : il faudra au moins passer par les API bas niveau (permettant d'accéder au hardware), les moins fougueux pourront eux profiter des nombreuses bibliothèques haut niveau et moteurs disponibles gratuitement sur le net.


5.1. Les bibliothèques de jeu : tout en un

Le meilleur moyen de programmer un jeu en se concentrant sur le jeu en lui-même et non sur les tâches bas niveau, est sans doute d'utiliser une bibliothèque tout-en-un. Ces bibliothèques contiennent en général des moteurs graphiques, sonores, physiques, réseaux, ... afin que vous puissiez développer votre jeu de A à Z sans vous préoccuper du détail de ces tâches ingrates.
De plus, ces bibliothèques vous procurerons des performances optimales et seront la plupart du temps multi-API, multi-langage et multi-plateforme (certaines sont même compatibles avec les dernières consoles) : que du bonheur.

Voici les bibliothèques de jeu les plus courantes :

Leurs différentes caractéristiques, des tutoriels, des exemples, des screenshots et tout ce qu'il faut se trouve sur leurs sites respectifs, je vous laisse approfondir tout cela si c'est ce genre de bibliothèque que vous recherchez.


5.2. Les moteurs

Si vous ne recherchez pas une bibliothèque tout-en-un mais seulement un moyen de faire de la 3D, de gérer le son ou encore la physique, alors vous vous orienterez plutôt vers ce que l'on appelle un moteur (qui n'est rien d'autre qu'une bibliothèque). On appele cela des moteurs, car non seulement ils encapsulent les APIs bas niveau mais ils fournissent également tous les algorithmes, procédés et structures de données couramment utilisés pour le domaine en question.
L'utilisation d'un moteur peut être particulièrement utile si par exemple vous désirez développer vous-même certains aspects bas niveau de votre jeu, mais ne souhaitez pas galérer dans les domaines que vous ne maîtrisez pas.

Les moteurs graphiques (ou 3D -- même s'ils font souvent bien plus) sont les plus répandus, et on le conçoit bien étant donné la complexité et la gigantesque part de travail associées à cet aspect de la programmation de jeux. Ils gèrent généralement la création et l'affichage de la scène, l'optimisation du rendu, les effets spéciaux, le chargement et la sauvegarde des modèles et des images, le partitionnement de la scène, etc...
Les plus connus sont OGRE ou encore Irrlicht, mais le mieux est encore que vous alliez fouiller sur the 3D engine database, qui recense, classe et note tous les moteurs 3D existant.

Les moteurs physiques sont de plus en plus répandus et vous seront très utiles, étant donné là encore la complexité de leur programmation. Ils vous permettront de gérer de manière réaliste les collisions entre toutes les entités de votre scène, ou encore les comportements de véhicules ou de fluides.
On peut citer parmi les plus célèbres ODE, Havok ou encore Tokamak.

Les moteurs réseaux moins utilisés car basés sur des APIs bas niveau plus "simples", ils peuvent cependant se révéler d'une aide précieuse dans le cas où vous voudriez des performances optimales ou tout simplement si vous n'y connaissez rien en programmation réseau.
Voir par exemple du côté de RakNet, HawkNL, Mammoth ou encore GNE.

Les moteurs audio sont également de la partie. Ils permettent généralement de charger, lire et sauvegarder tout type de format audio, de gérer du son 3D, toute sorte d'effets, etc.
Les plus connus sont FMod et Bass ; on peut également trouver Modula, un moteur audio pour ordinateurs de poche.

Cette liste n'est bien sûre pas exhaustive, tant dans les moteurs cités que dans les catégories abordées. On pourra trouver des moteurs un peu plus spécifiques, comme par exemple des moteurs d'animation 3D, des moteurs de gestion des périphériques, etc.

Enfin pour conclure, on peut dire que de plus en plus de moteurs tendent à intégrer plusieurs domaines : il ne sera pas rare de voir un moteur 3D faire de la physique, ou gérer les entrées / sorties.


5.3. Les APIs bas niveau

Là on tape dans le dur de chez dur, dans le bas niveau de chez bas niveau, bref dans les trucs indispensables aux passionnés. Ces APIs se trouvent tout au bas de l'échelle (par opposition aux logiciels type RPGMaker et autres), ils permettent en général simplement d'accéder au matériel ; à vous de vous débrouiller ensuite. Inutile de dire que l'apprentissage de ces APIs est long et difficile, et qu'il vous faudra du temps pour en tirer pleinement partie, mais ce ne sera pas un investissement vain, surtout si vous souhaitez plus tard utiliser ces connaissances, dans le monde professionnel par exemple.

Au niveau du graphisme (2D / 3D), on trouve deux APIs. D'un côté OpenGL, de l'autre DirectX (plus précisément Direct3D). De nombreux trolls parsèment les forums à propos de l'API à choisir, inutile de dire que 95% des choses qui y sont dites sont des bêtises. Peu de choses différencient en fait les deux APIs, les points importants étant les suivants :

  • OpenGL est multiplateforme, DirectX ne fonctionne lui que sous environnement Windows.
  • DirectX propose de nombreuses bibliothèques multimédia (son, périphériques, 2D, 3D, ...) ; OpenGL se limite lui au rendu graphique.
  • DirectX propose via ses composants COM une interface orientée objet, alors qu'OpenGL reste du pur C.
  • Historiquement et encore récemment le support d'OpenGL est laissé à l'appréciation des constructeurs de cartes graphiques, ce qui entraîne une grande disparité dans le support de nouvelles fonctionnalités et de la stabilité générale de la plateforme OpenGL sous Windows. L'utilisation d'OpenGL est donc plutôt à conseiller aux développeurs qui peuvent s'assurer que leurs utilisateurs auront une implémentation d'OpenGL décente sur leur machine.
Au niveau purement 2D on peut également citer la SDL, qui, bien que basée sur OpenGL et DirectX, peut être considérée comme une API bas niveau. Son avantage est d'être plutôt simple, portable, et d'être accompagnée d'une multitude de bibliothèques lui permettant de gérer tout et n'importe quoi ayant un rapport avec la 2D.

Concernant le réseau, on ne peut utiliser que les sockets pour dialoguer au bas niveau. Il faudra pour cela avoir quelques connaissances théoriques en ce qui concerne les protocoles TCP/IP et UDP, et jouer avec les threads, mais une fois tout ceci acquis l'API en elle-même est plutôt simple à manipuler. Attention toutefois : bien que quasiment similaires, les version POSIX et Windows des sockets varient légèrement. Pensez-y si vous voulez faire du code portable !
Vous entendrez certainement aussi parler de DirectPlay (composante de DirectX), mais celui-ci a été abandonné par Microsoft, qui conseille de se limiter aux sockets en attendant leur prochaine API.

Viennent ensuite les APIs audio. Il n'en existe également pas beaucoup : d'un côté DirectMusic (toujours une composante de DirectX), de l'autre OpenAL.

Enfin, pour gérer les périphériques on pourra utiliser DirectInput (composante DirectX), ou directement l'API Win32 si l'on travaille sous Windows. Cependant cette dernière ne permettra pas de gérer pleinement tous les types de périphériques et leurs possibilités.

Il n'existe bien sûr pas d'API pour les autres domaines (la physique ou l'IA par exemple), car ces notions n'ont pas besoin d'accéder à un quelconque hardware.


5.4. Les bibliothèques utiles

Hormis les aspects fondamentaux tels que les graphismes, le son ou la physique, n'oubliez pas qu'il vous faudra également gérer plein de petites choses annexes comme par exemple les fichiers de configuration, le chargement d'images, le logging, les structures mathématiques, etc.

Heureusement il existe des bibliothèques pour à peu près tout et n'importe quoi, n'hésitez donc pas à faire quelques recherches avant de vous lancer à corps perdu dans la ré-invention de la roue.

A ce stade il existe tellement de bibliothèques variées qu'il est impossible d'en fournir une quelconque liste ici, mais avec un minimum de recherche sur ce qui vous intéresse vous devriez trouver votre bonheur sans trop de mal.


6. Méthodologie

Une fois les outils de développement choisis, on serait tenté de foncer tête baissée dans le développement de notre premier jeu. Cela peut être une bonne idée, mais dans la plupart des cas cela vous mènera à l'échec. En effet il va maintenant falloir vous munir de quelques outils de méthodologie.

Beaucoup de développeurs débutants programment "à l'arrache". Soit parce qu'ils méconnaissent les méthodologies de développement usuelles, soit parce que celles-ci leur paraîssent trop abstraites. En gros : je code sans (trop) réflechir toute la journée, puis je lance l'appli. Si ça marche tant mieux, sinon il n'y a plus qu'à tout recommencer. Inutile de dire que cette méthode de travail (si tant est qu'on puisse appeler ça une méthode) constitue une énorme perte de temps.

Voici donc quelques méthodes et conseils qui vous aideront à organiser votre travail, et qui vous permettront sans aucun doute d'optimiser votre apprentissage et votre manière de coder en général.


6.1. L'extrem programming (XP)

Tendance relativement nouvelle et à contre-courant des méthodologies habituelles, l'extrem programming doit sans doute son succès à ses méthodes très simples proches de "l'arrache" (beaucoup de développeurs se reconnaîtront dans cette approche, sans jamais avoir entendu parler d'extrem programming).

La philosophie de l'extrem programming est basée sur une communication constante avec l'équipe et les utilisateurs, une simplicité omniprésente (on ne code pas ce dont on n'a pas besoin), et des retours fréquents permettant un développement par itérations courtes.
Ainsi, on ne suit plus le plan habituel consistant à penser d'abord et coder ensuite : l'évolution du design de l'application se fera avec l'évolution du code.

Cependant il ne faut pas croire que l'extrem programming se limite à une suppression de la phase de reflexion. C'est avant tout une méthode, qui nécessite :

  • Des tests beaucoup plus poussés à chaque ajout de fonctionnalité (notamment les tests unitaires)
  • Un collaboration très forte au sein de l'équipe de développement
  • Un nettoyage et une refactorisation régulière des sources
  • Des commentaires très explicites : cela constituera la seule documentation du projet
  • Des points réguliers de la situation
En résumé, l'extrem programming est parfait pour les gens qui seraient réfractaires aux méthodes plus "formelles" de développement, mais cela nécessite tout de même une certaine rigueur et des compétences de travail.


6.2. UML quoiqu'il arrive

UML (Unified Modeling Language) est un langage de modélisation très utilisé lorsqu'il s'agit de modéliser une application avec une approche orientée objet. Au travers d'une quinzaine de types de diagrammes, UML permet de plannifier tous les aspects de son application : diagramme de classes (le plus important, certainement le seul que vous manipulerez en tant que débutant), diagramme de séquence, diagramme de cas d'utilisation, diagramme d'états, ...
De plus, il existe pour les plus paresseux des logiciels ou des plugins d'environnements de développement, permettant de générer directement du code à partir de diagrammes de classes UML, ou inversement.
Un autre avantage d'UML est qu'il est compris par beaucoup de monde, ainsi en l'utilisant vous pourrez expliquer très facilement le fonctionnement de votre application, à d'autres membres de votre équipe ou aux utilisateurs par exemple.
Bien sûr rien ne vous oblige à utiliser tous les diagrammes fournis par UML (rares sont ceux qui le font), mais un petit diagramme de classe par-ci par-là vous fera déjà gagner un temps précieux et permettra de mieux réaliser votre code.

A noter qu'il existe toute une multitude de méthodologies ou de langages utilisés en génie logiciel (Merise, processus unifié, modèles en V, ...) mais étant donné que ce tutoriel est destiné aux débutants je crois qu'il est inutile d'en parler. UML est bien souvent la seule approche utilisée par les développeurs amateurs.


6.3. L'outil ultime du codeur : le crayon et le bout de papier

Même si vous choisissiez de ne pas suivre une méthodologie particulière, il faudra tout de même réflechir un minimum et coucher vos idées sur papier avant de les donner à manger à votre environnement de programmation. Gribouillez des schémas de classe, des bouts de code, des situations particulières, bref n'importe quoi. Cela vous évitera peut-être de devoir ré-écrire entièrement votre code en cours de route, et d'aller à l'essentiel. N'oubliez pas qu'il est plus facile de recommencer un gribouilli que le code d'un programme...


6.4. CVS / SVN, ou comment gérer proprement ses sources

Ne vous est-il jamais arrivé de vouloir récupérer une version antérieure de votre projet, qui malheureusement a déjà été effacée depuis belle lurette ? De faire 15 fois le même ajout de code parce que le copain travaille toujours sur une version pas à jour du projet ? Pour les projets en équipe (ou même seul s'il s'agit de gros projets), il vous faudra assurément un logiciel de versionnage de vos sources. Et c'est justement ce que fait CVS, ou plus récemment SVN. Ces outils, utilisables sur toute plateforme en ligne de commande ou via une interface graphique, sont très simples d'utilisation et peuvent faire gagner un temps énorme, surtout sur les projets en équipe. N'hésitez donc pas à les utiliser, même si vous pensez que cela vous sera inutile (croyez-moi, ça ne le sera pas).


6.5. Conseils d'ordre général pour bien progresser

Pour conclure sur ce chapitre consacré à la méthodologie de travail, voici en vrac quelques conseils de base pour bien progresser :

  • Commencez par consolider vos connaissances dans le langage et les bibliothèques que vous utilisez, vous n'arriverez à rien sans ça.
  • Codez progressivement : même si vous visez un MMORPG, n'oubliez pas de commencer votre apprentissage par un tetris.
  • Faites des tests réguliers, voire des tests unitaires. S'apercevoir que l'application bug après 2 semaines de codage intensif, est le meilleur moyen d'avoir à tout recommencer.
  • Utilisez un maximum d'outils tels que les profilers, les détecteurs de fuites mémoires et les debuggers. Cela vous permettra d'éviter de nombreux bugs et de prendre de bonnes habitudes.
  • "Early optimization is the root of all evil". En clair, codez puis optimisez ce qu'il y a à optimiser, pas l'inverse.
  • Ne cherchez pas à créer un jeu révolutionnaire si vous débutez, au contraire pensez même à cloner des jeux existant : cela vous permettra de vous concentrer sur le code.
  • Concentrez-vous sur ce qui vous motive : inutile de développer de A à Z un Quake-like si ce qui vous intéresse est l'IA. Codez plutôt des petites démos.
  • Rappelez qu'un petit projet fini est bien plus enrichissant qu'un projet ambitieux stoppé à 20%.
  • N'hésitez pas à arpenter les forums de développement, même si vous n'y postez pas vous apprendrez énormément de choses.
  • Rien ne vaut le travail en équipe, recherchez-en une qui corresponde à vos besoin (et croyez-moi il y en a bien suffisamment).
  • Si vous codez un moteur 3D, abandonnez l'idée de commencer par les "supers effets méga cool à la mode". 95% des débutants le font, mais la vérité est qu'il vaut mieux se concentrer sur les structures de partitionnement, le scenegraph ou la gestion du rendu.
  • Ne rejetez pas les documents en anglais, même si vous n'y comprenez rien. A force vous y arriverez, et vous vous rendrez alors compte de la mine d'information à côté de laquelle vous seriez passé.

7. Et maintenant ?


7.1. Ressources

On ne peut pas clore un tutoriel sur la création de jeux, sans parler de ressources. Par ressources j'entends textures, sons, images, modèles, et tout ce qui va avec un jeu. Car beaucoup de programmeurs oublient qu'ils... ne savent que programmer. Si l'on a intégré une équipe ça peut ne pas poser de problème, mais si on souhaite mener à bien un jeu tout seul, on aura le choix entre un joli dessin made in MSPaint ou bien trouver des ressources gratuites sur le net.

Voici une page recensant tout un tas de sites proposant des ressources gratuites, classés et notés : http://jeux.developpez.com/medias.

Ca ne vous aidera peut-être pas à acquerir de l'expérience en programmation, mais certainement à terminer plus vite vos jeux et pourquoi pas à apporter un regain de motivation (c'est toujours plus gratifiant de voir nos créations avec un look mignon qu'avec un design sorti de Paint, non ?). Combien ont déjà stoppé le développement d'un jeu simplement par manque de belles textures ou de modèles 3D ?

Un rapide mot pour ceux qui souhaiteraient aussi mettre les mains dans le camboui pour les ressources. Les logiciels à utiliser pour la modélisation 3D sont 3D Studio Max, Maya, ou encore Blender (gratuit).
Pour le dessin, le must se trouve chez Paint Shop Pro, Photoshop ou The Gimp (gratuit).


7.2. Sites communautaires

Bien que le plus complet possible, ce tutoriel ne vous aidera qu'à vos tout débuts, il ne peut pas vous accompagner jusqu'à l'accomplissement de votre premier jeu. Heureusement quelques sites communautaires traitant du développement de jeu existent, et vous fourniront tout ce qu'il faut pour poursuivre votre apprentissage et bien plus : forums, tutoriels, news, téléchargements, exemples de projets amateurs, ...
Les sites anglophones de référence sont Gamedev et Devmaster, n'hésitez pas à y passer tous les jours et à éplucher leur base de tutoriels. En français, vous avez bien sûr Developpez, avec notamment sa rubrique Développement 2D / 3D / Jeux, et enfin le GCN.
A noter également Flipcode, actuellement plus maintenu mais possédant toujours une incroyable base de connaissances.


7.3. Jeux open-source

Une excellente source d'inspiration lorsque l'on développe du jeu vidéo, est d'aller inspecter le code de jeux open-source. Cela peut vous permettre d'avoir des idées en cas de manque d'inspiration, ou encore de voir comment est codé tel ou tel aspect que vous comprenez mal, ou comment est utilisée telle bibliothèque. Bref, n'hésitez pas à les consulter.
Voici un lien présentant quelques jeux open-source, ainsi que d'autres liens à suivre : Liste des jeux libres.


7.4. Intégrer une équipe

Intégrer une équipe est une chose à laquelle on ne pense pas toujours en tant que débutant, mais c'est pourtant le meilleur moyen de progresser rapidement. Faire partie d'une équipe apporte une grande motivation, une bonne ambiance et surtout des compétences complémentaires aux nôtres. Pourtant, intégrer une bonne équipe devient aujourd'hui de plus en plus difficile, et il est fréquent de tomber dans des plans voués à l'échec. Voici une petite histoire qui je l'espère vous permettra d'effectuer les bons choix et ainsi d'acquerir plus vite de l'expérience et de ne pas "perdre" votre temps.

Il était une fois un scénariste aux idées "géniales" et "révolutionnaires", qui se nomme un jour game designer et décide de monter une équipe pour concrétiser son bébé -- qui fera sans aucun doute un carton et relèguera les jeux commerciaux les plus connus au rang de sous-produits. Il arpente donc les forums pour chercher tout ce qu'il lui manque, à savoir tout : des programmeurs, des musiciens, des dessinateurs, des modeleurs 3D, ... Il trouve ainsi quelques programmeurs, qui décident bien sûr de réinventer le monde et codent leurs moteurs de A à Z -- faudrait surtout pas que ce soit trop facile ou trop bien codé. Après 3 mois de développement acharné et une application qui commence à ressembler à quelque chose, on se rend compte qu'on n'arrive à trouver ni musicien, ni modeleur 3D, ni dessinateur, ni ... Oui, ces compétences sont les plus rares, surtout dans le monde amateur. Commencez donc par là avant de démarrer quoique ce soit au niveau du développement.
Et pour conclure cette petite histoire devinez quoi ? Le projet tombe bien sûr à l'eau, les membres repartent chacun à leurs occupations, et le game designer génial (qui a eu une idée encore plus géniale entre temps, littéralement un truc de ouf) repart à la quête sans fin d'une équipe qui pourra coder son chef d'oeuvre.

Cette petite histoire se veut bien sûr caricaturale, mais représente tout de même assez fidélement la réalité. Ainsi, en tant que programmeur, soyez très vigilant dans le choix de votre projet et de l'équipe qui va avec. Bien sûr, vivre une telle histoire n'est pas dramatique : vous en retirerez quoiqu'il arrive beaucoup d'enseignements et d'experience. Mais vous en retirerez encore plus avec un projet solide. Les bons projets sont rares, voici donc quelques bons conseils pour ne pas se tromper :

  • Tentez si possible d'intégrer une équipe déjà plus ou moins complète. Une équipe comprenant déjà quelques artistes est un bon plan ; l'équipe composée uniquement du game designer génial est a priori à éviter.
  • Un game designer qui touche un peu à tout aura beaucoup plus de chances de mener un projet à bien. Quelqu'un qui n'a que des idées brillantes n'arrivera jamais à créer un jeu, aussi bien entouré soit-il.
  • Ne vous focalisez pas sur l'idée révolutionnaire à la base du projet. Ce qui fait un bon jeu amateur est le sérieux et le réalisme des idées, des choix de développement et un objectif atteignable ; surtout pas un scénario transcendant.
  • Investissez-vous à fond : sinon vous n'arriverez pas au bout de vos objectifs, et risquez de faire couler le projet.
  • Prenez du plaisir. Le jour où votre rôle au sein de l'équipe sera pour vous une corvée plus qu'un plaisir, cherchez autre chose.
  • Cherchez des gens de votre niveau et ayant les mêmes motivations que vous. Cela se ressentira sur l'ambiance, mais aussi sur les résultats de l'équipe.
Vous l'aurez remarqué, le game designer (si on peut l'appeler ainsi) est au centre de pas mal de considérations. En effet il est souvent l'instigateur du projet, et si vous désirez un jour intégrer une équipe alors il en sera très certainement le "chef".

La morale de ce petit discours sur les équipes de développement amateur est la suivante : beaucoup de gens ont des idées, peu ont de quoi les mener à bien. A ce sujet, je ne peux que vous renvoyer sur l'excellent article de JIRAF : Les 17,5 raisons pour lesquelles vous n'êtes pas le prochain génie du JV.


8. Conclusion

Comme vous l'avez vu, on ne peut vraiment pas dire que programmer un jeu vidéo soit de la tarte. Cependant il y en a pour tous les goûts, et on peut vraiment trouver les outils correspondant à sa motivation et à son niveau.

J'espère que ce tutoriel vous aura donné les bases et directions nécessaires à vos débuts si vous ignoriez totalement ce qu'était la programmation de jeu, et qu'il vous aura aidé à clarifier vos idées si vous saviez déjà plus ou moins ce que vous vouliez faire.

Dans tous les cas je vous souhaite bonne chance pour votre aventure au coeur du jeu vidéo, car vous en aurez besoin !


9. Téléchargements

Une version PDF de cet article est disponible : Télécharger (254 Ko)

Si vous avez des suggestions, remarques, critiques, si vous avez remarqué une erreur, ou bien si vous souhaitez des informations complémentaires, n'hésitez pas à me contacter !



               Version PDF   Version hors-ligne   Version ePub   Version Azw   Version Mobi

Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006 Laurent Gomila. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
 
 
 
Partenaires

PlanetHoster
Ikoula