Créer et Gérer sa bibliothèque

 

En code, dans tout les langages il est nécessaire de se constituer une bibliothèque de codes.

la principale raison a cela est qu’il est inutile de réinventer la roue a chaque fois.

cela évite des pertes de temps ou l’on se dit j’ai déjà fait ça dans un code mais lequel ?

voir de se reprendre la tête a recoder quelque chose qu’on a déjà codé

seulement voila, comment s’y prendre ?

lorsque je rencontre un problème mathématique par exemple et que j’arrive a le résoudre je fais une fonction de la formule et je la sauvegarde seule sur mon disque dur.

j’ai un dossier nommé functions dans laquelle je sauve toute mes fonctions le jour ou j’ai a nouveau besoin de résoudre le même problème je n’ai plus qu’a prendre la fonction dans la bibliothèque et faire un copier coller dans mon code.

il est aussi possible par exemple en lua d’ajouter la ligne

require “functions/mafonction.lua” pour ajouter directement la fonction depuis la bibliothèque.

il est important de bien nommer les fichiers afin qu’il soit simple de se souvenir de quelle fonction il s’agit.

j’utilise aussi pastebin ce qui permet d’avoir un moyen de les partager et d’y accéder a tout moment cela permet aussi d’avoir une sauvegarde en cas de crash de disque dur.

par exemple mon pastebin est consultable a l’adresse : https://pastebin.com/u/casencty j’y poste mes fonctions dans le dossier gamecodeur.

enfin il existe des logiciels permettant d’organiser ses morceaux de codes. ce qui permet de les retrouver facilement.

par exemple http://www.snippetmanager.net/ propose un logiciel freeware(gratuit) pouvant servir a gérer ses codes assez simplement.

 

voila j’espère que cet article vous aider a a organiser votre bibliothèque de codes et a vous y retrouver facilement.

 

case.

 

 

Ecrire un code idiomatique (avec Javascript)

Hello everybody,

ces derniers temps, je suis amené à regarder de plus en plus de code Javascript lié au jeu vidéo et il y a quelque chose qui me frappe. La plupart des GameDev Javascript que je croise sont d’anciens développeurs C/C++/C# et essayent à tout pris de garder leurs habitudes de programmation. Je trouve cela dérangeant, car Javascript possède tout un tas de concept intéressant, mais trop peu exploités par les développeurs de jeux. Je vais donc essayer de vous montrer comment écrire un code idiomatique en Javascript.

Alors, déjà, que veut dire idiomatique ? On va qualifier un code d’idiomatique lorsqu’il s’efforce de respecter la philosophie (la manière de faire) du langage de programmation dans lequel il est écrit. Autrement dit, il est possible d’écrire le même programme quasiment de la même façon en C#, Python et Javascript, mais chacun de ces langages possèdent ses spécificités qu’il s’agisse de structure de données particulières ou de différences dans la bibliothèque standard. Il est intéressant de s’approcher le plus possible de l’idiome du langage utilisé, cela permet en général d’avoir un code plus propre, plus clair (donc plus simple à maintenir) et parfois plus performant. Je vous propose une petite démonstration avec la réécriture d’un bout de programme Javascript.

Il y a peu de temps, j’ai rencontré le bout de code suivant (que j’ai adapté pour ce contexte) :

var players = [
  { x: 20, y: 20, life: 100 },
  { x: 60, y: 40, life: 100 }
];

var players_alive = [];

for (var i = 0; i < players.length; i++) {
  players[i].x -= 10;
  players[i].y -= 10;
  players[i].life -= 50;

  if (players[i].life > 0) {
    players_alive.push(players[i]);
  }
}

Ce code est volontairement simplifié, normalement il y a beaucoup plus de données et d'opérations. ;)

Pour expliquer vite fait la logique, on a un ensemble de joueurs et une explosion se produit, les joueurs sont projetés en arrières et perdent de la vie (selon leur position dans le vrai code, simplement la moitié ici).

Ce code, bien que parfaitement valide, a plusieurs problèmes, attaquons nous au premier : var.

var était autrefois la construction par défaut pour créer une variable et les développeurs C# ont tendances à le confondre avec le var de C#. Maintenant en JS, on essaye de jamais l’utiliser, car on a deux meilleures constructions : let et const. La première va nous permettre de créer une variable local qui sera mieux scopés dans son block de déclaration (il y avait des soucis avec var à ce niveau-là), la deuxième va nous permettre de créer une constante (une variable que l’on ne pourra pas réassigner). Dans un monde parfait, tout est const, cela évite les mauvaises surprises au fur et à mesure du programme et seule les données qui doivent absolument changer vont passer en let.

Une fois cela modifiée, il nous reste le plus gros problème: for. Je vais être honnête avec vous, une boucle for je trouve cela extrêmement chiant à lire. On est obligé de lire l’intégralité de la boucle pour espérer comprendre la volonté du développeur, c’est super relou. On va donc se tourner vers la programmation fonctionnelle pour essayer d’encapsuler les actions dans des fonctions. Pour l’instant, nous avons le code suivant :

const players = [
  { x: 20, y: 20, life: 100 },
  { x: 60, y: 40, life: 100 }
];

const players_alive = [];

function move_player(player, distance) {
  player.x -= distance;
  player.y -= distance;
  return player;
}

function damage_player(player, damage) {
  player.life -= damage;
  return player;
}

function is_alive(player) {
  return player.life > 0;
}

Okay, nos actions sont encapsulées et sont réutilisables. Maintenant, pour pouvoir itérer on va utiliser les second order functions. Ce sont, globalement, des fonctions qui vont nous permettent de boucler sur une structure de données afin d’effectuer un type d’action. Pour le déplacement et les dégâts, je veux juste changer les valeurs de chaque player, je vais donc mapper une nouvelle valeur (va la fonction map) .

const players = [
{ x: 20, y: 20, life: 100 },
{ x: 60, y: 40, life: 100 }
];

const players_alive = [];

// On garde en tête les fonctions présentés plus haut.

const updated_players = players.map(player => damage_player(move_player(player)));

Héhé, j’aimerais voir votre tête en ce moment. 🙂

Pour info, `x => y` c'est juste un moyen plus court pour écrire une fonction.

Cela peut sembler déroutant au début, mais en réalité ça se lit très facilement :

“updated_players correspond aux valeurs mapper de players où damage_player et move_player sont appelés sur chaque player”.

C’est aussi simple que ça. On peut appliquer une logique similaire pour garder les joueurs encore en vies, on voudra donc appliquer un filtre grâce à la fonction `filter`.

// On garde en tête les fonctions présentés plus haut.

const players_alive = updated_players.filter((player) => { is_alive(player) });

Là c’est sûrement la plus claire de toutes :

“players_alive correspond aux updated_players en vies”.

Toutes ces modifications nous donnent le code final suivant :

const players = [
  { x: 20, y: 20, life: 100 },
  { x: 60, y: 40, life: 100 }
];

function move_player(player, distance) {
  player.x -= distance;
  player.y -= distance;
  return player;
}

function damage_player(player, damage) {
  player.life -= damage;
  return player;
}

function is_alive(player) {
  return player.life > 0;
}

const updated_players = players.map(player => damage_player(move_player(player, 10), 50));
const players_alive = updated_players.filter(player => is_alive(player));

 

C’est quand même classe non ? En plus, toutes les actions sont réutilisables, on s’oriente donc vers un code plus modulaire et ça, c’est bien.

Ceci conclus cet article, n’hésitez pas à le relire et surtout à tester par vous-même, car c’est déroutant la première fois. Au besoin, je suis souvent sur le Discord GameCodeur.

Tchouss !!

Les collisions

J’ai constaté qu’il y a souvent des questions relatives aux collisions. J’ai donc créé 3 petits programmes en love2d/lua qui présentent des algorithmes de collisions.

