15 avril 2012

Un jeu de morpion, mais en mieux

 

Il y a quelques années, j’ai eu envie d’appliquer quelques cours d’informatique et de rendu OpenGL1 pour développer quelque chose de plus  interactif que le rendu d’une théière texturée éclairée par un spot qui bouge. J’ai donc pensé à un jeu video.

Sur les forums de développeurs amateurs, on voit assez régulièrement passer d’ambitieux projets pour faire « WoW mais en mieux » et autre jeux « révolutionnaires où on pourra tout faire et même plus ». Généralement, ce genre de projet ne tient pas un mois, et meurt avec la motivation de ses concepteurs lorsqu’ils commencent à prendre conscience du centième de la montagne de travail que cela représente. Comme j’avais déjà une vague idée du temps nécessaire pour développer un projet même assez simple, j’ai évité de m’engager là-dedans.  J’ai suivi le conseil systématiquement donné aux débutants enthousiastes : commencer par un jeu très basique avant de s’attaquer à plus gros. J’ai ainsi choisi de faire un morpion. Mais en mieux, quand même.

 

Historique de New-Puzzle

Mon idée de base était de reprendre les mécanismes du morpion, mais avec un gameplay 3D sur une grille cubique2. J’ai fait une première version du jeu, une application très simple qui se contentait de lancer directement une partie et affichait la grille et les scores, en donnant la possibilité aux joueurs de faire tourner le cube comme ils le souhaitent. Puis j’ai eu l’idée d’ajouter un jeu de puissance 4 en 3D, c’est à dire exactement la même chose (donc concrètement très peu de code suplémentaire) mais avec une contrainte obligeant à remplir d’abord la grille par le bas 3. J’ai alors décidé de regrouper une compilation de petits jeux dans une même application, baptisée Newt-Puzzle. « Newt » pour « Newt is an essential waste of time », les projets libres aimant bien les acronymes récursifs.

À partir de ce moment-là, le projet a beaucoup évolué. J’ai d’abord changé de bibliothèque pour gérer la fenêtre de jeu et les évènements clavier/souris. De GLUT4, je suis passée à SDL, 5 la première étant trop limitée pour un projet qui devenait plus ambitieux. Et surtout, j’ai à cette époque commencé à m’intéresser à la programmation de shaders 6, pour rajouter quelques effets graphiques sympatiques, comme une mosaïque avec du bump mapping 7 que l’on peut voir sur l’image ci-contre. À vrai dire, cet extrait de capture d’écran ne lui rend pas honneur : quand on se déplaçait on avait vraiment bien l’illusion du relief, j’avoue que j’étais plutôt fière de moi. Je voulais aussi proposer plusieurs type de rendus différents, en particulier un rendu cartoon8.

Après avoir développé une partie de ce que je voulais faire, j’ai souhaité avoir des retours. Une première version est sortie : elle souffrait d’un léger défaut, apparemment elle ne fonctionnait que chez moi… J’ai assez rapidement publié une nouvelle version corrigeant quelques vilains bugs trouvés entre temps, mais qui n’a semble-t-il pas vraiment rendu le jeu jouable ailleurs que sur mon PC.

En fait, Newt-Puzzle était assez vite devenu un prétexte pour expérimenter divers effets graphiques. Malheureusement, à la base je n’avais pas du tout prévu ces évolutions, et l’architecture initiale de mon code n’était pas adaptée. J’ai alors dû passer beaucoup de temps à partiellement réorganiser le projet et à traquer des bugs qui ne se manifestaient pas chez moi (ce qui ne simplifie pas vraiment la recherche  !), travail fastidieux et pas spécialement gratifiant. Cela a fini par me démotiver et j’ai arrêté de toucher au projet pendant quelques années.

 

Et maintenant ?

Je ne vois pas ce bilan comme un échec : j’ai pu apprendre énormément sur la programmation avec OpenGL, sur la nécessité de définir un minimum à l’avance un projet avant de se jeter dans le code.

