mercredi 17 novembre 2010

Work in progress

"Sali salut !" comme dirait ce cher Ned Flanders. Alors aujourd'hui je reviens avec une petite avancée dans mon projet de FMR. Jusqu'ici, j'avais développé petit à petit une démonstration de jeu afin de voir comment tournait XNA et afin de tâter un peu la "bête".
Un problème me travaillait depuis un moment : comment faire pour créer une navigation entre les différents états d'un jeu (menus, niveaux, phases de carte, s'il y en a, et autres phases possibles) sans m'arracher les cheveux et sans avoir à reprendre le travail d'autres? (chose particulièrement douloureuse de manière générale...)
Pour résumer l'ensemble des contraintes, il faut savoir qu'avec XNA il y a véritablement trois temps dans un jeu : l'initialisation, la boucle de jeu et l'arrêt du jeu. Ce qui nous intéresse ici, c'est la boucle du jeu qui se divise elle-même en deux phases qui servent respectivement à la synchronisation (mise à jour de toutes les données) et à l'affichage (normalement aucun calcul, juste l'affichage du résultat).
Donc, pour réaliser un début de jeu, c'est extrêmement simple : on détecte les entrées de périphérique (clavier, souris, manette...), on met à jour les informations d'affichage puis on affiche. Mais dans le cas, plus complexe, où on veut commencer à faire un jeu plus complexe, on se heurte au problème des états. Pour répondre à cela, une solution toute simple existe, utiliser des enums. Les utiliser aide à gagner en clarté (ça évite les codes en entiers ou en chaines de caractères) mais ça n'améliore que peu la lisibilité (dans le cas de multiples if ou case). C'est donc pour à la fois améliorer cela et améliorer l'indépendance entre les différentes parties du jeu que j'ai opté pour une restructuration complète du jeu. La nouvelle structure est organisée en couches, voire en arbre.


Cette façon d'organiser le programme ne se suffit pas, il faut en plus que chaque couche mère transmette un socle d'informations communes à ses couches filles. Ce socle d'informations contient tout ce qui est fenêtre, espace d'affichage, périphériques d'entrée (clavier, souris, manette...) ou même le temps d'exécution du programme (pour permettre, par exemple, d'afficher des animations de façon fluide, en fonction du temps écoulé).
Le fonctionnement de cette structure est assez simple : quand on lance le jeu, une variable d'état de "jeu" est par défaut sur "intro". Une fois que l'intro a fini de s'exécuter, elle place elle-même l'état de "jeu" à "menus". Une autre variable qui permet de se repérer dans la couche Menus est elle par défaut sur "Principal". Selon les actions et choix de l'utilisateur, on changera en local la valeur de cette variable ou, si on veut jouer, la valeur de "jeu". On procède ainsi sur tous les niveaux, ce qui permet d'automatiser certaines actions. Par exemple, si dans Jeu-> Partie -> En-Jeu -> Menus on choisit "Quitter la partie", la partie "Menus" ne modifiera que la définition locale qui dira quelle action faire à la couche supérieure, qui elle-même modifiera sa définition locale et ainsi de suite jusqu'à ce qu'on en revienne à l'état Jeu -> Menus -> Principal.
Cette façon de concevoir permet de mettre en place des algorithmes plus courts, plus légers et automatise pas mal de traitements qui autrement pourraient entrainer des erreurs.

Bon bien sûr, cette façon de faire n'est certainement pas la meilleure, mais c'est en tout cas une manière efficace d'arriver au résultat voulu et (je peux en témoigner) d'une façon largement satisfaisante.

Cette avancée m'a permis de refaire à zéro l'ensemble de ce que j'avais déjà fait (afin de coller le plus possible au schéma donné précédemment) et surtout de n'avoir que des petites modifications à chaque ajout. Par exemple, j'ai mis dans mon menu principal une animation de fond plutôt qu'une image : je n'ai eu pour cela que la partie Menus à refaire. Ce principe de couches est réutilisé d'ailleurs dans la gestion des périphériques. En effet, comme mon développement prend en compte le PC et la XBox 360 et que dans le cas du PC on peut avoir soit une manette soit combo clavier / souris, il serait plus que lourd de faire tout mon programme en version double. La solution que j'ai choisie, c'est de faire un objet (une couche) Commande qui regarde quel périphérique utiliser et qui retourne donc la même chose quelque soit le support et quelques soient les périphériques. Du coup, pour reprendre l'idée du schéma donné plus haut, l'organisation serait la suivante :

En fait, on décrit dans Commandes des méthodes comme "Pause" ou "Action" qui sont en fait des informations "abstraites" que l'on veut récupérer et dans lesquelles on va d'abord analyser les informations spécifiques aux périphériques pris en compte pour retourner un état. Cet état a pour intérêt d'être toujours valable et de ne demander aucune information à la classe qui l'utilise.

Donc pour terminer cette petite partie, je vais vous donner quelques images de ce que j'ai réalisé puis j'ajouterai un petit bonus coup de cœur.





Et finalement, voici mon petit bonus coup de cœur, qui n'est pas si récent que cela et qui réveillera quelques souvenirs chez ceux qui connaissent l'original : Zelda 2 (NES).
Mais attention, ce n'est pas vraiment Zelda 2 tel qu'il est sorti il y a quelques décennies déjà, mais une version totalement revue en 3D par un passionné. Si en général 3D rime avec mauvaise nouvelle pour ce genre de classique, ici il faut avouer qu'en plus d'être bien réalisé, cet épisode est plutôt fidèle à l'original (hormis pour les villes).
Vous pourrez le trouver ici, après avoir installé un petit patch pour que votre navigateur puisse afficher le jeu.
Quelques images pour vous faire une idée :





samedi 13 novembre 2010

Gotham Paris Games Week

Ça faisait depuis le mois dernier que je n'avais fait d'article, mais là je reviens avec quelques images du Paris Games Week (le PGW pour les intimes). Qu'est-ce-que le PGW? C'est juste le salon du jeu vidéo le plus important de France, organisé par le SELL et qui regroupe (forcément) tous les plus grands noms du jeu vidéo qui viennent présenter leurs dernières nouveautés.

Pour sa première édition, le salon s'offrait tout simplement le Hall 1 du parc des expositions de Paris (Porte de Versailles) et le week end de la Toussaint habituellement réservé au Micromania Game Show, reléguant ce dernier au rang de simple démonstration privée. Détrôner le Festival du Jeu Vidéo et le Micromania Game Show, le PGW l'a fait et tente de jouer des coudes avec la Gamescom. Pari réussi?


N'ayant pas pu tout essayer (le salon était assurément rempli), je vais vous proposer mon parcours.  Tout d'abord, on pouvait voir en entrée une grande pub Fallout 3 : New Vegas à côté de l'affiche du PGW.



Commençons donc le bal des jeux avec Kinect qui était directement à l'entrée et qu'il m'a donc fallu (ré)essayer. S'il faut admettre que les mouvements sont bien reconnus, il y a un petit décalage sur certains jeux qui, même s'il est très faible, peut s'avérer gênant. Ensuite, nous sommes allé sur le stand Nintendo où étaient présentes de grosses licences : Zelda, Donkey Kong, Golden Sun, Golden Eye...
Je vais passer chacun d'eux en revue :
  • Donkey Kong Country Returns : Façon New Super Mario Bros. il se joue en 2D avec des graphismes 3D, renouant ainsi avec ses racines : et quelle réussite! Magnifique, une jouabilité sans reproche, un mode deux joueurs dans l'esprit de NSMB, c'est simplement l'épisode le plus prometteur depuis Donkey Kong Country 2.

  •  Zelda Skyward Sword : Semi-cellshadé et semi-réaliste, cet épisode propose (en tout cas la démo) des graphismes magnifiques. La maniabilité reste la même que dans l'épisode précédent : Menu d'objets circulaire, répartition sur la manette identique. Une chose est à signaler : la détection de mouvements est simplement parfaite et là le Wii Motion Plus montre sa toute puissance. La détection ne s'arrête pas à l'inclinaison, mais les vecteurs sont aussi parfaitement pris en compte. Une chose est sûre, j'ai ce jeu le jour de sa sortie ;)




  •  Golden Eye : N'ayant pu tester que le mode multijoueur, je dois dire que celui-ci est plutôt honnête. Des graphismes dans la moyenne de ce que j'ai pu voir sur Wii pour le moment, une maniabilité (à la manette dorée) plutôt bonne. A noter que (Ô hérésie) Pierce Brosnan a été remplacé par Daniel Craig dans cet épisode.
Pour les autres jeux, nous y reviendrons plus tard...

Bien que je l'aie déjà, j'ai quand même fait un tour par le stand Fallout 3 : New Vegas. Je pourrai en écrire assez long, mais je préfère laisser l'entièreté du sujet à un article ultérieur, logiquement consacré au jeu.

Voilà, ce sont là les seuls jeux que j'aie essayés, malgré moi puisque, il faut bien l'avouer, les files d'attentes étaient trop longues pour espérer en faire plus. J'ai par contre assisté à la présentation de la résistance anti-nord-coréen dont voici le journal :


Pour ceux qui ne connaissent pas, il s'agit du jeu HomeFront de THQ qui a l'air, d'après la présentation donnée, plutôt impressionnant. Dans une Amérique occupée par la Corée du nord, la résistance s'organise afin de récupérer le contrôle du territoire. Avec un multijoueur allant jusqu'à 32 en même temps, le jeu (au scénario surprenant) est présenté comme élaboré par d'anciens analystes de la CIA. Ce jeu est à suivre de près.

J'avoue que cet article propose plus de photos que de texte, mais un tel événement ne se commente pas tant que ça, il se vit. A mon sens, les images et vidéos apportent plus de renseignements que tout le blabla que j'aurais pu mettre. Pour répondre à ma question d'introduction, je ne saurais dire si ces deux événements sont comparables, mais le PGW a déjà réussi son pari, c'est-à-dire d'être LE rendez-vous du jeu vidéo en France, et avec la concurrence déjà bien installée avant, ce n'est pas rien.
Je n'ai pas de photo du stand Sony, mais quand j'y suis passé, le volume de son était tellement insupportable que je n'ai pas pu y rester plus de quelques minutes. Les deux gros événements de ce stands étaient Gran Tourismo 5 et la WiiMote le Playstation Move. Rien de bien intéressant pour moi, puisque j'ai déjà une WiiMote...


Bon, comme je n'aime pas rester sur une fin aussi rapide, je vous laisse avec ce qu'a pensé ma sœur des jeux qu'elle a essayés et en bonus, quelques images des autres stands.
Avant cela, je tiens à préciser que je n'aurais pu réaliser ce voyage sans l'aide que m'a apporté mon père, ou sans la place offerte par Nintendo.

Morgane :
007 - Golden Eye ( Wii) :
N’étant pas une grande fan de ce type de jeux, mon avis sera donc sans grande importance, mais ayant testé ce jeu, je me devais donc de dire ce que j’en ai pensé.
Tout d’abord, ce que je reproche aux jeux de genre, c’est la maniabilité. Or, je m’y suis très rapidement adaptée et j’ai même réussi à viser des adversaires (si, si!), donc autant dire que ce jeu a été une très bonne surprise. Point de vue graphisme ( je ne m’y connais pas du tout) rien de spécial, le jeu semble sans aucune prétention, faisant passer un bon moment comme son lointain cousin sur N64.


Golden Sun  (DS) :
J’avais déjà joué au tout premier volet de la saga sur GBA, que j’avais fortement apprécié. Ne sachant à quoi m’attendre et ayant peur d‘être déçue, j’ai finalement essayé ce jeu, et je pense honnêtement qu’il pourrait être un de mes prochains achats. Très bonne transition pour apprendre à jouer, des petites énigmes à résoudre dès le début... Ce jeu est vraiment sympa, divertissant. Je ne sais pas ce que des professionnels diraient, mais pour moi qui suis une joueuse occasionnelle, ce jeu pourrait me faire rester des heures sur ma console. Vous l’aurez compris, la démo m’a rendue très enthousiaste.







Pokémon Donjon Mysère ( DS) :
Cela fait à présent 10 ans que je suis fan de la saga Pokémon, et n’ayant jamais joué à un jeu Pokémon autre que les bons vieux RPG, quelle ne fut pas ma déception lorsque j’ai essayé ce jeu! Il m’a semblé extrêmement répétitif, dès le début on est lâché dans l’aventure sans aucune explication, on tourne assez facilement en rond... Cela n’était biensûr qu’une démo, et il est difficile de résumer un jeu entier à partir de ça, mais mes impressions sur ce jeu sont franchement mauvaises. Je vous le déconseille.


Et maintenant, les images promises ;)















dimanche 24 octobre 2010

My life as a student

Me revoilà après 10 jours sans signe de vie. Alors quoi de neuf depuis le temps? L'ensemble de mes projets universitaires avance, de nouveaux sont arrivés et certains ont même changé.

Faisons un petit récapitulatif :
  • Mon projet de Tchat Géolocalisé est quasiment terminé (à voir ici),
  • Mon projet d'algo génétique est plutôt bien avancé (à voir ici),
  • Nous avons eu un nouveau projet en HCR (cours de réseau) qui consiste en la conception de clients C et d'un serveur JAVA constituant (en communiquant) un annuaire distribué (sujet à voir ici),
  • Et finalement j'ai demandé à changer de sujet de FMR qui est donc maintenant la conception d'un jeu XBox Live en utilisant la suite d'outils XNA (présentée dans cet article).
Bien qu'il me faille terminer chacun d'entre eux, je dois avouer que ce dernier me tient tout particulièrement à cœur. En effet, sans compter l'article précédent, il faut admettre qu'il est assez stimulant de travailler sur un jeu. En fait ici je ne suis pas censé travailler directement dessus, mais simplement faire un rapport technique sur le sujet, suivi d'un rapport global incluant le technique, le financier et d'autres sujets concernant la création d'une entreprise pour ce secteur (car oui, il s'agit bien ici de créer une entreprise).

