Forum Programmation.c++ Mon jeu fonctionne sur Linux

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
19
15
mar.
2013

Hey salut ! Cela fait quelques semaines que j'avais sollicité les conseils de la communauté concernant un jeu que j'avais développé sous Windows en C# avec XNA. J'avais globalement terminé d'écrire l'essentiel du code, mais finalement je souhaitais porter tout le projet sur Linux pour de nombreuses raisons. La première est le manque cruel de shoot'em up sous Linux et la deuxième car j'apprécie énormément ce système d'exploitation. C'est mon premier projet en programmation et mon premier jeu, donc j'espère que vous ne serrez pas dur dans votre critique car je suis un grand novice en la matière.

J'ai donc choisi le C++ et réécrire entièrement le code a été un long travail mais c'est surtout la motivation qui a été mise à rude épreuve. Je ne connaissais absolument rien au C++, cependant lire un livre était trop rébarbatif pour moi. C'est vrai, je suis un débutant en programmation, mais j'ai quand même de bonnes bases en PHP et en C# donc je n'avais besoin que de regarder comment le C++ fonctionne dans sa généralité. Beaucoup m'ont suggéré Python et Pygame, mais je n'aime pas trop ce langage de programmation, bien qu'il semble agréable à utiliser. Pourquoi ? Parce que la syntaxe me semble trop simpliste et que je n'ai trouvé aucun bon IDE. Par exemple, pour le C++, j'utilise l'excellent Netbeans et cela me convient très bien. Pour info j'utilise SFML 2 que je trouve très pratique et assez proche de XNA. Actuellement, j'ai écris une grosse partie du code et avant d'aller plus loin dans la création des niveau, j'ai préféré vérifier que chaque élément du moteur fonctionnait correctement. J'en ai profité pour ajouter quelques nouveautés comme la gestion des ombres pour chaque sprite, modification du hud, mise en place d'un système de profil etc.