N’oubliez pas que les fichiers que je vous donne, étant en .love, peuvent être dézippés pour accéder aux sources. Pour ceux qui ne savent pas encore comment faire, il leur suffira de renommer le fichier en remplaçant .love par .zip. Et pour que ça soit possible, il faut qu’il aient désactiver la case “Masquer les extensions des fichiers dont le type est connu”.

Revenons aux collisions.

  • Les collisions par cercles peuvent également être nommée collisions par distance, voir par proximité. Si la distance entre les centres des objets sont inférieurs à une certaine valeur (en général la somme des rayons de deux cercles) alors on considère qu’il y a collision.
  • Les collisions rectangulaires prennent pour principes de vérifier si les coins d’un rectangle sont à l’intérieur des coins d’un autre rectangle.
  • Et les collisions de polygones. Pour ce faire, j’ai utilisé l’algorithme dit du Héron. Algo qui compare des aires pour déterminer si un point P est dans un triangle [ABC]. Je me suis basé sur un article sur Wikipedia, cherchez la méthode du Héron.

Voici le lien Dropbox du dossier contenant les fichiers : Collisions

Bon code à vous !

Lua, les tables.

L’un des aspects les plus intéressants de lua sont les tables. Elles sont vraiment pratiques et honnêtement j’aimerais avoir un système aussi simple à utiliser dans la plupart des langages.

Mais pour bien les utiliser, il faut connaître les fonctions qui les accompagnent et aussi comment les exploiter.

J’ai donc commis un petit fichier .lua que j’ai commenté pour tenter d’expliquer l’usage de ces tables en essayant de mettre un maximum d’information sur leur création et leur exploitation.

Voici un lien dropbox pour charger ce fichier : tables.lua

Tout n’y est pas dis, mais il y a l’essentiel. Avec des exemples commentés.

Quoi qu’il en soit, si vous avez des questions à poser, n’hésitez pas !

Nouvel atelier : Générer un donjon par programmation

L’atelier Générer un donjon par programmation est maintenant disponible.

– Comprenez le principe de la génération procédurale (un concept souvent abordé de manière ardue mais qui est ici enfin simple à comprendre…)
– Découvrez le jeu indépendant (et millionnaire), Binding of Issac, qui m’a inspiré cet atelier
– Découvrez comment générer la carte d’un donjon, salle par salle, comme dans le célèbre jeu Binding of Isaac
– Programmez, pas à pas, la génération du donjon (schémas à l’appui !)
– Affichez la mini map du donjon, avec les salles et leur interconnexion (les futures portes)

Vous allez être capables de coder ça :

Générer donjon

Au total 1h30 de formation, en 9 vidéos faciles à suivre. Je filme mon écran et je vous explique tout !

Accédez à l’atelier maintenant.

Prérequis : Nécessite d’avoir suivi l’atelier : Formation aux bases de la programmation en Lua

La suite, bien sûr, sera d’explorer ce donjon pour de vrai ! A suivre…

Le même atelier mais en C# ?
OUI c’est possible ! La partie C# se prépare, elle sera publiée séparément sous forme d’un atelier d’initiation à Monogame !

Générez un donjon par programmation ? Facile !

L’atelier Générer un donjon par programmation a commencé !

Trois vidéos ont été ajoutées aujourd’hui.

Dans cet atelier :

  • Vous apprendrez le principe général de la génération procédurale
  • Vous apprendrez à créer un algorithme capable de générer un donjon comme celui de Binding of Isaac
  • Vous programmerez cet algorithme en Lua, et en C#.

Accéder à l’atelier

Cet atelier est réservé aux membres PREMIUM.
Si vous êtes membre gratuit, vous avez accès à un extrait de l’atelier.

Les bases d’un Roguelike en 95 lignes de code

J’étais très énervé ce matin en regardant les offres d’emploi sur l’AFJV, je vous explique pourquoi… Et du coup j’ai codé les bases d’un Roguelike en vrai code, et en seulement 95 lignes de programme… Je vous montre mon écran et je code devant vous ! Depuis ça va mieux !

Je vous présente aussi à la fin une offre pour rejoindre ma communauté.