En réalité, le sujet de la matière FMR est de proposer un projet de création d'entreprise innovante. Le choix de l'entreprise et de son activité est laissée au choix de l'étudiant qui doit savoir trouver un sujet compatible et monter un dossier suffisamment solide pour être validé par un jury. S'il est validé (rien à voir avec la note), l'entreprise sera alors créée (même si c'est plus long qu'il ne l'est décrit ici).

Pour le moment, j'ai déjà commencé mon rapport technique et j'ai plutôt bien avancé dans l'ensemble de l'analyse technique. La partie conception est elle aussi bien amorcée et je pense que j'aurai fini dans les temps.


Comme je ne pense pas en écrire long sur le sujet ici, je vous propose de suivre assez souvent l'évolution du projet sur le blog (wordPress) qui lui est dédié ici, même si il est assez vide pour le moment...

mercredi 13 octobre 2010

XNA : le couteau suisse du développeur amateur !

Ça faisait bien 10 jours que je n'avais pas donné signe de vie, mais c'est normal : entre temps j'ai découvert le magnifique XNA !


Qu'est-ce que XNA? Comme dirait mon cher ami Wikipédia :
Microsoft XNA, officiellement XNA's Not Acronymed, parfois présenté dans les médias Xbox Next-Generation Architecture, désigne une série d'outils fournis gratuitement par Microsoft qui facilite les développements de jeux pour les plates-formes Windows, Zune, Windows Phone 7, et Xbox 360 en réunissant un maximum d'outils en provenance de Microsoft et de ses partenaires (DirectX, Visual Studio, PIX, XACT).