Je n'ai pas grand chose à vous proposer sous la main, si ce n'est qu'une courte vidéo qui montre rapidement que le jeu fonctionne. La vidéo n'est pas d'une grande qualité mais je suis encore un débutant sous Linux et j'ai du mal à bien enregistrer mon bureau (j'utilise recordmydesktop). Étrangement, il m'est impossible d'enregistrer le son (carte son en hw:0,0) et j'ai eu beau chercher dans tous les sens avec ffmpeg etc. il semble que se soit un problème lié avec ArchLinux. Je ne serais en dire plus.

Bref, n'hésitez pas me laissez votre avis ou conseils si vous en avez. J'espère pouvoir terminer le projet d'ici quelques semaines et de vous en faire profiter par la suite, car il sera naturellement gratuit.

Video : http://www.youtube.com/watch?v=bHqBsJEb0RE

  • # Que de chemin parcouru

    Posté par  . Évalué à 3.

    Je viens de regarder la vidéo. Séquence rétro :-)

    Je suis issu de la génération Rémi HERBULOT, Philippe ULRICH, Patrick DUBLANCHET, etc. À l'époque faire un jeu comme celui de cette entrée de forum, ce n'était clairement pas à la portée d'un débutant. Même bon.

    Par contre à l'époque on ne se posait pas la question de savoir en quel langage on allait coder. ASM et/ou C, point. Déjà une semaine de gagnée.

    • [^] # Re: Que de chemin parcouru

      Posté par  (site web personnel) . Évalué à 2.

      Heureusement que la technologie nous permet de créer ce genre de chose facilement. Honnêtement le plus dur, aura été de savoir quel langage de programmation utilisé. Y en a tellement… et certains ne sont pas vraiment portable.

  • # Joli !

    Posté par  (site web personnel) . Évalué à 4.

    Un jeu complet comme ça, bien joué !
    As-tu beaucoup de niveaux ? Beaucoup d'armes ? D'enemis ?
    Comment compares-tu ton jeu à Chromium ?
    D'où provient la musique ?

    Et aussi, comment as-tu créé ton moteur de jeu ? (Je suis intéressé par la représentation en mémoire, le design, etc).

    • [^] # Re: Joli !

      Posté par  (site web personnel) . Évalué à 6. Dernière modification le 15 mars 2013 à 23:28.

      Le jeu comporte 5 niveaux (îles tropicales, désert, ville futuriste, base militaire, ville futuriste de nuit) et le joueur de dispose de deux armes dont la principale peut évoluer sur trois niveaux.

      Il y a environ 13 types d'ennemis avec un mode de tir propre. Pour le reste, les musiques sont composées par mes soins, donc impossible à trouver autre part .

      La création du moteur est fait-maison et reste assez simple mais efficace. Je n'ai pas grand chose à dire, si ce n'est que j'ai utilisé tout bonnement SFML 2 et que j'ai crée une classe pour chaque élément du jeu, par la suite il suffit de faire cohabiter le tout dans une logique.

      Niveau mémoire, le titre ne consomme pas beaucoup de mémoire (environ 40 mo) et niveau ressource à sa joue à 3% / 4% de charge CPU sur un double cœur. Sur un netbook peu puissant, c'est aux alentours de 30 % à 40%.

      • [^] # Re: Joli !

        Posté par  (site web personnel) . Évalué à 3.

        code et GFX et musique ? Chapeau !

        Pour la mémoire, en fait, je demandais si tu gérais tout au pixel près, tel qu'affiché, ou si tu avais une autre représentation, par exemple un tableau de 6x10 tuiles (dimensions au pif) pour le fond.

        • [^] # Re: Joli !

          Posté par  (site web personnel) . Évalué à 2.

          J'aurais préféré fonctionné avec des tuiles mais j'ai simplifié au mieux. Puisque je n'y connais pas grand chose au pixel art, j'ai dessiné les décors directement. Faire des tuiles auraient demandé beaucoup trop de travail. Difficile d'apprendre à programmer et dessiner en même temps. Puis un graphiste est venu m'aider et a redessiner le tout, ce qui donne ce résultat.

  • # Impressionné

    Posté par  . Évalué à 6.

    Je suis impressionné du résultat. En plus pour un premier jeu.

  • # Accès au code ?

    Posté par  (site web personnel) . Évalué à 3.

    Salut

    Vraiment pas mal du tout, même carrément génial, surtout si tu as tout fait tout seul.

    Comme j'imagine que tu débutes dans la programmation, c'est surement un aspect auquel tu n'as pas pensé, mais le code sera-t-il libre ? (i.e sous licence GPL, MIT ou autres, à la rigueur je pense qu'il y aura du monde ici pour t'aider à choisir si jamais ça t'intéresse)

    En dehors de l'aspect purement idéologique, je vois plusieurs avantages

    1 - vu que le projet est plus que réussi visuellement, et que je suppose que tu es encore dans tes études (ça ressemble aux projets de groupe B1 de l'année dernière à Supinfo :) ), avoir un lien sur ton CV pointant sur une petit page github/page perso montrant ce projet et le code pourrait être un plus lors de tes recherches de stages (ceux qui ici ont plus d'expérience que moi des DRH and co pourront sûrement confirmer), en plus un jeu libre de qualité, ça fera parler de lui i.e ça augmentera ça visibilité et la tienne par la même occasion sur les moteurs de recherche

    2 - un feedback sur ton code, souvent quand on commence à coder, il y a certaines petites erreurs ou des conseils qu'on aimerait recevoir, avoir accès au code, permettrait à d'autres de pointer ces améliorations possible

    3 - recevoir de l'aide pour corriger les bugs/ajouters des nouvelles fonctionnalités (multi-joueurs etc.) , ou porter le code (je sais par exemple que la SDL est portable sous Android, je ne sais pas pour la SFML, ce jeux sur android ce serait génial)

    4 - permettre aux jeunes programmeurs après-toi d'avoir de quoi s'inspirer

    Si tu as besoin d'aide sur comment faire cela ou des questions, ça me ferait vraiment plaisir de pouvoir t'éclairer.
    Après évidemment si tu y avais déjà réfléchi et que ça ne t'intéresse pas, personne ne t'en voudras, c'est déjà super que tu aies pris le temps de porter le jeux sous linux.

    • [^] # Re: Accès au code ?

      Posté par  (site web personnel) . Évalué à 1.

      Pour la licence, je n'ai rien encore décidé et j'avoue que je ne me suis pas encore posé la question. Je pense que j'étudierais tout ça, une fois le projet achevé.

      Par contre, je ne suis pas du tout étudiant. Je suis juste un amateur et je n'ai aucun diplôme en informatique, bien que j'aimerais travailler dans le programmation. J'ai réalisé ce jeu par passion, curiosité et aussi parce que j'aimerais apporter ma touche personnelle au monde des jeux indépendants.

      • [^] # Re: Accès au code ?

        Posté par  . Évalué à 2.

        C'est un travail remarquable et, à dire vrai, qui me donne envie de yumer/apt-get le package et d'aller mettre les doigts dedans. :-) Je t'encourage fortement à choisir une licence libre, voire GPL, et d'ouvrir ton code à la communauté, même si c'est toujours difficile de « franchir le pas » la première fois.

        Ce que je te conseille de faire puisque ton projet est déjà bien avancé est de mettre en place une infrastructure officielle pour la gestion des « third parties » permettant aux gens de bâtir leurs propres niveaux si cela a un sens ainsi que leurs propres plug-ins sans avoir à forker. Dès que c'est fait et que tu as choisi la licence, mets tout cela dans un dépôt GIT. Ne t'inquiète pas pour la pérennité : tu resteras toujours aux yeux de la communauté l'auteur original ! :-)

        Si tu fais ceci, l'avantage est que même si tu décides de ne plus t'en occuper pour un moment (on a tous une vie, après tout), les distributions pourront quand même directement le packager sans se poser de questions, et le cercles de tes utilisateurs va s'agrandir de lui-même.

        • [^] # Re: Accès au code ?

          Posté par  (site web personnel) . Évalué à 1.

          Merci pour tes conseils, je vais y réfléchir. C'est vrai que c'est une bonne idée de le rendre libre et cela pourrait être une bonne manière d'apprendre de mes erreurs. Je préviendrais de la licence que je voudrais utiliser une fois le jeu terminé.

          • [^] # Re: Accès au code ?

            Posté par  . Évalué à 2.

            Je préviendrais de la licence que je voudrais utiliser une fois le jeu terminé.

            Sois averti cependant qu'il ne le sera jamais. Le développement d'un soft est en général asymptotique et il y a toujours deux ou trois choses qu'il faudrait peaufiner, améliorer, compléter, etc. avant de considérer le logiciel comme terminé. Si tu ne te fixes pas un périmètre clair dès le départ au delà duquel tu publieras ton logiciel vaille que vaille, il risque bien de ne jamais sortir. :-)

            Tu peux également publier ton code en tant que release beta. WindowMaker, par exemple, a totalement assumé cela en publiant cette année la version 0.95.4 alors que le projet a démarré en 1997. :-)

  • # J'avoue que je suis curieux

    Posté par  . Évalué à 2.

    Pourquoi le réécrire en C++? Il me semble que le C# fonctionne sur Linux avec le projet Mono.
    Après effectivement il n'y sans doute pas les mêmes API qu'avec C# sous Windows, il y aurait donc eu un portage à faire..

    • [^] # Re: J'avoue que je suis curieux

      Posté par  (site web personnel) . Évalué à 1.

      Il y a Mono et MonoGame sauf que c'est bugué comme pas possible. Pour faire simple, j'ai passé une journée à rendre compatible le jeu avec MonoGame sous MonoDevelop. Sauf qu'une fois le jeu lancé, ce dernier s'affiche dans une fenêtre de 640x480. Impossible de modifier la résolution ! Je suis parti demander de l'aide sur le forum officiel mais pas de réponses (…), je suis finalement allez sur le git pour discuter avec des gens qui ont le même problème sous Linux et il semble que se soit un bug lié à OpenTK. Hors, OpenTK est à l'abandon sous Linux. L'équipe de MonoGame a surement sorti ou pas un patch de leur propre version d'OpenTK mais je n'ai pas le temps d'attendre. Puis j'avais envie de développer un jeu dans un langage natif sans demander de framework comme Mono ou Java. Le C++ était tout indiqué ! Il suffit d'avoir les lib de SFLM2 sur son ordinateur, et le jeu se lance. De plus, le jeu devient moins gourmand et tourne sur de petites configurations.

      J'espère que les programmeurs qui se pose la question "est-ce que je peux porter mon jeu programmé en C# / XNA pour Linux" pourront s'inspirer de mon expérience, ça leur évitera de perdre une journée à adapter le code pour rien au final. Cependant, il est vrai que XNA est mieux élaboré mais il y a certaines choses plus souple avec SFLM2.

      Si je dois continuer le développement d'autres (car j'en ai pas mal en tête) sous Linux, se sera exclusivement en C++. Je ne vois pas d'autres solutions pour le moment, mis à part le Java.

      • [^] # Re: J'avoue que je suis curieux

        Posté par  . Évalué à 2.

        Merci pour ton retour d'expérience.
        Pas sûr que passer de C# à C++ t'ai moins demandé de temps que débugger OpenTK, mais c'est vrai que le C++ semble un outil bien plus "aimer" sour Linux..

  • # Super !

    Posté par  . Évalué à 1.

    Bravo pour ce jeu c'est magnifique.

    Cela m'a fait penser au jeu Raptor auquel je jouais sous DOS il y a un moment déjà.

    Moi aussi je voudrais bien lire le code une fois que tu auras décidé d'une licence :)

    • [^] # Re: Super !

      Posté par  (site web personnel) . Évalué à 0.

      Et bien on peut dire que tu as l'oeil. J'étais un gros fan de Raptor à l'époque et je dois dire que quand j'ai voulu créer ce jeu, je m'en suis pleinement inspiré même si techniquement mon jeu n'est pas aussi fini.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.