★ Rejoignez mon école de jeux vidéo en ligne :
https://www.gamecodeur.fr/compte-dadherent/niveaux-dadhesion/

☛ Abonnez-vous à ma chaîne Youtube :
http://bit.ly/1WhMrau

★ Téléchargez mon guide “Comment devenir programmeur de jeux vidéo” : http://bit.ly/1oxg1Os

☛ QUELS SONT LES DOMAINES DANS LESQUELS VOUS SOUHAITEZ QUE JE VOUS AIDE ?
Répondez-moi sur http://goo.gl/forms/zUoFcMdlcv

Les 2 premiers cours sont en ligne

Le 2ème cours du 1er module (Apprendre à programmer un jeu vidéo) est en ligne !

Vous y apprendrez à installer les logiciels nécessaire pour créer le jeu du mois (un Shoot’em up complet !).
Cette semaine on passe aux choses sérieuses car je suis en train d’enregistrer le cours sur les variables, les boucles, etc. Vous saurez programmer d’ici la fin du mois…

Cliquez-ci pour accéder au 1er module de formation

Si vous n’avez pas encore adhéré à la Gamecodeur Indie School, c’est le moment : cliquez-ici pour adhérer.

Comment “vraiment” apprendre à programmer des jeux vidéo…

banniere-article-binding-broforce

Bonjour, je suis David Mekersa, je suis programmeur depuis plus de 25 ans et développeur de jeux vidéo professionnel depuis 2008. Je suis auteur de nombreux jeux vidéo distribués dans le monde entier. J’ai appris seul à programmer des jeux vidéo et je suis une personnalité reconnue dans l’industrie.

Vous avez vous aussi le rêve d’apprendre à créer des jeux vidéo, mais vous ne savez pas par où commencer ? Peut être avez vous déjà essayé d’apprendre par vous même et trouvé cela trop compliqué.

Vous avez pourtant suivi tous les conseils que vous pouvez trouver par ci par là, vous invitant à suivre des tutos, ou a installer tel ou tel moteur de jeux vidéo. On vous a dit que c’était facile mais à la fin, vous n’avez pas vraiment appris, vous ne savez toujours pas comment programmer un jeu vidéo. vous vous dites que vous n’êtes pas fait pour ça, que vous n’êtes pas assez bon en math ou tout autre mauvaise raison qu’on vous rabache à longueur de journée depuis votre plus jeune âge.

Vous n’êtes pas seuls à échouer, c’est la méthode qui est en cause, pas vous !

Sachez que vous n’êtes pas les seuls à échouer. La plupart de ceux qui essaye échouent, comme vous. Car il font une erreur, que tout le monde commet… J’y viens…

Alors rassurez-vous, le problème ne vient pas de vous. Il vient des méthodes, la plupart basées sur le même principe : installer un logiciel sois disant simple à comprendre, et écouter un tutorial vous inonder d’informations toutes aussi compliquées à comprendre les unes que les autres.

Ce dont vous avez besoin, c’est d’apprendre les différents fondamentaux indispensables, sans vous encombrer de tout ce qui vous est inutile de comprendre au départ.

Commencer par Unity… c’est une erreur

Par exemple, commencer par Unity est une erreur. C’est un outil puissant, très puissant. Si on n’a jamais programmé, c’est une hérésie que de commencer par cela à moins d’avoir des talents innés. En effet, réaliser des choses simples, en Unity, nécessite d’appréhender des 10ènes de concepts, inutiles quand on démarre, et c’est très décourageant. Unity permet de créer des choses complexes très simplement, mais pas le contraire. De plus, ce que vous apprendrez avec Unity ne vous servira pas en dehors de Unity, mis à part la partie C# qui parfois devient secondaire tant on passe de temps à se battre avec l’éditeur lui même…

Il y a peu de fondamentaux à apprendre pour savoir programmer. J’en enseigne 5 avec ma méthode (décrite ici) : Les variables, les tableaux et les listes, les boucles et les structures de contrôle, les fonctions, les objets.

Puis, pour programmer un jeu, 5 autres fondamentaux : afficher une image, la déplacer, l’animer, jouer des sons, gérer les entrées (clavier/souris/pad).