Il contient principalement un framework, des outils d'intégrations de contenu, et la documentation nécessaire. L'IDE utilisé, à télécharger séparément, est Visual Studio.

Avec XNA, Microsoft est le premier constructeur à ouvrir la porte au développement indépendant sur sa console Xbox 360. Les jeux produits sont distribués via le Xbox Live.
En bref, quand on est seul à programmer (comme moi) ou peu nombreux, c'est la possibilité la plus concrète et la plus économique de se lancer dans la programmation sur console.

Comme le dit Wikipédia, XNA c'est un ensemble d'outils et je vais donc vous présenter ici ceux qui me paraissent les plus importants (de mon point de vue de développeur).



Tout d'abord, la programmation se fait en C# et permet donc de faire des jeux portables sous les plateformes Microsoft (Windows, Zune, XBoX 360 et Windows Phone 7 pour XNA 4.0). Bien évidemment, des adaptations sont à faire selon le support, mais on peut dire qu'elles restent mineures puisque le langage ne change pas et que les bibliothèques sont les mêmes.

D'ailleurs, ces bibliothèques sont extrêmement pratiques : tout est pris en charge et il n'y a plus qu'à coder l'important. Il existe des structures permettant de stocker des positions pour environnements 2D ou 3D, l'utilisation des périphériques se fait en quelques lignes, que ce soit de l'audio, de la vidéo ou même la prise en compte des manettes. Les manettes, quelles soient connectées ou non, sont toujours initialisées et permettent donc de savoir si oui ou non elles sont connectées, un véritable plus pour savoir directement s'il faut stopper le jeu ou interdire de choisir deux joueurs s'il n'y a qu'une manette par exemple.

Pour ceux qui hésitent encore et qui ne connaissent pas le C#, il faut savoir que c'est sensiblement semblable au Java, mais en mieux. D'ailleurs, je vous invite à lire la doc en ligne sur le site de Microsoft, elle est véritablement bien faite, complète et embarque de nombreux exemples, que ce soit pour C# ou XNA.



Un autre outil assez intéressant : XNA Game Studio Device Center qui permet d'ajouter des périphériques à Visual Studio afin de tester vos jeux directement dessus. Une fois un périphérique sélectionné comme principal, il n'y a qu'à lancer l'exécution (en lançant le programme XNA fournit sur la XBoX 360 par exemple) pour que le jeu soit exécuté sur la console. Petit plus, en faisant un clic droit sur le périphérique (comme indiqué sur l'image ci-dessous), on peut faire une capture d'écran.

Enfin voilà, avec XNA, vous avez tout pour pouvoir réaliser facilement, gratuitement et rapidement des jeux amateurs et pourquoi pas les vendre un jour? ;)

Temps additionnel : 
J'ai d'ailleurs fait pendant ces 10 jours une petit démo technique sur ma 360 pour voir un peu comment fonctionne XNA. Je vous laisse avec quelques screens et leurs légendes.