Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Jeu réseau en C++] Guerre de tank

Guerre de tank est un jeu où plusieurs joueurs s'affrontent en réseau.

    1 juillet 2018 à 11:55:57

    Bonjour à tous,
    Je m'appelle Rémi Pérenne et j'aime bien faire de la programmation après les cours. J'ai réalisé Guerre de tank ainsi que ce site tout au long de mon année de 4ème et ça m'a beaucoup amusé c'est pourquoi, quand je serai grand, j'aimerai être programmeur plus particulièrement dans le milieu des jeux vidéo.
    Je suis heureux de vous présenter Guerre de tank, c’est un jeu en Client-Serveur développé en C++ avec les bibliothèques Irrlicht et SFML. Chaque équipe est constituée de plusieurs joueurs (le nombre de joueurs étant choisi par la personne qui lance le serveur) qui incarne chacun un tank. Pour gagner la partie une équipe doit avoir éliminé x joueurs de l'équipe adverse, x étant choisi par la personne qui lance le serveur. Lorsqu'un joueur est éliminé il revient au point de départ et doit patienter une dizaine de secondes avant de pouvoir continuer.

    Les fonctionnalités du client:

    • Choisir l'adresse IP et le port où se connecter.
    • Donner un pseudo qui sera visible dans la partie.
    • Le nombre de points de vie de votre tank est affiché en bas de la fenêtre.
    • le joueur peut modifier les touches avec lesquelles il se déplace.
    • le joueur peut modifier le volume des différents sons du jeu (explosion, tirs...).
    • les sons sont plus ou moins forts si la source est éloignée du joueur.
    • le joueur peut choisir de jouer avec une manette de ps4
      (je ne sais pas ce que ça donne avec d'autre manette) et une aide
      sur les touches à utiliser lui est proposé.

    Les fonctionnalités du serveur:

    • Choisir le port sur lequel le serveur sera lancé.
    • Choisir le nombre de joueurs dans la partie
    • Choisir le nombre d'élimination par équipe qu'il faut pour gagner la partie.
    • Vos différentes adresse IP sont indiquées.
    • Vous définissez les équipes une fois que tous les joueurs attendus se sont connectés.
    • Le serveur se ferme automatiquement si une partie est terminée (une des
      2 équipes a atteint le nombre d'élimination choisi).
    demo client
    demo connexion client
    demo serveur

    Télécharger les sources du client.

    Télécharger les sources du serveur


    Je suis très content du résultat que j'ai obtenu en faisant Guerre de tank mais malgré tout je sais pertinemment qu'il y a beaucoup de choses qu'il reste à améliorer donc si certains d'entre vous ont le courage de plonger dans le code source et trouve des erreurs, des bugs, des passages à perfectionner, des fautes d'orthographes... je les remercie de me les indiquer.


    Important :Je suis sous Linux et je n’arrive pas à compiler la SFML en statique donc si quelqu’un pouvait m’aider… par dessus le marché c’est compliqué pour moi de compiler pour Windows et Mac OS car je suis sous Linux donc si quelqu’un pourrait me compiler ça (avec Irrlicht et SFML en statique) et me l’envoyer je serai content.


    Merci pour votre aide future et j’espère que mon jeu vous plaira, vous pouvez aussi aller voir mon site pour plus d’information (vous remarquerez sûrement que les paragraphes précédents sont identiques sur mon site ;-)) il y a notamment 2 vidéos du jeu montrant la partie client et la partie serveur.

    -
    Edité par the_Dude 21 juillet 2018 à 14:38:06

    • Partager sur Facebook
    • Partager sur Twitter
      11 juillet 2018 à 16:28:25

      Bonjour Rémi,

      super de t'être lancé dans le développement d'un jeu de chars. J'y avais moi même pensé depuis quelques temps, mais étant actuellement étudiant (dans un autre domaine que l'informatique), je n'ai plus le temps de me consacrer à la programmation comme je le faisais à ton âge. Je ne pourrai donc pas participer au développement, ni même lire ton code source, pour l'instant ! Cependant voici quelques idées/remarques:

      - Pour la compilation, faire un Makefile (j'en ai pas vu dans les sources). Un tuto: https://gl.developpez.com/tutoriel/outil/makefile/

      - Après l'idéal, pour la portabilité, c'est quelque chose comme CMake. Tuto: https://florian-goujeon.developpez.com/cours/cmake/initiation/

      - Un exemple de fichier CMake (pas très portable pour l'instant, mais fonctionne pour le Client sous Debian avec Irrlicht et SFML installés depuis les dépôts):

      cmake_minimum_required(VERSION 2.6)
      
      project(Tanks)
      
      include_directories(/usr/include/irrlicht/)
      link_directories(/usr/lib/x86_64-linux-gnu/)
      
      add_executable(
          Tanks
          BoutonManette.cpp
          client.cpp
          decor.cpp
          Explosion.cpp
          GestionBruits.cpp
          GestionExplosion.cpp
          infoPartie.cpp
          infoPositionRotationJoueur.cpp
          Joueur.cpp
          main.cpp
          MyCamera.cpp
          MyEventReceiver1.cpp
          MyEventReceiver2.cpp
          MyEventReceiver.cpp
          MyGui.cpp
          Shoot.cpp
          TankNormal.cpp
          vector3d_operateur.cpp
      )
      
      target_link_libraries(
          Tanks
          Irrlicht
          GL
          sfml-graphics
          sfml-window
          sfml-audio
          sfml-network
          sfml-system
      ) 

      Dans un terminal, tu entres:

      cmake .

      ça te génère un Makefile tout neuf, et il te reste plus qu'à faire un:

      make

      et c'est bon.

      - Git est un outil vraiment utile, surtout si le projet est développé collaborativement. Tu pourras aussi partager ton code source sur une plateforme telle que GitHub ou GitLab.

      - Le main.cpp me parait bien trop chargé... Et ça manque de classes. Tu pourrais par exemple faire une classe Game, avec une méthode gameLoop(), etc... Tu peux t'inspirer du code source suivant (extrait d'un livre sur SFML): https://github.com/SFML/SFML-Game-Development-Book Ainsi ton code sera plus clair, plus lisible, plus facilement modifiable, plus facile à déboguer, etc...

      - Ou encore ce tutoriel: https://khayyam.developpez.com/articles/cpp/jeux/architecture/

      - A terme il faudrait que les équipes soient faites automatiquement. Tu peux d'inspirer du jeu Teeworlds par exemple, qui par ailleurs tient une liste des serveurs, c'est pratique pour ceux qui ne veulent pas lancer un serveur chez eux et ne connaissent pas personnellement d'autres joueurs.

      Mais c'est déjà super, bravo !

      -
      Edité par Tinei 11 juillet 2018 à 16:30:00

      • Partager sur Facebook
      • Partager sur Twitter
        21 juillet 2018 à 10:29:27

        Merci pour ta réponse et tout les liens que tu m'a donné je vais m’intéresser de plus près a CMake par contre pour ce qui est des amélioration du jeu et de la partie architecture je ferai plus attention dans mes projet suivant parce que j'ai vraiment la flemme de me replonger dans tout ce fouillis pour le moment ;-).

        Sinon a tu la possibilité de compiler les sources pour Windows ?

        En tout cas un grand merci pour ta réponse et désolé de ne pas avoir répondu rapidement j'étais au camping.

        -
        Edité par the_Dude 21 juillet 2018 à 10:33:41

        • Partager sur Facebook
        • Partager sur Twitter
          20 août 2018 à 10:34:16

          C'est bon j'ai enfin réussi à compiler les sources pour Windows, pour cela j'ai lancé Windows 10 dans le logiciel virtual box qui permet de faire tourner tout un OS dans une simple fenêtre, ensuite j'ai installer les bibliothèque, code blocks... pour créer un exécutable final .exe fonctionnant parfaitement sur WIndows. Cette exécutable est maintenant disponible sur mon site.
          • Partager sur Facebook
          • Partager sur Twitter

          [Jeu réseau en C++] Guerre de tank

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown