Dominique Lacombe

  • Profession : Programmeur
  • Citation préférée : Il vaut mieux poser une question et être bête 5 minutes, que ne jamais la poser et l'être toute sa vie.

Billets de larryfr

Le Grand Créateur (4)

Nous voici au début du mois de mai.

Il s'est passé plein de choses du point de vue personnel qui m'ont fait faire une petite pause dans mon projet.

Pour l'instant, j'ai réussi à coder une toute petite partie de ma nouvelle IA.
Oui, pour moi, une IA restera toujours au féminin. Ce n'est pas l'idée réductrice d'un esprit macho, bien au contraire !
Si je conçois une véritable IA, elle sera à l'image de ma femme : douce mais ferme.

Bref, revenons sur mon projet (^_^)

Je n'ai pas encore fait grand chose mais c'est beaucoup plus long que je ne le pensais.
Après tout, je n'ai pas beaucoup d'expérience dans ce domaine (^_^)

J'essaye de construire au maximum la structure de mon IA sans détruire tout ce que j'ai fait auparavant.

Mais il y a beaucoup de choses à revoir. Ce n'est pas mauvais mais simplement pas bien adapté, c'est aussi simple que ça.

Voyons ce que j'ai :

  • la liste de toutes les cités posées dont la satisfaction est comprise entre 1 et 3 inclus mais n'appartenant pas déjà à l'IA
  • la liste des cartes Nourriture qui peuvent être jouées (sans aucun autre contrôle)

Avec ça, je récupère les différentes positions où jouer la carte et j'en choisis une parmi elles (rarement plus de 2 pour les cartes Nourriture).

 

Dans mon scéma, cela ne représente que 4 points parmi environ 40 points.
Mais heureusement pour moi, beaucoup de contrôles sont similaires, donc je vais pouvoir les factoriser et sauver du temps.

 

Autre point : le design.

Pour l'instant, je n'ai aucun menu et une seule musique d'ambiance.
De plus, les graphismes utilisés ne sont pas très beau...Disons le franchement, ils sont moches comme tout.
Mais bon, je suis programmeur et non pas graphiste (^_^) J'ai donc fait des dessins par moi-même pour avoir un visuel.
Cela me permet de simplifier les contrôles et voir si j'ai bien le bon résultat.

Passons tous ces petits détails...

J'ai dans l'idée d'utiliser des objets 3D pour représenter les différents types d'environnement.
Pour l'instant, cela n'est qu'une simple idée mais je suis certain que cela est réalisable.
Bien entendu, cela demandera quelques aménagements mais je suis confiant.

Si j'arrive à faire mon IA, afficher de simples objets 3d ne devrait pas être trop compliqué (^_^)

Enfin, finissons la déjà et nous pourrons ensuite passer à cette étape.

Je pensais faire une vidéo à la fin de l'IA mais je crois que je vais en faire plusieurs pour montrer les progrés.

 

A bientôt pour de nouvelles aventures...

Le Grand Créateur (3)

Après avoir modélisé ma première IA (même si elle est pas vraiment intelligente ^^), j'ai fait un petit break, boulot oblige.

J'ai repris le développement de ma nouvelle IA. Cette fois-ci, elle sera bien plus "intelligente" que la première.

Pour cela, j'ai demandé l'aide de ma femme pour qu'elle me décrive sa manière de jouer.
Nous avons donc fait une partie où elle incarnait l'ensemble des joueurs de type IA contre moi.

Pour chaque action, elle me décrivait ce qu'elle repérait (type de terrain, objectif, etc.) et ce qu'elle éliminait et pour quelle(s) raison(s).
A partir de son raisonnement, j'ai pu dessiner la logique de mon IA.

Nous avons ensuite refait une partie mais c'était moi les IA et elle le joueur. Je jouais en appliquant quasiment à la lettre les mécaniques que j'avais noté.
Cela m'a permis de relever une lacune dans le raisonnement et quelques oublis.

Je referais une nouvelle partie pour valider les dernières modifications mais, dans l'ensemble, je pense avoir terminé cette étape.

Et si vous vous demandez comment est le résultat, il faudra attendre la prochaine vidéo (^_^)

Le Grand Créateur (2)

J'ai finalisé ma toute première intelligence artificielle !

Au début, je pensais que c'était un truc super-méga-giga compliqué mais en fait pas vraiment.
Pour résumé (et ce n'est que mon propre point de vue), il s'agit d'une sélection dans les possibilités offertes à l'ordinateur.

Ben oui, ton ordinateur ne pourra jamais te faire du café si tu ne lui as pas dit que tu lui avait ajouté l'option "machine à café".

 

Enfin, il a fallu déjà définir la manière dont l'IA allait jouer. Et pour cela, j'ai fait super simple :

1) On sélectionne une carte de manière aléatoire
2) On joue la carte de manière aléatoire
3) Si jouée, on pioche une carte de même type de la pile face cachée
4) Si pas jouée, on essaye de jouer une autre carte de sa main
5) Si toutes les cartes ont été essayée, on pioche une carte Nature de la pile face cachée
6) Si plus de cartes Nature, on pioche une carte Life de la pile face cachée

C'est pas vraiment très intelligent mais ça fonctionne et, avec un peu d'aide, ça lui arrive de gagner (^_^)

Dans la vidéo ci-dessous, j'ai volontairement forcé l'affichage des cartes de l'IA (plus facile pour lui permettre de gagner ^^)

