En 2007, avec son projet XNA, Microsoft devenait le premier grand constructeur a ouvrir a tous, officiellement et gratuitement, le developpement de jeux sur sa console, la Xbox 360. Mais aujourd'hui, XNA est bien plus qu'un simple kit de developpement. C'est toute une communaute de createurs et de joueurs qui s'etend bien au-dela de la Xbox 360.

A l'origine XNA Game Studio devait etre decline en deux versions : une pour les professionnels et une autre destinee aux independants. Il n'existe desormais qu'une version du logiciel, utilisee aussi bien par des professionnels pour prototyper des niveaux, des idees de gameplay ou developper des jeux Casual ou Indie a destination du Xbox Live que par des etudiants et independants curieux de mettre en œuvre leurs idees ou acquerir un savoir faire.

C'est la première fois dans l'histoire des jeux video que le grand public accede ainsi officiellement aux developpements sur consoles. Certes, il existe depuis des annees et pour toutes les consoles du marche des kits pirates et illegaux pour permettre a quelques fanatiques de creer des Homebrew, des jeux faits maison. Mais, a vrai dire, ces kits sont davantage utilises pour le piratage que pour la creation.

Avec XNA, Microsoft cherche a la fois a offrir au plus grand nombre l'opportunite de creer des jeux videos (a l'aide d'un authentique kit de developpement pronant la simplicite), et a faire en sorte que ces jeux puissent facilement etre crees a la fois sur Xbox et sur Windows (qui reste le principal marche du jeu). Mieux encore, le kit XNA s'est desormais ouvert a la plateforme Zune et on parle meme de son implementation pour le developpement de jeux sous les futurs telephones tournant sous Windows Phone (attendus pour le mois de septembre).

Un peu d'histoire

Si Microsoft est plus connu du grand public pour ses systemes d'exploitation Windows et sa suite bureautique Office, la societe, elle, s'est pourtant construite en developpant des langages de programmation et des plateformes. Ainsi, le tout premier logiciel sorti par Bill Gates et Paul Allen sous le nom de Micro-Soft etait bel et bien un langage de developpement : Basic pour Altair 8800 en 1975 ! Et les langages de programmation ont toujours accompagne l'evolution et la croissance de l'entreprise de GWBasic a Quick C (en 1985) puis Visual Basic (en 1991) et Visual C++ (en 1992) jusqu'au premier Visual Studio en 1997.

Altair Basic, premier langage de programmation sorti par Microsoft

Cependant, la sortie de .NET (et Visual Studio .NET) en 2002 va completement metamorphoser le developpement sous Windows en introduisant un concept experimente par Java : l'execution de code manage via le .NET Framework . Un bon stratospherique dans la maniere de developper qui va laisser sur le carreau toute une generation de developpeurs du dimanche (n'y voyez rien de pejoratif, bien au contraire) qui voyaient s'envoler la simplicite des GWBasic et Visual Basic 6.0. Mais, depuis quelques temps, Microsoft cherche a se reconnecter avec sa base de programmeurs independants qui s'est sentie trahie et abandonnee a l'arrivee de .NET. Dans cette optique, la societe a d'abord lance la gamme Express (Visual Basic Express, Visual C Sharp Express, Visual Web Developper Express, etc.), accessible gratuitement. Recemment, Microsoft a renoue avec l'esprit de GWBasic avec le logiciel tres ludique Small Basic issu de Microsoft Research. XNA s'inscrit dans cette volonte de renouer avec une population etudiante ou independante en offrant au plus grand nombre un kit de developpement professionnel dedie à la creation de jeu.

Microsoft Small Basic permet de s'initier a la programmation en s'amusant

Les origines du projet

