[Tutoriel]Les outils et librairies pour créer des jeux
Publié : mer. juin 16, 2010 3:40 am
C'est une question qui revient souvent, surtout venant des débutants. Quels outils utiliser pour créer des jeux? Et surtout efficacement.
Le domaine étant assez large, je m'en tiendrai à la partie programmation, en me basant sur mon expérience personnelle.
Middlewares
Pour commencer, certains programmes permettent déjà de créer des jeux sans nécessité de connaissances en programmation. Rpg Maker est sûrement le plus connu, mais on peut également parler de Multimedia Fusion ou encore de Game Maker. Il existe également un autre programme nommé Game Develop mais pour l'avoir essayé je n'ai franchement pas été convaincu.
Toutefois, Game Maker, et depuis quelques années Rpg Maker également, proposent la possibilité de modifier le programme avec un langage. Ruby pour Rpg Maker, Game Maker Language (ou simplement GML) pour Game Maker.
Je garde néanmoins une large préférence pour Game Maker qui même avec sa version gratuite possède énormément de possibilités. Le prix de la version payante n'est franchement pas non plus exorbitant : 20 €. Elle permet entre autre de désactiver le logo au lancement du jeu créé avec le logiciel. Quelque soit la version, les jeux créés peuvent être librement commercialisés ou distribués gratuitement, à votre guise.
Programmation pure et dure
Le souci des programmes cités plus haut est en général qu'ils ne sont pas toujours adaptés à nos besoins. Il peut y avoir trop de fonctionnalités, ou pas assez. On peut aussi être déçu par les performances. Il y a aussi le souci de l'argent et de la liberté de diffusion et/ou de commercialisation.
On peut alors dans ce cas passer à un niveau plus bas : la programmation proprement dite. Même si cela nécessite l'apprentissage d'un langage, on ressent quand même déjà une meilleure liberté.
Attention : les langages de programmation ne sont pas tous destinés aux mêmes utilisations. En général, plus les langages sont bas niveaux (c'est à dire plus proche de la machine) plus les possibilités sont grandes, mais la tâche se trouve être plus laborieuse.
Ce domaine-là est à lui tout seul extrêmement vaste. Aussi, je ne présenterai essentiellement que les langages que j'utilise personnellement (ou qu'il m'a été donné d'essayer).
C, C++ et Java
Ce sont les langages les plus utilisés. Chaque année ils arrivent en tête de classement et sont au coude-à-coude.
J'ai une préférence pour le C++, étant donné que j'ai été essentiellement formé et habitué à utiliser ce langage. Le C est une version antérieure du C++, qui n'intègre pas la notion de programmation orientée objet.
Quant au Java, il est orienté objet. La différence avec C/C++ c'est qu'il est exécuté grâce à une machine virtuelle Java installée préalablement sur l'ordinateur qui va l'exécuter.
Ça présente un assez gros avantage au niveau portabilité car un même programme en java pourra fonctionner sur n'importe quelle machine possédant cette machine virtuelle et ce quelque soit son système d'exploitation (sauf cas particuliers). Il est aussi assez facile à prendre en main et sa portabilité a fait qu'il est étendu à une large utilisation, aussi bien pour le logiciel que pour le web. Les jeux disponibles sur les portables sont également codés en java (une version de java réservée aux applications mobiles appelée J2ME).
Il y a néanmoins des inconvénients, déjà du fait que chaque ordinateur a besoin d'avoir Java installé pour exécuter le programme. On ressent aussi une belle perte au niveau performances, Java consommant une quantité non négligeable de mémoire vive.
Environnements de Développement Intégré (ou EDI ou IDE)
Bah oui, grands fous! Même si ces langages peuvent être écrits depuis un simple bloc-notes et traités ensuite avec le compilateur adéquat, il existe aujourd'hui des logiciels qui aident grandement à la programmation. Ils possèdent de nombreuses options qui s'avèrent être un vrai gain de temps.
Pour Java, il existe deux EDI majeurs à savoir Eclipse et Netbeans. J'ai eu beau chercher, personne n'arrive à déterminer lequel est le meilleur. Certains prennent le partie de l'un comme de l'autre, ça finit souvent en débat(cle). Certains s'accordent sur le fait qu'il vaut mieux avoir les deux.
C'est aussi ce que je vous conseille, n'ayant moi-même pas réussi à me décider. Les deux peuvent être installés sur l'ordinateur ou être simplement placés sur une clé usb. Dans tous les cas, vous aurez besoin de télécharger le JDK de Java sur le site de Sun Microsystems. C'est ce qui vous permettra de créer et interpréter vos programmes en Java.
Quant au C/C++, personnellement j'utilise Code::Blocks. C'est certainement un des plus utilisés d'ailleurs. Il est vraiment plein de ressources. La seule chose qu'on lui reproche le plus souvent c'est un bug au niveau de la complétion de code.
(Quelque chose de vraiment très utile! Le principe c'est que le programme repère le début de ce que vous tapez et vous propose les variables, fonctions, classes, etc... correspondants au fur et à mesure de la saisie. Ce qui permet de se retrouver assez facilement dans les méandres de fonctions et de variables du programme.)
Pour en revenir à ce bug, il arrive quelques fois que la complétion de code "tombe en panne" et on se retrouve à taper un programme en devant tout se remémorer. Mais heureusement il suffit d'un petit rien pour que l'option revienne.
Eclipse et Netbeans , cités précédemment pour Java permettent également de programmer en C++. Il y a juste une petite phase de configuration avant toute chose.
Je peux aussi vous citer wxDev-C++, une version améliorée de feu Dev-C++. Le but premier de cet EDI est la programmation d'applications fenêtrées grâce à wxWidgets (je vous en parlerai après).
Si vous sentez le courage de programmer sans EDI, je vous suggère d'utiliser Notepad++, une version améliorée du bloc-notes de Windows. Il gère quasiment tous les langages (pour ne pas dire tous) de programmation et possède de nombreuses fonctionnalités très utiles. Ne soyez pas étonnés de vouloir l'utiliser pour tout, même de simples fichiers textes, quitte à remplacer le vieux bloc-notes de Windows.
Interfaces graphiques
Du peu que je sais, il me semble que Java possède ses propres interfaces graphiques : Swing et SWT.
Netbeans possède d'ailleurs une fonctionnalité pour créer directement et simplement des applications fenêtrées (on appelle ça le Développement rapide d'applications ou RAD).
Concernant C++, il existe de nombreuses bibliothèques. Pour ma part, j'ai porté mon choix sur wxWidgets en partie parce que Code::Blocks dispose d'un RAD appellé wxSmith permettant de programmer efficacement des applications utilisant wxWidgets. Comme dit précédemment, wxDev-C++ y est consacré également.
Il existe d'autres bibliothèques comme Qt, très utilisée également, ou GTK+ (utilisée par exemple par Gimp, Pidgin).
Librairies multimédia
Voilà enfin le moment le plus intéressant. J'allais pas vous laisser foncer tête baissée dans le monde de la programmation pour que vous reveniez après me demander "Mais comment on fait un jeu avec ça?!".
Il existe des bibliothèques de fonctions spécialisées dans la création d'applications multimédia, pour ne pas dire jeux.
Il existe OpenGL, bibliothèque graphique principalement utilisée pour la 3D - elle permet également de faire la 2D -, concurrente directe de la librairie DirectX. Contrairement à cette dernière, OpenGL est libre et pas restreinte à Windows. Néanmoins, toutes les cartes graphiques ne supportent pas forcément OpenGL, surtout les anciennes. Comme DirectSound pour DirectX, OpenGL possède une librairie consacrée au son nommée OpenAL.
La librairie multimédia la plus connue est certainement la librairie SDL. Néanmoins, son développement est considérablement à la traîne et ce depuis de nombreuses années. Depuis, une autre librairie a vu le jour : SFML. Bien qu'elle soit encore en développement elle est déjà utilisable. Son créateur a également réalisé un benchmark pour comparer la SFML à la SDL au niveau performances. Le résultat est assez surprenant puisque la SFML dépasse largement la SDL sur presque tous les points.
SFML est divisé en plusieurs modules - Audio, Graphique, Réseau, Système et Fenêtre -, est multi-plateformes, portable (son code est conçu pour s'adapter à chaque système d'exploitation sans avoir à changer le code), très facile à prendre en main, performante. Elle s'intègre à de nombreuses interfaces graphiques (de mémoire : X11, wxWidgets, Qt, Win32) et est basée sur OpenGL. Elle permet également d'utiliser OpenGL avec une fenêtre de rendu SFML (en gros dans votre jeu vous pouvez utiliser directement OpenGL en plus de SFML).
Une dernière librairie, assez populaire mais que j'ai trouvé particulièrement difficile à prendre en main : Allegro. Elle est très légère et est parait-il très performante. Si vous avez l'occasion de pouvoir comparer toutes ces bibliothèques, faîtes-moi part de vos impressions.
Langages orientés jeux
Hormis les langages propres aux programmes à certains logiciels de création de jeux comme le GML pour Game Maker, le Ruby pour Rpg Maker ou encore le Dark Basic pour 3D Games Creator, il existe un langage orienté jeu vidéo appelé Lua. Si vous programmez en Lua, vous pouvez aisément créer des jeux pour une console de jeux, à condition qu'elle puisse l'interpréter. La PSP peut le faire une fois flashé et en lui fournissant un programme appelé LuaPlayer. Une console portable permettant directement d'interpréter des jeux en Lua, ou plutôt une version modifiée du Lua appelée MicroLua : la Nintendo DS.
Jeux en ligne
Une grande mode qui s'est créée, celle des jeux en ligne. Les MMORPG mais aussi les sites jeux, du genre OGame. Sachez que si vous apprenez et maîtrisez convenablement le HTML et le CSS ainsi que PHP et MySQL, vous pouvez sans trop de problèmes créer un jeu du même genre. C'est particulièrement facile à mettre en oeuvre et très pratique puisque facile d'accès. Une simple connexion internet suffit pour jouer, c'est un côté très attrayant pour les joueurs.
Une grande nouveauté qui arrivera pleinement d'ici fin 2010, le duo HTML5 et CSS3. Pour l'instant ils ne sont pas encore intégrés à tous les navigateurs (Internet Explorer a énormément de retard) mais une fois pleinement gérés par ces derniers, le web risque de faire un grand bond en avant. Les capacités de ces langages sont apparemment assez suffisantes pour détrôner l'utilisation de Flash qui jusqu'alors nécessite toujours l'installation d'un plugin dans le navigateur pour pouvoir être interprêté.
Quelques liens
Je vous suggère le fameux Site du Zéro pour débuter en programmation. Leurs cours sont très bien expliqués et traitent beaucoup de sujets.
http://www.siteduzero.com
Un autre site pratique pour apprendre : Développez.com
http://www.developpez.com
Et voici les liens vers les sites des logiciels et librairies que je vous conseille. Pour le reste, Google est votre ami.
Code::Blocks : http://www.codeblocks.org
SFML : http://www.sfml-dev.org/index-fr.php
wxWidgets : http://www.wxwidgets.org
Le site wxDev propose en téléchargements un installateur simple pour wxWidgets, ainsi qu'une version de Code::Blocks traduite en français et régulièrement mise à jour. Il propose également de télécharger wxDev-C++ comprenant la librairie wxWidgets.
Pour Java (et même d'autres langages si vous le souhaitez):
Netbeans : http://netbeans.org
Eclipse : http://www.eclipse.org
Pour télécharger Java : http://www.java.com/fr
Game Maker (seulement en anglais) : http://www.yoyogames.com/gamemaker
Et enfin, outil très pratique :
Notepad++ : http://notepad-plus-plus.org
Le domaine étant assez large, je m'en tiendrai à la partie programmation, en me basant sur mon expérience personnelle.
Middlewares
Pour commencer, certains programmes permettent déjà de créer des jeux sans nécessité de connaissances en programmation. Rpg Maker est sûrement le plus connu, mais on peut également parler de Multimedia Fusion ou encore de Game Maker. Il existe également un autre programme nommé Game Develop mais pour l'avoir essayé je n'ai franchement pas été convaincu.
Toutefois, Game Maker, et depuis quelques années Rpg Maker également, proposent la possibilité de modifier le programme avec un langage. Ruby pour Rpg Maker, Game Maker Language (ou simplement GML) pour Game Maker.
Je garde néanmoins une large préférence pour Game Maker qui même avec sa version gratuite possède énormément de possibilités. Le prix de la version payante n'est franchement pas non plus exorbitant : 20 €. Elle permet entre autre de désactiver le logo au lancement du jeu créé avec le logiciel. Quelque soit la version, les jeux créés peuvent être librement commercialisés ou distribués gratuitement, à votre guise.
Programmation pure et dure
Le souci des programmes cités plus haut est en général qu'ils ne sont pas toujours adaptés à nos besoins. Il peut y avoir trop de fonctionnalités, ou pas assez. On peut aussi être déçu par les performances. Il y a aussi le souci de l'argent et de la liberté de diffusion et/ou de commercialisation.
On peut alors dans ce cas passer à un niveau plus bas : la programmation proprement dite. Même si cela nécessite l'apprentissage d'un langage, on ressent quand même déjà une meilleure liberté.
Attention : les langages de programmation ne sont pas tous destinés aux mêmes utilisations. En général, plus les langages sont bas niveaux (c'est à dire plus proche de la machine) plus les possibilités sont grandes, mais la tâche se trouve être plus laborieuse.
Ce domaine-là est à lui tout seul extrêmement vaste. Aussi, je ne présenterai essentiellement que les langages que j'utilise personnellement (ou qu'il m'a été donné d'essayer).
C, C++ et Java
Ce sont les langages les plus utilisés. Chaque année ils arrivent en tête de classement et sont au coude-à-coude.
J'ai une préférence pour le C++, étant donné que j'ai été essentiellement formé et habitué à utiliser ce langage. Le C est une version antérieure du C++, qui n'intègre pas la notion de programmation orientée objet.
Quant au Java, il est orienté objet. La différence avec C/C++ c'est qu'il est exécuté grâce à une machine virtuelle Java installée préalablement sur l'ordinateur qui va l'exécuter.
Ça présente un assez gros avantage au niveau portabilité car un même programme en java pourra fonctionner sur n'importe quelle machine possédant cette machine virtuelle et ce quelque soit son système d'exploitation (sauf cas particuliers). Il est aussi assez facile à prendre en main et sa portabilité a fait qu'il est étendu à une large utilisation, aussi bien pour le logiciel que pour le web. Les jeux disponibles sur les portables sont également codés en java (une version de java réservée aux applications mobiles appelée J2ME).
Il y a néanmoins des inconvénients, déjà du fait que chaque ordinateur a besoin d'avoir Java installé pour exécuter le programme. On ressent aussi une belle perte au niveau performances, Java consommant une quantité non négligeable de mémoire vive.
Environnements de Développement Intégré (ou EDI ou IDE)
Bah oui, grands fous! Même si ces langages peuvent être écrits depuis un simple bloc-notes et traités ensuite avec le compilateur adéquat, il existe aujourd'hui des logiciels qui aident grandement à la programmation. Ils possèdent de nombreuses options qui s'avèrent être un vrai gain de temps.
Pour Java, il existe deux EDI majeurs à savoir Eclipse et Netbeans. J'ai eu beau chercher, personne n'arrive à déterminer lequel est le meilleur. Certains prennent le partie de l'un comme de l'autre, ça finit souvent en débat(cle). Certains s'accordent sur le fait qu'il vaut mieux avoir les deux.
C'est aussi ce que je vous conseille, n'ayant moi-même pas réussi à me décider. Les deux peuvent être installés sur l'ordinateur ou être simplement placés sur une clé usb. Dans tous les cas, vous aurez besoin de télécharger le JDK de Java sur le site de Sun Microsystems. C'est ce qui vous permettra de créer et interpréter vos programmes en Java.
Quant au C/C++, personnellement j'utilise Code::Blocks. C'est certainement un des plus utilisés d'ailleurs. Il est vraiment plein de ressources. La seule chose qu'on lui reproche le plus souvent c'est un bug au niveau de la complétion de code.
(Quelque chose de vraiment très utile! Le principe c'est que le programme repère le début de ce que vous tapez et vous propose les variables, fonctions, classes, etc... correspondants au fur et à mesure de la saisie. Ce qui permet de se retrouver assez facilement dans les méandres de fonctions et de variables du programme.)
Pour en revenir à ce bug, il arrive quelques fois que la complétion de code "tombe en panne" et on se retrouve à taper un programme en devant tout se remémorer. Mais heureusement il suffit d'un petit rien pour que l'option revienne.
Eclipse et Netbeans , cités précédemment pour Java permettent également de programmer en C++. Il y a juste une petite phase de configuration avant toute chose.
Je peux aussi vous citer wxDev-C++, une version améliorée de feu Dev-C++. Le but premier de cet EDI est la programmation d'applications fenêtrées grâce à wxWidgets (je vous en parlerai après).
Si vous sentez le courage de programmer sans EDI, je vous suggère d'utiliser Notepad++, une version améliorée du bloc-notes de Windows. Il gère quasiment tous les langages (pour ne pas dire tous) de programmation et possède de nombreuses fonctionnalités très utiles. Ne soyez pas étonnés de vouloir l'utiliser pour tout, même de simples fichiers textes, quitte à remplacer le vieux bloc-notes de Windows.
Interfaces graphiques
Du peu que je sais, il me semble que Java possède ses propres interfaces graphiques : Swing et SWT.
Netbeans possède d'ailleurs une fonctionnalité pour créer directement et simplement des applications fenêtrées (on appelle ça le Développement rapide d'applications ou RAD).
Concernant C++, il existe de nombreuses bibliothèques. Pour ma part, j'ai porté mon choix sur wxWidgets en partie parce que Code::Blocks dispose d'un RAD appellé wxSmith permettant de programmer efficacement des applications utilisant wxWidgets. Comme dit précédemment, wxDev-C++ y est consacré également.
Il existe d'autres bibliothèques comme Qt, très utilisée également, ou GTK+ (utilisée par exemple par Gimp, Pidgin).
Librairies multimédia
Voilà enfin le moment le plus intéressant. J'allais pas vous laisser foncer tête baissée dans le monde de la programmation pour que vous reveniez après me demander "Mais comment on fait un jeu avec ça?!".
Il existe des bibliothèques de fonctions spécialisées dans la création d'applications multimédia, pour ne pas dire jeux.
Il existe OpenGL, bibliothèque graphique principalement utilisée pour la 3D - elle permet également de faire la 2D -, concurrente directe de la librairie DirectX. Contrairement à cette dernière, OpenGL est libre et pas restreinte à Windows. Néanmoins, toutes les cartes graphiques ne supportent pas forcément OpenGL, surtout les anciennes. Comme DirectSound pour DirectX, OpenGL possède une librairie consacrée au son nommée OpenAL.
La librairie multimédia la plus connue est certainement la librairie SDL. Néanmoins, son développement est considérablement à la traîne et ce depuis de nombreuses années. Depuis, une autre librairie a vu le jour : SFML. Bien qu'elle soit encore en développement elle est déjà utilisable. Son créateur a également réalisé un benchmark pour comparer la SFML à la SDL au niveau performances. Le résultat est assez surprenant puisque la SFML dépasse largement la SDL sur presque tous les points.
SFML est divisé en plusieurs modules - Audio, Graphique, Réseau, Système et Fenêtre -, est multi-plateformes, portable (son code est conçu pour s'adapter à chaque système d'exploitation sans avoir à changer le code), très facile à prendre en main, performante. Elle s'intègre à de nombreuses interfaces graphiques (de mémoire : X11, wxWidgets, Qt, Win32) et est basée sur OpenGL. Elle permet également d'utiliser OpenGL avec une fenêtre de rendu SFML (en gros dans votre jeu vous pouvez utiliser directement OpenGL en plus de SFML).
Une dernière librairie, assez populaire mais que j'ai trouvé particulièrement difficile à prendre en main : Allegro. Elle est très légère et est parait-il très performante. Si vous avez l'occasion de pouvoir comparer toutes ces bibliothèques, faîtes-moi part de vos impressions.
Langages orientés jeux
Hormis les langages propres aux programmes à certains logiciels de création de jeux comme le GML pour Game Maker, le Ruby pour Rpg Maker ou encore le Dark Basic pour 3D Games Creator, il existe un langage orienté jeu vidéo appelé Lua. Si vous programmez en Lua, vous pouvez aisément créer des jeux pour une console de jeux, à condition qu'elle puisse l'interpréter. La PSP peut le faire une fois flashé et en lui fournissant un programme appelé LuaPlayer. Une console portable permettant directement d'interpréter des jeux en Lua, ou plutôt une version modifiée du Lua appelée MicroLua : la Nintendo DS.
Jeux en ligne
Une grande mode qui s'est créée, celle des jeux en ligne. Les MMORPG mais aussi les sites jeux, du genre OGame. Sachez que si vous apprenez et maîtrisez convenablement le HTML et le CSS ainsi que PHP et MySQL, vous pouvez sans trop de problèmes créer un jeu du même genre. C'est particulièrement facile à mettre en oeuvre et très pratique puisque facile d'accès. Une simple connexion internet suffit pour jouer, c'est un côté très attrayant pour les joueurs.
Une grande nouveauté qui arrivera pleinement d'ici fin 2010, le duo HTML5 et CSS3. Pour l'instant ils ne sont pas encore intégrés à tous les navigateurs (Internet Explorer a énormément de retard) mais une fois pleinement gérés par ces derniers, le web risque de faire un grand bond en avant. Les capacités de ces langages sont apparemment assez suffisantes pour détrôner l'utilisation de Flash qui jusqu'alors nécessite toujours l'installation d'un plugin dans le navigateur pour pouvoir être interprêté.
Quelques liens
Je vous suggère le fameux Site du Zéro pour débuter en programmation. Leurs cours sont très bien expliqués et traitent beaucoup de sujets.
http://www.siteduzero.com
Un autre site pratique pour apprendre : Développez.com
http://www.developpez.com
Et voici les liens vers les sites des logiciels et librairies que je vous conseille. Pour le reste, Google est votre ami.
Code::Blocks : http://www.codeblocks.org
SFML : http://www.sfml-dev.org/index-fr.php
wxWidgets : http://www.wxwidgets.org
Le site wxDev propose en téléchargements un installateur simple pour wxWidgets, ainsi qu'une version de Code::Blocks traduite en français et régulièrement mise à jour. Il propose également de télécharger wxDev-C++ comprenant la librairie wxWidgets.
Pour Java (et même d'autres langages si vous le souhaitez):
Netbeans : http://netbeans.org
Eclipse : http://www.eclipse.org
Pour télécharger Java : http://www.java.com/fr
Game Maker (seulement en anglais) : http://www.yoyogames.com/gamemaker
Et enfin, outil très pratique :
Notepad++ : http://notepad-plus-plus.org