Le Grand Créateur

Je me suis fixé comme objectif de créer un jeu vidéo à partir d'un jeu de plateau.

J'ai pris contact avec la maison d'édition pour savoir s'il était possible de réaliser ce projet.
Tant que je ne diffuse pas mon logiciel, cela ne pose aucun problème.

J'avais fait une première version où les cartes et les tuiles étaient positionnées différemment mais c'était pas "user-friendly".

Avec l'aide de ma femme (merci pour ses précieux conseils), j'ai refait la présentation pour obtenir le résultat visible dans les vidéos ci-dessous :

 

 

Toutes les images actuellement utilisées sont libre de droit.

 

Pour l'instant, il n'y a qu'un seul joueur. Je souhaitais en premier lieu réaliser toutes les actions possibles du joueur.
Maintenant que c'est chose faite (j'en suis très fier !), je vais me lancer dans un sacré projet : la réalisation de l'IA !

Mais toutes les bases sont faites :

  • l'ajout de tuile
  • la pioche des cartes
  • la gestion des objectifs
  • la pose de nourriture (et la gestion de la réserve, même si ce n'est pas visible ^^)
  • la pose d'une cité
  • le calcul de la satisfaction des cités posées

J'ai également préparé la gestion du nombre d'actions possibles (désactivé dans les vidéos).

 

Je me demande si je vais réaliser les animations des déplacements des cartes pour l'IA...
Ce serait vraiment mieux mais je ne vois pas, pour l'instant, comment réaliser cela.

FotN: Creator - Début

Je suis actuellement en train de reprendre mon application "Fate of the Norns" que j'ai conçu à l'aide de Unity.

Cela fait plusieurs mois que je travaille dessus sans me plonger vraiment à fond dedans.

Mais c'est un ambitieux et vaste projet, très vaste !

J'avais dans l'idée de créer une application qui irait se connecter sur un site Web contenant une base de données.
Cette base de données serait mise à jour avec l'aide de l'auteur des livres. Mais je me rend compte que c'est peine perdue.
Il est tellement occupé que même les personnes avec qui il travaille ont dû mal à avoir toutes les réponses.

Bref, j'ai abandonné l'idée d'un site Web.

Je me suis plutôt recentré sur une simple application avec une base de données locale (de préférence cryptée).

 

Raison de mon choix pour Xamarin :

J'ai choisi Xamarin parce que je voulais concevoir une application portable sur Android comme sur iOS ou Windows (PC ou Phone).
Et puis, Xamarin utilise le langage C#. Cela me permet de mettre en pratique une grande majorité de mes cours de C++ (qu'il faut que je continue).

 

Avancée du projet :

Pour l'instant, j'ai conçu 3 écrans : le splash screen, l'écran de choix entre GM et joueur et l'écran de sélection du personnage côté joueur.
Ça n'a pas beaucoup avancé car je me suis laissé facilement distraire par d'autres occupations.

 

Prochaines étapes :

Etape 1 - La base de données :
Tout d'abord, je dois concevoir un projet qui me permettra de comprendre comment interroger une base SQLite à partir d'une application Xamarin.
Je sais qu'il existe un grand nombre de tutoriels sur le Web. Il faut que je me motive un peu pour le faire, c'est tout ^^
Un point important que j'allais oublier de mentionner : comme je me suis aperçu qu'on pouvait très facilement récupérer l'ensemble des données d'une application Unity et qu'on m'a offert les livres, je voudrais, en remerciement à l'auteur, ne pas autoriser les utilisateurs à décoder la base de données (ou en tout cas, essayer).
Donc, en plus de savoir comment interroger la base, je devrais aussi comprendre comment la crypter et la décrypter.

Etape 2 - Renseignement de la base de données :
J'ai déjà conçu la structure de la base et les intéractions entre les diverses tables. Mais il faut que je me crée un autre projet pour pouvoir saisir ces données plus facilement. Rentrer les données via des requêtes d'INSERT peut être bien sur une quantité minime d'informations mais pour ce projet, je me dois de concevoir une application dédiée. C'est un vrai projet en soi !

Etape 3 - Concevoir l'application d'affichage des données :
Dès que j'aurais terminé l'étape 2, je pense que cela ne sera plus très compliqué. J'aurais déjà fait une grosse partie du travail et il ne s'agit que de faire le rendu.
J'ai déjà rencontré ce genre de cas au cours de la création de mon Livre-jeu informatique.

 

Analyse de la situation :

L'étape la plus critique est l'étape 2. Si l'outil d'aide à la saisie des données est mal fait, je risque d'avoir de grosses difficultés durant l'étape 3.
C'est pour cela qu'il va falloir que je réalise plusieurs projets à l'étape 1.

 

Si j'arrive à mettre en place ce projet, je risque de me faire une belle réputation parmi les joueurs de "Fate of the Norns".
Plusieurs connaissances ont déjà indiqué que j'avais créé une application de création de personnages. Mais celle-ci a tellement de limites que c'en est difficilement utilisable.

Bref, tout ce qu'il me faut maintenant, c'est me motiver...

 

Ma Jam personnelle - Pari réussi (^_^)

Ce billet va être mis à jour régulièrement tout au long de ces 48 prochaines heures.

J'ai déjà l'idée de ma propre Jam : refaire Donkey Kong (merci à Gary ^^)

Maintenant, nous allons passer à l'organisation du projet.

 

Etape 0 - identifier les étapes du jeu

Je viens d'identifier les grandes étapes du jeu :

  • Etape 1 - Construction du niveau
  • Etape 2 - Déplacement du joueur et collisions avec le niveau
    Avant, j'avais fait 2 étapes mais comme le déplacement impliquait la collision avec le niveau, il m'a paru sensé de les regrouper.
  • Etape 3 - Ajout de l'objectif et gestion de la fin du niveau (et passage au suivant)
  • Etape 4 - Ajout des objets à éviter
  • Etape 5 - Ajout des collisions du joueur avec les objets
  • Etape 6 - Ajout du score et de la gestion des points
    J'ai rajouté la gestion des points car je n'y avais pas pensé tout de suite et que ajouter le score à l'écran, c'est trop simple (en temps normal ^^).
  • Etape 7 - Ajout des menus
  • Etape 8 - Ajout des animations
    J'avais oublié cette étape au démarrage et n'est arrivée que lors de l'étape 7.
    Je l'avais positionné en étape 9 mais comme je l'ai faite juste après l'étape 7, j'ai dû la changer de place ^^.
  • Etape 9 - Ajout des sons
  • Etape 10 - Ajout d'une introduction (si j'ai le temps)

 