10 fondamentaux seulement ? Est-ce que ça marche ?

En enseignant ces 10 fondamentaux à de jeunes débutants, je me suis rendu compte qu’ils avaient appris à programmer en quelques heures. Au bout de quelques jours, ils étaient capables de créer leur premier jeu vidéo.

J’ai appliqué ces principes pour créer une formation complète, dispensée au sein de mon école en ligne, et vous permettre vous aussi d’apprendre aussi facilement à programmer et créer des jeux vidéo.

A la fin de cette formation vous aurez assimilé tous les principes fondamentaux de la programmation, sans effort, sans prise de tête, et vous aurez été capable de créer 1 jeu vidéo complet et pas des moindres puisqu’il est inspiré d’un jeu qui a fait gagné des millions de dollars à son créateur.

A la fin de la 1ère journée vous aurez configuré votre ordinateur et installé tous les outils nécessaires pour créer un jeu vidéo. Ces outils sont gratuits. Dès le premier jour, vous saurez déjà programmer, et vous aurez acquis la confiance en vous nécessaire pour créer un premier jeu vidéo. Et nous créerons ce jeu vidéo ensemble !

Ce n’est pas pour tout le monde, il va falloir travailler !

Bien entendu, pour atteindre cet objectif vous allez devoir être attentif et persévérant. Ne pensez pas progresser sans un minimum de motivation. Mais si vous êtes motivés alors vous réussirez j’en suis sûr et je vais vous y aider.

Dans la 1ère partie de cette formation je vous expliquerai de manière claire et simple ce qu’est la programmation, ce qu’est un programme et je vous montrerai comment, en 1985, tout le monde ou presque programmait avec son ordinateur et pourquoi aujourd’hui, alors que tous les outils et toutes les informations sont disponibles sur Internet, c’est devenu si compliqué.

Dans la 2ème partie nous installerons et configurerons ensemble les outils nécessaires pour apprendre à programmer et créer vos premiers jeux vidéo. Ces outils sont gratuits. Il vous suffit d’un modeste PC ou d’un Mac. Je vous présenterai également le 1er langage de programmation que vous allez apprendre, le Lua. C’est un langage puissant et facile à comprendre. Aujourd’hui de nombreux jeux vidéo à succès sont programmé en Lua et il vous ouvrira les portes de tous les autres langages de programmation.

Dans la 3ème partie je vous enseignerai 5 grands fondamentaux qui feront de vous un véritable programmeur, quelque soit votre expérience, même si vous partez de zéro. Vous apprendrez ce qu’est une variable et une expression. Vous découvrirez les fonctions et apprendrez à en créer. Vous apprendrez aussi à donner vie à vos programmes grâce aux boucles et aux structures de contrôle. Ensuite viendront les tableaux et les listes, indispensables pour créer toutes sortes de jeux vidéo. Enfin, vous apprendrez les rudiments de la programmation objet. A ce stade vous aurez déjà économisé des heures de travail et de galère passés à suivre des tutoriaux ou à lire des livres qui bien souvent ont oublié ce qu’était la simplicité…

Quelques heures suffisent pour commencer à programmer des jeux vidéo

Après seulement quelques heures, à votre rythme, et en suivant mes instructions, vous aurez enfin compris comment programmer. Je vous aurai enseigné les fondamentaux de la programmation d’un jeu vidéo. Vous serez étonnés de la simplicité avec laquelle vous aurez abordé des concepts qui vous avaient semblé si compliqués jusqu’à ce jour. Encore quelques heures et vous aurez créé un premier jeu vidéo complet, que vous pourrez montrer à vos amis et à vos proches.

Vous serez alors suffisamment indépendants pour vous lancer dans la grande aventure de la création de jeux vidéo et avec mes ateliers mensuels rien ne vous résistera.

Cette formation est gratuite

Je vous parle de tout ça, mais le mieux est de vous y mettre. Je vous offre cette formation !

➡ Cliquez-ici pour commencer la formation gratuitement