J’ai récemment commencé un nouveau projet, un peu plus intéressant qu’un morpion. J’en parlerai plus en détail dans un prochain article. En parallèle, j’ai aussi commencé à retravailler sur Newt-Puzzle, en reprenant entièrement le projet à la base. J’ai l’intention de cette fois-ci de me limiter à quelque chose d’assez simple, et de bien défini dès le départ. En fait, Newt-Puzzle va me servir pour continuer à me faire la main avant de vraiment attaquer un jeu un peu plus ambitieux.

Je vais donc commencer par reprendre le moteur 3D maison que j’avais écrit, en virant tout les effets qui ne servent pas vraiment et qui pour la plupart n’avaient jamais été terminés. Si j’avais dès le départ intégré que prétendre développer en solo un « jeu révolutionnaire où on peut tout faire » est voué à l’échec, je me rends compte que j’avais peu à peu dérivé vers le développement d’un moteur 3D intégrant tous les effets à la mode, ce qui n’était guère plus raisonnable.

Je pense aussi concevoir rapidement l’interface graphique pour paramétrer les quelques options du jeu, et un vrai menu de sélection des jeux, aspects qui manquaient à la version que j’avais publiée. En plus de l’avancement de tout cela, je compte publier sur le blog quelques tutos et astuces pour OpenGL, pour ceux qui seraient tentés de se lancer dans une telle aventure.

 

PS : comme vous pouvez le voir, j’ai intégré quelques précisions sur les termes un peu techniques dans des notes de bas de page. Si des aspects restent obscurs, n’hésitez pas à me le signaler dans les commentaires.

 

  1. OpenGL est une API pour le développement d’applications 3D (ou 2D d’ailleurs). Dans le domaine des jeux video, elle est en concurrence avec la bibliothèque Direct3D de Microsoft. Cette dernière ne fonctionne que sous Windows et XBox, alors qu’OpenGL est multiplateforme.
  2. À vrai dire, je n’ai rien inventé : le concept existait déjà sur Atari dans les années 80.
  3. Là encore, ça existe déjà : vous avez sûrement déjà vu de forts jolies versions en bois du puissance 4 en 3D, on en trouve souvent dans les marchés de Noël.
  4. OpenGL Utility Toolkit. Elle n’est plus développée depuis 1998, mais des implémentations libres de la même API ont été écrites, en particulier Freeglut.
  5. Simple DirectMedia Layer. Sous licence GPL2, elle est utilisée par beaucoup de jeux libres mais aussi par des jeux indés propriétaires, comme World of Goo.
  6. En gros, un shader est un programme qui définit une étape du rendu. Pour un rendu temps réel, donc en particulier pour les jeux, il est exécuté par le GPU.
  7. Technique permettant de donner l’illusion du relief à une surface, à l’aide d’une texture contenant la normale en chaque point. Les calculs d’éclairage sont alors faits (dans un shader, donc) en tenant compte de cette normale modifiée).
  8. Cel-shading ou toon-shading, rendu non photo-réaliste caractérisé par un nombre de couleurs limité pour représenter l’ombrage des objets.
Réactions : 2 Commentaires
 

Commentaires

Vous pouvez poster un commentaire ou laisser un trackback à cette adresse.

 
 
  • Ekho
    21 avril 2012
     

    Outch, le teasing, là !!!

    A quand ce prochain article ?

  • Eldermê
    21 avril 2012
     

    Sur Newt-Puzzle, quand j’aurai quelque chose de nouveau à présenter. Comme je reprends complètement le code que j’avais écrit il y a quelques années, pour l’instant l’application ne fait plus grand chose : là j’en suis à afficher une fenêtre vide, ce qui ne donne pas encore beaucoup de matière pour un article ;)

    Cela va relativement vite quand il y a des morceaux que je peux récupérer directement de l’ancien code de Newt ou d’autres que je prends de mon autre projet qui lui est beaucoup plus propre (forcément, je n’y ai pas refait toutes les erreurs que j’avais faites pour Newt). Cela dit, je ne sais pas trop quand est-ce que je pourrai faire des screenshots plus passionnants qu’un fond tout noir. Dans la semaine qui vient, j’espère.

 

Réagissez

Vous pouvez utiliser ces balises : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
 
 
 

© 2012 Eldermaeblog | Joyeusement propulsé par WordPress