Etape 1 - Construction du niveau

Cette étape va me demander beaucoup de recherche en terme de graphisme. Je vais essayer d'en trouver qui sont déjà tout fait. Ca devrait me faire gagner du temps.

Pour le niveau, j'ai récupéré une image du jeu originel réalisée par Mr.C (https://www.spriters-resource.com/game_boy_advance/wariowareincmegamicrogames/sheet/59233/).
La taille a été volontairement augmentée de 2,5 fois car je trouvais ça trop petit.

Maintenant, direction le joueur !

 

Etape 2 - Déplacement du joueur et collisions avec le niveau

La première étape que j'ai choisie est le saut. Cela s'est avéré être une bonne idée puisque j'ai fini de réaliser un saut convenable.

Maintenant, je vais m'attaquer aux déplacements droite/gauche.

C'est pas compliqué en temps normal mais comme j'ai utilisé une image complète pour le niveau, je risque probablement de galérer pour faire les déplacements.

Pour l'instant, cela semble bien se dérouler. J'arrive désormais à déplacer mon personnage sur tout le premier niveau. Pour l'instant, il n'y a pas de gestion de collision avec l'écran. Mais ce petit problème sera vite réglé (^_^)

Voici une petite vidéo de ce que j'ai réalisé en 2h de temps :

Pour savoir si je dois monter ou descendre, j'ai utilisé une liste de zones.

Une zone est composée de 3 éléments : sa coordonnée Y, sa coordonnée X de début et sa coordonnée X de fin. Avec ça, je peux savoir où se situe mon personnage et ainsi recalculer sa position Y par rapport à sa coordonnée X.

J'ai déjà finalisé les 2 premiers niveaux et il m'en reste encore 4 à faire.

Il faudra aussi que je gère la présence d'une échelle et si le personnage est proche du centre de celle-ci. Comme ça, je bloque le saut et fait monter le personnage.

Encore beaucoup de travail dans cette partie.

Fin d'écriture : vendredi 22h21.

Début d'écriture : samedi 8h32.

J'ai fait une grosse boulette : j'ai détruit le code du saut et je ne me rappelle plus comment j'avais fait. Bon, même s'il n'était pas parfait, il fonctionnait...

Enfin, bref... C'est pas grave, on va recommencer (^_^) Comme ça je retiendrais cette méthode.

Bon, ça y est ! J'ai recréé un nouveau saut. Et en plus, je trouve qu'il est beaucoup plus simple que celui d'hier et il prend aussi en compte le fait d'être arrivé à l'étage suivant. Même si je ne sais pas si c'est une bonne idée puisque je n'ai jamais joué à l'original... Faudra que je regarde des vidéos.

Comme je n'avais fait que les 2 premières zones, je vais maintenant m'occuper des 4 autres. C'est parti pour de la prise de coordonnées sur une image...Chouette...

Maintenant, c'est bon : mon personnage peut sauter, se déplacer et tomber. Il ne me reste plus qu'à le faire grimper aux échelles.

Vidéo du résultat :

