Programmation de jeux vidéo : par où commencer ?
Publié le 13 janvier 2006 et mis à jour le 11 octobre 2012
Par
Laurent Gomila
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.
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.
|
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.
|
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.
|
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.
|
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.
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 :
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 :
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 :
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 :
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 :
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 :
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.
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
|
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.
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".
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
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 !
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 ni 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.