En 2004, alors que DirectX 8 devenait le standard de developpement incontournable pour la création de jeux videos, Microsoft ajoutait a son .NET Framework, un wrapper permettant d'acceder directement aux API de DirectX depuis les langages C# et VB.NET. Connue sous le nom de Managed DirectX  ou MDX, cette extension demontrait qu'un jeu en code manage pouvait tourner a environ 95% (ou mieux) de la vitesse d'un jeu en code natif. L'API restait cependant tres proche d'une implementation abrupte de DirectX et n'adherait que peu aux concepts de simplicite et de modelisation de plus haut niveau de la plateforme .NET. En outre, son usage intensif des Fixed Functions allait a l'encontre de l'evolution des cartes graphiques (qui commençaient deja a proner les shaders programmables) et a l'encontre du developpement sur Xbox 360. XNA tire en effet partie des errances de Managed DirectX qui fut abandonne des son lancement et ne connut jamais de version 2.0 finale.

Managed DirectX, l'ancetre de XNA et aussi la premiere tentative de Microsoft d'implementer DirectX dans du code manage

Pour XNA, Microsoft a donc tout repris a zero et imagine un framework  dedie au jeu dans le pur esprit .NET . Ainsi, bien que XNA soit entierement construit sur la couche ludique de Windows, ses API ne font aucune reference directe a celles de DirectX. Des lors la programmation d'un jeu s'en trouve simplifiee et devient bien plus accessible. A noter cependant que si Managed DirectX cherchait avant tout a faciliter l'integration de la 3D dans n'importe quelle application Windows (donc pas necessairement ludique), XNA se focalise sur les jeux et son utilisation dans des programmes Windows plus classiques n'est pas recommandee. Pour Microsoft, l'insertion de 3D au cœur de programmes Windows traditionnels doit se faire via WPF et non XNA.

La premiere version de XNA fut introduite fin 2006. Une version 2.0, sortie en 2007, ajoutait le support de la gestion reseau et du Xbox Live. En 2008, Microsoft lançait XNA 3.0, base cette fois sur Visual Studio 2008 et introduisant le support du ZUNE pour la creation de jeux sur les baladeurs Microsoft. Depuis juin 2009) Microsoft propose desormais XNA 3.1 qui supporte les Avatars du Xbox Live et leurs Live Party ainsi que la reproduction de videos sous forme de texture.

Qu'est-ce que XNA ?

XNA designe bien plus qu'un simple kit de developpement. C'est une veritable marque qui regroupe tout ce qui, chez Microsoft, a trait aux developpements de jeux videos. La base de XNA est neanmoins une plateforme de developpement a vocation ludique qui poursuit de nombreux objectifs. L'API est en effet concue pour :

- La simplicite : le ticket d'entree en termes de competences techniques est volontairement tres accessible pour qu'independants, etudiants et developpeurs debutants puissent rapidement s'exprimer sans etre freines par une lourde phase d'apprentissage et de mise a niveau. 

- Le cross developpement : XNA cherche a unifier autant que possible le developpement de jeux sur les differentes plateformes de Microsoft bien que les architectures et les processeurs soient radicalement differents : Windows, Xbox 360 mais aussi Zune et probablement bientôt Windows Phone. Sachez egalement qu'il existe une implementation MONO-XNA en Open Source, s'appuyant sur Mono, la version Open Source du .NET Framework, pour des portages sous Linux et Mac OS/X.

- Etendre l'univers des developpeurs de jeu et ouvrir la Xbox 360 a tous les createurs independants sans avoir recours a l'achat d'un kit de developpement Xbox ou d'une puce illegale. 

- Creer une forte communaute : on le verra, XNA c'est aussi une forte communaute qui s'exprime aussi bien sur le Web a travers une multitude de sites, que sur l'espace Community Games du Xbox Live.

Le XNA Creators Club

XNA c'est aussi une communaute. Le XNA Creators Club est d'abord un espace de rencontre ou l'on trouve de tres nombreux tutoriels et guides pour rapidement maitriser les bases de cet univers. En outre, c'est la cle d'entree au developpement sur Xbox 360. Si developper pour Windows est entierement gratuit, le developpement sur Xbox  360 impose lui d'adherer au XNA Creators Club pour 99 dollars par an. L'adhesion au club est imperative pour obtenir le code permettant de transferer et debugger un jeu sur la Xbox, puis de le publier sur le site.