Je viens de finir de m'occuper de la gestion des collisions. Tout d'abord, j'ai contrôlé si j'étais sur la 1ère zone pour définir une règle particulière (ne pas être dans le baril d'huile en feu ^^). Ensuite, j'ai regardé si j'étais arrivé sur le bord de l'écran à droite pour ne pas disparaître. Enfin, j'ai vérifié si on était au bout des poutres à gauche pour ne pas tomber. En dernier lieu, j'ai empêché le personnage d'aller après les doubles échelles au dernier niveau.

Maintenant, il me reste plus qu'à voir comment se comporte le personnage dans le jeu originel et à appliquer le même comportement.

J'ai également la gestion des échelles à faire et ça risque d'être assez compliqué... Enfin, on verra bien (^_^)

Bon alors, il va y avoir un peu de changement. Après avoir joué à une version Web du jeu, le personnage ne peut pas sauter sur les plateformes. Il est obligé de passer par les échelles. Je vais apporter une petite différence avec le jeu originel : le joueur pourra quitter l'échelle s'il est en train de monter.

Le travail est terminé pour les échelles et tout fonctionne.
 

Etape 3 - Ajout de l'objectif et gestion de la fin du niveau (et passage au suivant)

Juste après avoir fini les échelles, j'ai attaqué directement la fin du niveau. Comme j'avais revu la liste des zones pour y inclure la zone finale, cela n'a pas été trop long.

J'en ai profité pour afficher un message une fois le niveau complété. Il faut, par contre, que je trouve une police plus jolie. Celle que j'ai trouvée ne me plait pas. Pour l'instant, je la garde mais j'en chercherais une plus tard (si j'y pense ^^).

Il ne me reste plus qu'à relancer le niveau. C'est pas ce qui sera le plus dur (^_^)

Petit bug que je n'avais pas vu : mon personnage attérissait bien au dessus de la plateforme finale. J'avais tout simplement oublié de multiplier la position par le ratio.

En écrivant ce bug, je me dis que j'aurais pu utiliser le scale et en conservant les coordonnées directes sans passer par le ratio.

je vais m'en charger. Comme ça, ce sera plus facile et je n'oublierais plus de multiplier par le ratio (^_^)

Avant ça, je me charge de relancer le jeu si on atteint la dernière plateforme (ou zone, ça dépend...de moi ^^).

 

Bon, j'ai tenté d'utiliser la fonction Scale de Love2D mais j'ai commencé à avoir des bugs. Ne voulant pas me lancer dans ces corrections, je vais remettre comme c'était avant. C'est pas forcément beau mais ça marche.

Ca y est, dès que je suis arrivé sur la dernière plateforme, j'affiche le message "Level complete !" et en appuyant sur Espace, le jeu redémarre.

Voilà, on peut aller manger et on passera ensuite à l'étape suivante : les objets.

 

Etape 4 - Ajout des objets à éviter

Pour l'instant, les objets ne seront pas animés.

Les objets sont désormais implémentés dans le jeu. J'ai ajouté une fonction de Debug pour vérifier si les objets disparaissaient bien à la fin en affichant leur nombre.

La petite vidéo ci-dessous vous montrera le résultat :

Maintenant que les objets bougent convenablement, on peut presque passer à l'étape suivante. Il reste un bug que j'ai détecté.
Certains objets sortent du cadre et ne disparaissent jamais.

Voilà, le petit bug a été corrigé. Cela provenait du calcul de la position. Selon la vitesse, le baril était au delà de la première zone et donc, tombait et ça se voyait.

Désormais, si un baril est au dessus (le 0 du y de l'écran est en haut) de la première zone (celle où commence le joueur), le baril est automatiquement supprimé.

Cette étape est désormais terminée. Passons à la suivante !

 

Etape 5 - Ajout des collisions du joueur avec les objets

Pour les collisions, j'ai fait un truc super simple. Tout d'abord, j'ai bouclé sur tous les objets. A chaque fois, j'ai vérifié si le personnage est présent à l'intérieur de l'image de l'objet. Si tel est le cas alors ça signifie qu'il y a collision. On perd alors une vie et on supprime l'objet. Dans le cas contraire, on passe à l'objet suivant.

Voilà, cette étape m'a pris moins de 10 minutes à coder alors que je pensais qu'elle serait plus longue.

Etape suivante !

 

Etape 6 - Ajout du score et de la vie et gestion des points

Ici, le plus compliqué, c'est les points. Je sais qu'on gagne des points si on arrive à sauter par dessus des objets.

Voici le 1er système de points que je vais mettre en place :

  • 100 points si on arrive à sauter par dessus un objet
  • 500 points si on arrive sur la dernière plateforme

Pour les 500 points, c'est super facile. Par contre, je risque d'avoir du travail pour savoir si j'ai bien sauté par dessus un objet...

Tout d'abord, je viens de trouver un bug : en sautant vers la gauche au début, on tombe et on disparait. Il faut que j'ajoute un contrôle pour bloquer le dépassement du tonneau d'huile en feu. Et d'un problème de moins de réglé.

Voilà, les 500 points sont finis. Cela n'a pas été aussi simple car j'ai eu des difficultés sur l'affichage. Il se retrouvait en dehors de l'écran selon le paramétrage mais en improvisant, j'ai réussi à obtenir quelque chose de correct.

Maintenant, la gestion des points lors des sauts...

Je crois avoir trouvé le bon emplacement mais ça ne fonctionne toujours pas. De temps en temps, j'ai une accumulation de points qui arrivent et à d'autres moments, j'ai rien du tout. Pour l'accumulation, c'est le système de comptabilisation qui se fait mal. Un booléen passe à false constamment alors qu'il ne devrait pas.

Je viens de trouver une autre erreur dans ma boite de collision et ce, toujours à cause de ce ratio. Mais étant bien avancé, je ne le changerais plus. Faudra que je sois plus rigoureux, c'est tout.

Maintenant que la détection des sauts se fait bien, il reste la gestion des points (partie un peu plus casse-tête).

J'ai repris mon code et réfléchis quelques instants. Après quelques tests, j'ai finalement trouvé où je devais mettre ma condition pour obtenir les 100 points pour le saut au dessus d'un objet. Mais ce n'était pas tout, il a fallu que j'organise mon code pour qu'il se déclenche au bon moment. Bref, maintenant, cela fonctionne.

Si on saute par dessus un objet (c'est assez dur quand même), on obtient 100 points. Si on arrive sur la dernière plateforme, on obtient 500 points.

Tout ça, ça fonctionne plutôt pas mal comme le montre cette petite vidéo :

Maintenant, je peux passer à l'étape suivante : l'ajout de menus.

 

Etape 7 - Ajout des menus

Tout d'abord, il n'y aura qu'un menu principal pour lancer le jeu. Ce n'est pas ce qui risque de me prendre le plus de temps, vu que j'en ai fait tellement sur d'autres mini-projets que ça devrait aller sans trop de mal.

Le menu de démarrage est en place avec une petite animation qui fait apparaître le titre du bas vers le haut.

Dès que le joueur n'a plus de vie, l'écran de démarrage est de nouveau affiché.

Fin d'écriture : samedi 23h25

 

Etape 8 - Ajout des animations

Début d'écriture : dimanche 09h05

Pour l'instant, nous avons un jeu jouable mais il manque plein d'images pour le "peupler".

Par exemple, il faudrait l'image de Donkey Kong et de la princesse (Peach ?) qui devront être de préférence animée.

Et il faudra aussi que je trouve une police de caractères pour l'écran de titre.

Pour l'animation, j'ai découpé les images de Donkey Kong et je vais me faire un projet à part pour faire mes tests d'animation.

J'utiliserais ce même projet pour l'animation de la princesse.

Voilà, Donkey Kong est là et son animation concorde avec l'arrivée des barils. Je viens aussi de finir 2 animations : une première de la princesse Peach attachée et, quand on arrive tout en haut, on la voit qui nous remercie. Par contre, elle est beaucoup plus belle que le personnage (^_^) Mais c'est une princesse alors c'est normal (^_^)

Merci à Vice pour l'iamge de la princesse Peach (https://www.spriters-resource.com/custom_edited/mariocustoms/sheet/23240/)

Il me reste à trouver deux animations pour Donkey Kong : une quand il a gagné et une quand il a perdu.

Pour la défaite, c'est bon. Je pense que je vais utiliser la mini animation que j'ai faite pour la reproduire en cas de défaite (en enlevant le lancer de baril).

Désormais, Donkey Kong sera content quand il aura fait perdre le joueur (^_^)

 

Etape 9 - Ajout des sons

Maitenant, la partie la plus longue : trouver les sons qui me conviennent.

J'ai repris beaucoup de sons du jeu originel. Je fais le détail des sons ci-dessous pour éviter tous soi-disant plagiat (ou autre truc du genre) :

Voilà, il me manque 2 sons : lors d'un collision et lorsqu'on grimpe à une échelle.

Il me reste 6h et je dois faire un break. Je ne sais pas si j'aurais le temps de la faire. Mais je vais tout de même essayer.

Fin d'écriture : dimanche 14h08.

Début d'écriture : dimanche 16h15

J'ai créé les 2 derniers sons manquants et maintenant, il me reste encore 3h30 environ pour faire une animation pour l'introduction.

 

Etape 10 - Ajout d'une introduction animée

Tout d'abord, il me faut des images de Donkey Kong et de la princesse Peach.

J'ai essayé de trouver des images de Donkey Kong mais je n'en ai pas trouvé qui me convenait.

Par contre, j'ai eu une autre idée : faire défiler Donkey Kong en se tapant sur le ventre avec la princesse Peach qui s'enfuit en courant (et une petite surprise ^^).

L'animation de la princesse Peach est presque prête. Par contre, j'ai un problème de FPS. Est-ce lié au fait que je sois sur batterie ? Je vais lancer le jeu qui était à 60fps sur secteur. Si c'est toujours à 30fps, alors c'est que c'est bon. Sinon, j'ai un gros souci... Bon, c'est bien parce que je suis sur batterie. Je suis quand même rassuré (^_^)

Maintenant, il ne me reste plus qu'à ajouter l'animation de Donkey Kong et mon jeu est terminé.

 

Voilà, le jeu est terminé. Nous sommes le dimanche et il est 19h11. Jam réussi ! (^_^)

Lire la suite

Donkey Kong en Lua

C'est une idée que m'a donné un collègue de travail : refaire un Donkey Kong, presque identique à l'original.

Même si je n'ai jamais joué à l'original, je vois exactement quel est le concept du jeu.

 

Concept :

On contrôle un personnage qui peut se déplacer vers la gauche et la droite ainsi que sauter.
Il peut aussi récupérer un marteau pour détruire les objets. Et, ne surtout pas oublier qu'il peut également grimper aux échelles.
Petite précision : lorsque le joueur saute, il ne peut pas se déplacer (ça augmentera la difficulté ^^)

Il y a une IA (je vais l'appeller comme ça ^^) qui ne fera que générer des tonneaux ou d'autres objets qui tomberont jusqu'en bas de l'écran.
Arrivés en bas, ils disparaitront ou exploseront selon le type d'objet, on verra.

L'objectif pour le joueur sera d'arriver en haut de l'écran pour sauver la jeune fille prisonnière du méchant singe (ou un autre monstre).

 

Voilà les bases du jeu.

Je ferais un suivi régulier sur l'avancée durant tout le week-end. Ce sera ma Jam à moi (^_^)

Mon objectif personnel sera de coder durant le week-end le jeu complet.

 

Lire la suite

Abandon de projet

J'ai proposé à un élève (je ne sais pas si c'est le bon terme) de Gamecodeur de faire un projet de babyfoot ensemble.

Mais je crois que je vais abandonner ce projet et ce, pour 2 principales raisons :

  1. Cela avait l'air fun sur le coup et puis, en y réfléchissant bien, ça ne l'est pas vraiment...enfin, je trouve.
    Je n'ai pas vraiment d'envie de faire ce projet. Je n'accroche pas vraiment au jeu.
  2. L'autre élève est d'un niveau vraiment différent de moi.
    J'ai peur de ne pas y arriver. Oui, on dit toujours qu'il faut essayer avant de dire qu'on ne sait pas faire les choses mais là, j'ai vraiment l'impression d'être un gros débutant à côté de lui. En plus il est en train de créer son propre jeu.

Donc, je vais prendre la décision de stopper le projet avant de vraiment le commencer.

Ce sera mieux pour moi en tout cas.

De retour sur mon blog

Cela fait un moment que je n'ai rien posté sur mon blog. Oh, ce n'est pas que j'ai rien fait, c'est simplement que j'ai plein d'activités et que je n'ai pas pris le temps de me poser pour rédiger quelques pages.

Je suis Maitre de jeu et joueur sur "Fate of the Norns: Ragnarok", je fais les ateliers et la Jam de Gamecodeur et je prends des cours d'anglais à l'UQAM. Et le plus important, j'ai un boulot depuis fin septembre 2016.

Depuis un moment aussi, j'essaye de concevoir mon application pour la création de personnages pour "Fate of the Norns".

Bref, je suis éparpillé sur trop de projets.

Dans les prochaines pages, je vais essayer de relater tout ce que j'ai pu faire à partir des ateliers de Gamecodeur (Jam incluse).

Fate of the Norns (suite)

Depuis presque 2 semaines, je n'ai pas accordé beaucoup de mon temps à ce projet.

J'ai tout de même profité pour réviser les langages et techniques suivants : C#, Java, HTML, CSS, PHP, SQL.

J'ai également réalisé une courte vidéo qui décrit mieux que des mots ce qui a été fait jusqu'ici.

 

Lire la suite

Fate of the Norns

29/08/2016 : Cela fait 1 mois que je travaille sur cette application et elle a beaucoup changée.

Désormais, on peut créer entièrement un "Denizen", à savoir :

  • la sélection du type à partir de la liste de tous les monstres possibles du Corebook
  • la sélection de la quantité d'essence (qui change la valeur de la destinée)
  • la sélection de la quantité de destinée (qui change la valeur de l'essence)
  • la sélection des pouvoirs (actifs, passifs, skills) avec en bonus les choix possibles en vert (plus visible)
  • l'enregistrement des données en local sur la machine (non portable)
  • la visualisation d'un résumé des pouvoirs de la créature
  • l'affichage détaillé des pouvoirs lorsqu'on clique sur un pouvoir dans le résumé
    (ça m'a demandé plusieurs jours pour le faire car la gestion des Layout n'est pas facile sous Unity3D mais le rendu est vraiment bien)
  • le "PlayMat" du monstre avec possibilité de "Drag & Drop" les runes
  • la sauvegarde du "PlayMat" pour pouvoir retrouver les runes à leur place dès qu'on y retourne
    (petit bug pour les runes dans "In-Play", elles sont superposées : il faudra stocker la position et la rotation de chaque rune)

 

Actuellement, je suis en train de concevoir la création du "Dweller".

J'ai utilisé et adapté tout ce que j'avais réalisé pour le "Denizen" afin de simplifier ma compréhension (le code, lui, n'est pas si simple que ça et est à améliorer mais je m'y retrouve, c'est l'essentiel ^^)

 

30/08/2016 : Voila, la création du "Dweller" est terminée. Il reste encore beaucoup de choses à faire mais la trame principale est désormais achevée !

 

Ci-dessous, quelques-unes des prochaines tâches à réaliser :

  • Affichage du pouvoir associé à la rune dans le PlayMat lorsqu'on clique dessus (priorité : 0)
  • Possibilité d'ajouter un compagnon à un "Dweller" (priorité : 1)
  • Augmentation de niveau d'un "Dweller" (priorité : 2) ou d'un "Denizen" (priorité : 2)
  • Création d'un site web pour stocker les données essentielles (pouvoirs, listes des "Denizen" et des "Dwellers", ...) (priorité : 5)
  • Modification de l'accès aux informations dans le code (priorité : 5)
  • Ajout de "Divine Potence" (priorité : 3)

 

Lire la suite

Fate of The Norns - Creation

Actuellement, je participe au jeu de rôle "Fate of the Norns: Ragnarok" créé par Andrew Valkauskas. Ayant fait plusieurs petites parties, je trouvais ça fastidieux de créer à chaque fois mes personnages. J'ai donc fait la suggestion à Andrew de lui créer un outil permettant la création des personnages.

Vendredi 22 juillet 2016, Andrew a eu la bonté de me transmettre le Corebook (au format PDF) ainsi que la liste des pouvoirs actifs et passifs.

A partir du livre, j'ai relu la méthode de création de personnages.

J'ai donc commencé à découper les différentes étapes de création :

  • les données générales (nom, niveau, essence, destiné, etc.)
  • les skills/active powers/passive powers
  • la fiche de jeu (pige de runes, déplacement des runes, etc.)

Ce matin, je viens de finir au bout de un jour et demi la gestion de la sélection des skills. Au début, j'ai utilisé un tableau puis, j'ai repensé aux différents travaux réalisés durant le DESS et j'ai pensé qu'une liste serait plus simple.

Il est à noter que la gestion de la sélection des skills sera également utilisée pour les pouvoirs actifs et passifs

GameCodeur

Il y a un moment de cela, un de mes camarades de classe m'a fait découvrir un guide sur le jeu vidéo.
Ce guide était écrit par David Mekersa.

Depuis le mois de février, il s'est fixé un nouveau challenge : enseigner la programmation d'un jeu vidéo. Pour cela, il a créé le site GameCodeur.

Depuis presque 2 semaines, je me suis inscrit sur ce site. Pour seulement 120 euros, avoir de si précieux conseils, c'est vraiment pas cher payé.
Bon, il est vrai que le site a quelques difficultés mais il faut simplement qu'il soit un peu plus rodé (^_^)

Enfin, bon, je suis bien content d'avoir trouvé ce site. Il m'a permis de connaître le langage Lua et de réfléchir à de nouvelles manières de coder.

J'ai suivi son atelier de création d'un Shooter et j'ai réalisé des petits trucs en plus à son projet : un générateur d'aliens aléatoire ainsi qu'un introduction automatisée dont je suis vraiment fier.

Vous pouvez voir une petite vidéo https://www.youtube.com/watch?v=ztkH9UWIxZc

Présentations finales

Ce vendredi 13 mai, nous avons effectué une présentation finale de notre jeu à tous les grands studios de jeux vidéos de la ville de Montréal.
Il y avait : Ludia, Gameloft, WBGames, Ubisoft, Square Enix/Eidos, Electronic Art, Budge et Bioware. Il y avait aussi d'autres sociétés qui n'étaient pas du monde du jeu vidéo mais de la simulation ou des effets visuels.

Au sujet de notre présentation, cela s'est plutôt bien passé. Tout le monde semblait ravi de ce que nous avons fait.

Moi aussi j'étais bien content de moi. Je n'ai pas trop bafouillé et avait, il me semble, donné un certain rythme à mes propos.

J'espère qu'on pourra faire une petite vidéo d'ici quelques temps pour vous montrer ce qu'on a fait (^_^).

Examens

Voilà ! Ca y est ! Mes examens sont tous terminés.
J'avais seulement 3 examens :
- Traitement des médias numériques
- Synthèse d'images et animation 3D
- Concepts de programmation avancés

Pour le cours "Traitement des médias numériques", on avait droit aux cours papier ou informatique.
Pour le cours "Concepts de programmation avancés", on avait droit aux cours papier.
Pour le cours "Synthèse d'images et animation 3D", on avait droit à rien...

Comme vous vous en doutez, c'est le cours "Synthèse d'images et animation 3D" qui m'a posé le plus de problèmes...

Pour le cours "Concepts de programmation avancés", je n'étais pas fier de ce que j'ai fait. Mon professeur m'a tendu la main pour me féliciter de cette année mais j'étais tellement mécontent de moi que je ne la lui ai pas serrée. En rentrant chez moi, je lui ai écrit un courriel pour m'excuser. Il m'a tout de suite répondu et avait bien compris que ce n'était pas envers lui que j'étais en colère.

Pour le cours "Synthèse d'images et animation 3D", c'est l'examen que j'ai complètement foiré... Certaines questions étaient, pour moi, très difficiles. Etant donné que je n'ai jamais aimé le "par coeur", c'est ce cours qui risque de faire que je n'aurais pas mon diplôme.

En tout cas, tout est fini et on verra les résultats.

Pour l'instant, il faut se concentrer sur la présentation finale. C'est ce qui me permettra de regagner des points en vue de l'obtention de mon diplôme.
 

Lire la suite

Présentation intermédiaire

Cela fait plusieurs mois que je n'ai pas écrit et il reste 5 semaines avant la présentation finale.
Il faut dire que cette présentation finale sera effectuée devant un grand nombre de recruteurs des compagnies de jeux vidéos.
Cela signifie un peu plus de pression sur nos épaules... Mais bon, pour le moment, il ne faut pas trop s'en inquiéter (^_^)

Hier soir s'est tenue notre présentation intermédiaire. Celle-ci était plus technique que les autres présentations.
Il y avait des anciens élèves et certains ont évolué en tant que responsable d'équipe.

Nous avons présenté un jeu qui fonctionnait. Bien entendu, il reste encore beaucoup de choses à améliorer mais nous verrons cela la semaine prochaine.
Aujourd'hui, c'est un repos bien mérité (^_^) Le week-end précédent était assez stressant car nous voulions peaufiner notre jeu pour la présentation.

Désormais, il faut que je me concentre sur mes cours, principalement C++.

Certains cours vont être plutôt "rasoirs" car il y a trop de mathématiques mais bon, j'ai pas le choix !
Dans tous les cas, je ferais mon maximum pour obtenir mon diplôme !

Je ne sais plus trop quoi écrire donc je reprendrais probablement après notre présentation finale.

En pause

Tout d'abord, bonne année 2016 à tous ceux qui me lisent.

J'ai réellement délaissé mon blog depuis des mois et ce, pour une bonne raison, je suis actuellement en train d'étudier à l'université de Sherbrooke à Montréal.
Il a fallu vendre tous nos biens (voiture, meuble et électroménager) et préparer notre venue au Canada.
Ensuite cela s'est enchainé très vite.

Nous avons tout de même pris quelques jours de repos avant que mes cours ne commencent.
Le programme que je suis actuellement est un "Diplôme en développement du jeu vidéo" (DDJV). Il s'agit d'un DESS (Bac+5).

Il s'agit d'apprendre les différents métiers de programmeur dans le monde du jeu vidéo.
Nous avons vu comment créer un moteur 3D (oui, oui ^^) à partir de NVidia PhysX durant le premier semestre.
L'objectif de ce semestre était de créer une sorte de démo jouable en équipe de 4 personnes sans utiliser de moteur déjà existant (type Unreal ou Unity)

Pour ce second semestre, nous allons étudier Unreal Engine v4.10.

Nous avons déjà une grande partie des ateliers de ce semestre et je suis actuellement en train de les réaliser (exercices compris quand présent).
L'objectif de ce semestre est de réaliser un jeu multi-joueur fonctionnel en équipe de 6 personnes !

Nous allons devoir présenter notre projet à des professionnels du monde du jeu vidéo (nos futurs employeurs).

Cela nous met quand même une certaine pression...
Mais bon, de toute façon, cette formation me sera toujours bénéfique !
J'aurais au moins appris le langage C++.

Lire la suite

Programme du Livre-Jeu

Après quelques difficultés rencontrées, j'ai enfin réussi à avoir une version fonctionnelle ! J'ai commencé par la partie qui me semblait la plus simple et la plus utilisée : les choix. Question affichage, je me suis limité à 3 boutons au maximum par ligne. Cela permet d'afficher un texte suffisamment long.
J'ai également changé l'ordre d'affichage des informations sur l'écran de jeu. La "Feuille d'Aventure" se situe à droite (elle était à gauche).

J'ai trouvé la police de caractère Harrington qui correspond à l'ambiance que je souhaitais donner à ce programme.


Désormais, il est possible de faire les actions suivantes (programmées dans un fichier XML structuré) :

  • Prendre un repas
  • Prendre un objet
  • Echanger un objet
  • Jeter un objet
  • Obtenir un bonus (ou un malus)
  • Fuir
  • Combattre un monstre
  • Tenter sa chance
  • Choisir un chemin

Pour l'instant, il n'y a que du texte et des boutons. Seule la phase de combat contient une image. J'ai privilégié la conception du programme à son interface. Je rajouterais plus tard des images. J'espère que ma femme les réalisera...

Durant le développement, j'ai dû réaliser quelques modifications dans la structure du fichier XML. Cela n'est pas visible dans son utilisation mais apporte une réelle simplicité dans certains morceaux de code.

Je posterais des copies d'écran un peu plus tard du programme "Livre-jeu".

Il me reste encore quelques détails à régler, comme de ne rendre la fuite possible que si le joueur a déjà combattu X rounds ou encore des combats contre plusieurs monstres en même temps.

Et il me reste encore la partie la plus compliquée : les cas spéciaux ! J'ai déjà échangé avec un collègue à ce propos et j'ai quelques pistes de travail. Il faut tout d'abord créer la structure XML qui sera utilisée (partie la plus longue, à mon avis). Puis il faut concevoir le programme de conception de cette structure XML. Et enfin seulement, il sera possible de l'ajouter au programme pour que celui-ci soit enfin complet. Cela me demandera un temps certain ! Et je ne pense pas pouvoir le finir cette année.
Dans tous les cas, ce programme m'a permis de m'initier au développement en C++ !

Generation XML

Comme indiqué dans mon précédent billet, j'ai dû concevoir une application afin de renseigner les données du livre-jeu et pouvoir ainsi les stocker dans un fichier XML.
Pour l'instant, seul le programme générant les données dites "standards" a été réalisé.
Le prochain module sera pour les cas spéciaux. Je ne rentrerais pas dans le détail des données.

Mon programme "Génération XML" se compose d'une fenêtre principale contenant 3 boutons et une zone de texte.
La zone de texte sert à contenir le chemin complet du fichier XML à utiliser. Un bouton "Parcourir" permet de sélectionner/saisir le répertoire et le nom du fichier.
Les 2 derniers boutons servent à lancer des fenêtres de dialogue (QDialog).
A l'heure actuelle, seule la partie "Nouvelle entrée" a été développée.

Generationxml

Préparation

Afin de pouvoir jouer à un livre-jeu sur ordinateur, il faut savoir comment se décompose les informations.
Nous savons que le livre-jeu est découpé en paragraphes. Ceux-ci contiennent un texte et des actions et/ou choix à réaliser.

J'ai tenté de réaliser une "carte" avec Freemind pour trouver le chemin qui permet de gagner à tous les coups.
C'est fastidieux mais, je pense, nécessaire lors des derniers tests du programme final.

N'étant pas familier avec la bibliothèque Qt, j'étaits parti dans l'idée de lire un ou plusieurs fichiers Texte contenant toutes les données nécessaires.
Après discussion avec plusieurs collègues, l'un d'entre eux m'a dit : "Pourquoi ne pas utiliser des fichiers XML ? Ils sont déjà structurés."
Et c'est vrai ! Ce sont des fichiers Texte structurés !

J'ai donc lu et re-lu le livre-jeu "Le Sorcier de la Montagne de Feu" pour lister les différentes actions possibles.
Il en est ressorti la liste suivante :

  • Choix
  • Attaque
  • Fuite
  • Bonus
  • Tentez votre chance
  • Objets
  • Repas
  • Spécial (cas non standards)

Afin d'avoir un livre-jeu sous forme XML, j'ai dû concevoir une application me permettant de renseigner les données nécessaires.

×