31 points par GN⁺ 2023-11-26 | 1 commentaires | Partager sur WhatsApp

Retrouver le plaisir de coder : surmonter le burnout grâce au développement de jeux

  • Une plainte fréquente dans la communauté des développeurs : la passion du code s’est éteinte
  • Une astuce pour sortir du burnout : créer son propre jeu pour reprendre goût au code
  • Partage d’une expérience personnelle sur la manière dont le développement de jeux a donné envie de se replonger dans la programmation
  • Recommandation de développer des jeux avec le langage Go et la bibliothèque Ebitengine

Principes de base du développement de jeux

  • Comme au cinéma, un jeu est un ensemble d’images (frames) qui se succèdent rapidement
  • Un jeu génère des images en temps réel et modifie la frame suivante selon les entrées de l’utilisateur
  • Un jeu est fondamentalement une boucle infinie, répétant le rendu des images et la mise à jour de la logique

Configuration du projet

  • Création d’un module Go et ajout de la bibliothèque Ebitengine
  • Exécution d’une fenêtre vide avec une implémentation minimale de l’interface du jeu

Chargement des assets

  • Recommandation d’utiliser du programmer art ou des assets gratuits
  • Chargement des assets dans le code avec le package embed

Dessin des images

  • Toutes les opérations de dessin sont effectuées dans la méthode Draw
  • Utilisation de la méthode DrawImage de ebiten.Image pour dessiner une image sur une autre
  • Positionnement, rotation et redimensionnement d’une image via la structure DrawImageOptions

Logique du jeu

  • La structure Game conserve l’état du jeu et le modifie via la méthode Update
  • Exemple : conserver la position du joueur sous forme de vecteur (X, Y)

Mouvement

  • Implémentation du mouvement en mettant à jour la position du joueur dans la méthode Update
  • Modification de la position du joueur selon les entrées clavier

Timer

  • Implémentation d’un timer pour faire évoluer la logique du jeu en fonction du temps
  • Utilisation d’une structure Timer pour déclencher des événements à intervalles précis

Objets du jeu

  • Encapsulation et gestion des objets du jeu, comme le joueur
  • Chaque objet possède ses propres méthodes Update et Draw

Création d’objets

  • Création d’objets météores et apparition sur les bords de l’écran
  • La structure Game suit les objets météores

Tir de balles

  • Implémentation de la logique de tir et d’un timer de cooldown
  • Le Player crée les balles et le Game les suit

Détection de collision

  • Implémentation d’une structure Rect et d’une méthode Collider() pour détecter les collisions
  • Vérification des collisions entre objets dans la méthode Update du jeu

Avis de GN⁺

Le point le plus important de cet article est qu’il propose aux développeurs une manière de surmonter le burnout et de retrouver leur passion pour le code. Le développement de jeux offre l’occasion de pratiquer ses compétences en programmation à travers un projet créatif et amusant, tout en apprenant un nouveau langage ou une nouvelle bibliothèque. Cet article peut inspirer les développeurs à reprendre le code comme loisir, et suscite l’intérêt en expliquant une approche de base du développement de jeux avec le langage Go et la bibliothèque Ebitengine.

1 commentaires

 
GN⁺ 2023-11-26
Réactions sur Hacker News
  • Le premier utilisateur préfère écrire un feu d’artifice ou une petite simulation de particules pour tester les performances lorsqu’il apprend un nouveau langage ou une nouvelle API graphique. Lorsqu’il a expérimenté avec Go et Ebitengine en 2021, il a été profondément impressionné par les performances surprenantes, capables de déplacer beaucoup de pixels à 60 fps, ainsi que par la simplicité d’utilisation.
  • Le deuxième utilisateur a travaillé l’an dernier sur le développement d’un jeu en Go avec g3n-engine. Il l’a choisi parce qu’il aime Go et voulait l’apprendre, et après une expérience passée en développement de jeux 2D, il voulait aussi se lancer dans la 3D, d’où le choix de g3n-engine. Créer un jeu est une expérience bien plus difficile et gratifiante qu’un travail rémunéré, et il y a constamment de nouvelles choses à apprendre.
  • Le troisième utilisateur souligne que l’API Ebiten pour Go est excellente et que son design d’API peut être une source d’inspiration. Il mentionne aussi l’usage d’un compilateur personnalisé qui convertit Go en C++ pour améliorer les performances en développement de jeux, accéder aux API C/C++, et offrir de bonnes performances aussi en WebAssembly. Ce compilateur inclut également une expérimentation qui génère du GLSL à partir du code Go.
  • Le quatrième utilisateur n’est pas développeur Go, mais suit depuis longtemps un YouTuber/streamer Twitch qui crée des jeux avec Go. Ce streamer développe un petit MMO en Go et réalise une version web avec OpenGL et WASM. Bien qu’il comprenne que le garbage collector de Go est très robuste, beaucoup de gens demandent encore : « pourquoi le faire en Go ? »
  • Le cinquième utilisateur réagit uniquement au début de l’article et suggère que, si l’auteur traverse le burnout qu’il décrit, il vaudrait mieux faire évoluer ses centres d’intérêt plutôt que de « reconquérir » son hobby. Cela peut être le signe que le cerveau stagne, et sans forcément s’éloigner de la programmation, c’est peut-être le moment d’approfondir davantage la théorie de l’informatique.
  • Le sixième utilisateur, en tant qu’utilisateur d’Ebitengine depuis plusieurs années, se dit satisfait de son expérience. Si l’on veut voir le code source de jeux créés avec Ebitengine, il recommande de consulter la liste awesome-ebitengine. Tous les jeux listés sur son profil itch.io ont été créés avec Ebitengine et sont open source.
  • Le septième utilisateur développe actuellement un jeu avec Ebitengine et trouve l’expérience rafraîchissante.
  • Le huitième utilisateur s’interroge sur le fait de savoir si Go est une plateforme adaptée à l’écriture de gros jeux, avec suffisamment de bibliothèques et de performances pour justifier son usage plutôt que C#.
  • Le neuvième utilisateur se demande si Go est un langage adapté à la création de jeux à cause du concept de goroutines, et pense essayer un jour.
  • Enfin, une remarque mentionne un jeu basé sur Ebitengine et signale qu’une phrase sur « à quoi pourrait ressembler un exemple de composant Sprite » est coupée et doit être corrigée.