Le site du XNA Creators Club

A l'origine, seuls les membres du XNA Creators Club pouvaient jouer aux jeux developpes par les autres membres pour la console. Depuis la version 3.0 du XNA, n'importe quel utilisateur peut desormais acceder aux jeux developpes par les membres. Toutefois, seuls les membres du XNA Creators Club peuvent valider la qualite des jeux et autoriser leur diffusion via la section XBOX Live Community Games. Section aillant d'ailleurs changer de nom puisque le Xbox Live Community Games est devenu Xbox Live Indie Games.

A la decouverte de XNA

XNA se compose d'un ensemble d'outils de developpement et de technologies et plus particulièrement de :

- XNA Game Studio 3.1, le kit de developpement base sur Visual C# 2008 Express

- XNA Content Pipeline,une technologie qui normalise toute la gestion des contenus, assure leur incorporation au binaire et standardise la phase de build

- XNA Framework, que l'on peut percevoir comme une surcouche de DirectX qui standardise le developpement  de jeux sur les differentes plateformes XNA (Windows, Xbox 360, Zune)

- Un jeu de technologies complementaires (Voice, XUI, etc.)

- Des outils comme XACT (pour la creation audio) , PIX  (debugger de GPU), ou un gestionnaire de Devices.

L'environnement de developpement de XNA Game Studio 3.1

Le XNA Framework est a la fois une surcouche de DirectX integree a l'environnement de developpement et une extension dediee aux jeux pour la plateforme .NET. Elle poursuit deux objectifs fondamentaux :

- Permettre aux developpeurs de concentrer leurs efforts sur le jeu et non la gestion du systeme.

- Offrir des APIs consistantes, faciles a utiliser, completes, et dans un pur esprit .NET.

Pour cela, les APIs du XNA Framework couvrent principalement les aspects suivants :

- Le Graphisme : avec notamment des APIs pour toute la gestion des capacites de la carte graphique, les textures, l'affichage des sprites et des modeles 3D, etc.

- Le Son : la reproduction de musique en tache de fond, la generation d'effets spéciaux, etc.

- Les Entrees : avec des APIs de gestion du joystick tres simple d'emploi, de gestion de la souris et du clavier.

- Le Stockage : avec une API qui se comporte comme un systeme de fichiers virtuel. Tous les fichiers sont stockes a l'endroit le mieux adapte selon la plateforme visee.

- Les Mathematiques : avec une librairie de fonctions mathematiques specialement orientee vers le jeu en 3D avec notamment des API de mouvements, de rotations mais aussi de detection d'intersections/collisions ou de gestion de Frustum (elimination des elements hors champ visuel).

L'architecture du XNA Framework (source : Microsoft)

Un jeu, ce n'est pas que du code et XNA permet de prendre en charge tout le Content Pipeline, autrement dit tout l'aspect contenu du jeu et les problematiques qui y sont associees : les textures (avec leurs differentes bitmaps en resolutions differentes), les modeles 3D, les elements audio, mais aussi les problematiques d'importation, de formats, de traitements graphiques et audio, de preparation des contenus a la plateforme de destination, de chargement des ressources, etc. Autant d'elements et processus generalement geres par des personnes differentes dans les grandes equipes de developpement de jeux et qui trouvent ici un socle normalisateur et unificateur.

Le Content Pipeline tend a préparer tous les objets multimedias pour qu'ils soient directement convertis au format DirectX et soient transformés en classes managees fortement typees, directement manipulables en code C#. Par consequent, et c'est l'une des grandes originalites de XNA, tout contenu (image, texture, modele 3D, son, musique, video) utilise par le jeu doit traverser le Content Pipeline pour etre verifie, transforme au bon format, optimise et injecte dans les ressources du programme. Des lors, les API permettent de simplement et tres rapidement charger et manipuler ces contenus en les appelants par leur nom.

Installer XNA Game Studio 3.1

L'installation du kit XNA Game Studio 3.1 est precedee par l'installation de deux composantes fondamentales : DirectX 9 et l'IDE Visual C# 2008 Express Edition. DirectX est par defaut installe sur les PC tournant sous Windows Vista et Windows 7. Quant a Visual C# 2008 Express Edition, il est gratuit et disponible sur le Centre de telechargements de Microsoft. Cependant, il faut noter que le kit XNA Game Studio 3.1 fonctionne egalement sur les editions payantes de Visual Studio 2008. Si celui-ci est deja installe sur votre PC, inutile donc d'installer Visual C# 2008 Express en plus.

Comme son nom le suggere, Visual C# 2008 est un IDE pour programmer efficacement en langage C#. Notez qu'il est possible de developper dans un autre langage et notamment en VB.NET mais seule la programmation en C# est officiellement supportee par Microsoft et l'utilisation du XNA Content Pipeline dans un autre langage que C# s'avere complexe et quelque peu bidouille.

Une fois l'installation et la mise a jour de Visual C# 2008 Express Edition terminees, lancez l'installation du kit XNA Game Studio 3.1 et suivez les etapes de l'assistant.

Installation de XNA Game Studio 3.1 sur PC

Si vous ne comptez developper que pour Windows, le processus d'installation se termine a cette etape. En revanche, pour ceux desirant aller plus loin, le processus de developpement pour Xbox 360 necessite quelques etapes supplementaires.

Il faut commencer par s'inscrire en tant que membre Premium du XNA Creators Club. Pour ce faire, allumez votre Xbox 360, connectez-vous au Xbox Live et allez jusqu'au Marche de Jeux. Dans la section Parcourir les contenus jeux, selectionnez Parcourir, puis Tout et selectionnez XNA Creators Club. Enfin, selectionnez et telechargez XNA Game Studio Connect. Une fois le programme installe, rendez-vous dans la chaine Ma Xbox, selectionnez Bibliotheque de jeux, Jeux de la Communaute puis XNA Game Studio Connect. Au lancement, la console affiche un code. Notez-le et ne touchez plus a rien. Retournez sur votre PC et lancez via le menu Demarrer de Windows l'application XNA Game Studio Device Center. Selectionnez Add Device et saisissez un nom pour votre Xbox 360 (au choix, c'est libre). Puis saisissez le code affiche par votre console. Le processus d'installation est alors termine.

Validation de l'installation sur Xbox 360

Faire ses debuts avec XNA

Une fois le kit de developpement installe, il ne reste plus qu'a lancer l'environnement Visual C# 2008. En creant un nouveau projet, l'assistant propose plusieurs modeles dedies a XNA : Windows Game, Windows Game Library, Xbox 360 Game, Xbox 360 Game Library, Zune Game, Zune Game Library, Content Pipeline Extension, Platformer Starter Kit. Le dernier modele de la liste donne toutes les bases utiles pour concevoir son propre jeu de plateformes en 2D. L'idee consiste simplement a modifier le programme etape par etape pour y implementer vos propres idees. Son code source permet de rapidement apprehender les grands concepts de la programmation en XNA. Il permet aussi de verifier que tout est bien installe. Bien sur, plusieurs autres Starter Kits destines a d'autres genres de jeu et outils divers sont disponibles en telechargement sur le XNA Creators Club.

En choisissant de creer un jeu sous le modele Windows Game, le kit XNA genere alors automatiquement un squelette ou une architecture generale commune a tous les jeux developpes sur XNA. Cette architecture repose essentiellement sur une classe Game qui contient ce que l'on appelle communement la Gaming Loop. Tous les jeux sont en effet generalement construits autour d'une boucle principale dans la laquelle s'effectue la detection du joystick (ou de la souris), la gestion des deplacements, la gestion des collisions, et le rafraichissement de l'affichage en fonction de ces elements.

Squelette d'un jeu XNA

En etudiant rapidement le code ce squelette, on decouvre qu'il ne comporte que 4 methodes cles :

- Initialize() dediee a l'initialisation de tous les éléments non graphiques

- LoadContent() dediee au chargement des ressources graphiques

- Update(GameTime) ou l'on met en œuvre les deplacements automatiques, les reactions en fonction des actions de l'utilisateur sur la manette, les detections de collisions.

- Draw(GameTime) appelee chaque fois que l'ecran doit etre redessine apres un Update.

Une cinquieme methode UnloadContent() est egalement presente en fin de jeu, quand on sort de la boucle, pour liberer les ressources allouees.

Cette ossature de base ne demande ensuite qu'a etre enrichie par de nouvelles methodes et d'autres methodes de base a surcharger. Tout ceci est largement documente a la fois dans l'aide en ligne de XNA mais surtout dans la multitude de sites et communautes de developpeurs XNA.

Pour aller plus loin

L'autre interet de XNA reside dans sa vaste communaute. Il existe sur Internet une quantite indenombrable d'exemples, de codes sources, et de tutoriels pour rapidement apprendre a maitriser le role, les methodes et les proprietes des multiples objets du XNA Framework a commencer par les plus capitaux (GraphicsDevice, SpriteBatch, SpriteFont, etc.).

Parmi ces sites, voici les incontournables :

- XNA Creators Club Online : le point de depart de tout developpeur XNA. Il contient differentes zones developpeur dediees a des points bien spécifiques (2D, 3D , IA, Audio, Collision, Physique, Ombres, Stockage, etc.).

- XNA France : l'une des ressources en langue française les plus riches.

- RB Whitaker's Wiki : pour son imposante collection de tutoriels pour resoudre une a une toutes les difficultes rencontrees par les debutants (blending, particles, animations 3D, effets de brouillard, effets de lumiere, animation squelette 3D, animation Mesh by Mesh, gestion du joystick, de la camera, etc.). Le site est particulierement bien realise et bien architecture pour trouver rapidement la reponse a sa question.

- Ziggyware : qui est lui aussi assez riche tutoriels avec des videos et des modeles a telecharger. Le site propose egalement toute une floppee de composants a integrer directement dans ses creations.

- Le blog de Aaron Stebner : pour ses nombreux exemples d'utilisation des Avatars Xbox 360.

- XNA Development : qui contient plusieurs demos de jeux et de nombreux tutoriels mais manque un peu d'organisation.

Autour de cette communaute, gravitent egalement des editeurs de composants et d'extensions pour XNA dont les plus importants sont :

- Synapse Gaming et son moteur SunBurn.

- Turbo Squid qui propose une imposante collection de modeles 3D a incorporer directement dans ses jeux.

- Garage Games et leur studio de creation interactive de jeux en 2D et 3D, TorqueX.

Publier son jeu sur Xbox 360

Une fois son jeu totalement finalise, celui-ci doit etre soumis a la communaute du XNA Creators Club en utilisant le formulaire propose sur le site. Pour cela, pas besoin de fournir les codes sources. Seul le fichier binaire .ccgame est a envoyer accompagne d'un descriptif complet du jeu. Il faudra egalement definir dans quels pays le jeu pourra etre diffuse et enfin choisir a quel prix le jeu sera commercialise.

L'etape suivante ne depend plus vraiment de soi. Le jeu sera evalue et approuve par la communaute. Pour cela, les membres sont invites a le telecharger, a l'essayer, puis a repondre a un questionnaire qui evalue une multitude de points concernant l'interet, la qualite visuelle, le gameplay, la finition, etc. Une fois approuve, le jeu sera alors mis a disposition des utilisateurs de Xbox 360 via la section Jeux de la communaute dans l'interface d'accueil de la console. Microsoft retrocede aux auteurs 75% du prix de vente sur chaque logiciel vendu.

Sachez egalement que chaque annee Microsoft organise un concours de creation de jeux, le Dream Build Play Challenge, dont les laureats de l'edition 2010 seront annonces ce mois-ci. Le gagnant recevra 40 000 voire 60 000 dollars selon la categorie dans laquelle il concourt et aura la possibilite de voir son jeu publie sur le Xbox Live Arcade. Plus de renseignements ici.