La Revue des Projets — 145
Posté le 28/04/2019 18:00
Bonjour à tous !
Réjouissez-vous, ce soir la RdP sera… normale ! Avec au programme Massena qui nous en touche un mot sur ces projets, puis nous aurons avec nous Disperseur et son dernier programme en date et enfin Shadow15510 qui nous annonce la sortie prochaine de son nouveau jeu !
Massena, avait commencé courant 2018 un jeu ambitieux : Evocalc ! Un jeu reprenant le concept du "vrai" jeu Evoland ou le personnage évolue dans un monde qui lui-même évolue en retraçant l'histoire du jeu vidéo. Nous avions eu le droit à plusieurs RdP sur ce projet prometteur : la
RdP n°116 et la
n°132 et quelques images impressionnantes :
Et après nous avoir fait peur sur son avenir, le projet Evocalc va enfin sortir de l'ombre mais là j'en dit un peu trop…
Massena a écrit :Bonsoir !
J'aimerais vous faire part de la suite de mes projets de programmation.
Alors, oui... Je ne programme plus trop, mais compte bien m'y remettre (je vais pas rester avec juste Aviator, qui de plus s'est fait voler sa place de jeu du mois par une I.A, décidément c'est beau le futur).
Si je ne programme plus... C'est parce que j'ai perdu la
hype nécessaire pour programmer Evocalc. Je trouve ce projet irréalisable. D'après la première version du jeu, je n'aurais jamais assez d'espace de stockage sur une calto monochrome. En effet, les maps prennent beaucoup de place, les textes de la première partie du jeu prennent juste
75% de ma mémoire, et je ne parle pas encore du moteur qui fera géra les collisions sur une map aussi mal faite (si beau soit-elle) qu'est celle d'Evocalc. Alors oui, je vous vois râler, dans vos fauteuils : "Mais quel con, y'a le DrawStat qui existe, t'utilise pas les strings crétin, blablabla."
Mais attendez !
J'ai pas dis que je ne sortirais pas de jeu ! Je compte bien sortir un RPG (un de plus, oui oui), d'après la dernière phase d'Evocalc, c'est-à-dire la phase d'exploration. Je prévois de faire, attenton... 4 mondes de 6 "pictures" en DrawStat, stockées dans des listes. Je ne sais pas si tout va rentrer, mais j'adapterais (moins il y aura de monde, plus il y aura de gameplay donc...).
J'essayerais de faire quelques dialogues, de gérer ces *%#<+°& de collisions (qui demandent forcément une map plus simple), de rajouter un inventaire complet et de faire un moteur de combat
un peu plus complet que celui d'Evocalc, qui reposait uniquement sur la chance
De plus, le tweak de mon chromebook en windows m'a permis de télécharger BIDE, GIMP, Fa-124 et plein d'autres logiciels sur mon PC portable, que je peux utiliser plus facilement que l'autre Windows XP en fin de vie... Bref, je suis maintenant plus équipé, et apte à combattre ma procrastination (c'est quand même pas pour ça que je vais arrêter Minecraft !).
Enfin, j'aimerais juste dire que je vais continuer de développer, en parallèle, des mini-jeux comme Aviator. Parce que j'aime ça, développer des mini-jeux marrants. Et faut bien entretenir la forme !
Sur ce, bonne soirée,
Masséna
Merci pour l'article et bon courage pour ta reprise ! Je vous rappelle que le topic dédié, même s'il est plus ou moins abandonné par l'auteur, est
toujours en ligne !
Continuons avec
Disperseur et son dernier projet, la reconnaissance "spritale" sur Casio : explication !
Disperseur a écrit :Bonjour à tous, c'est déjà la fin des vacances pour certains et c'est pour ça que je vais vous parler aujourd'hui de mon nouvel algo, pour vous remonter le moral
Donc voilà, pour aller à l'essentiel, mon algorithme permet de reconnaître des sprites (petites images) - ici représentés par des matrices remplies de 0 ou de 1 (pixel allumé) – ou qu'ils soient sur l'écran. J'ai doté le programme d'une mémoire de 999 cases. En effet l'emplacement de sauvegarde des sprites est une liste utilisée dans sa totalité (plus qu'il n'en faut
). Il faut savoir que lorsque l’algorithme rencontre un sprite qu'il ne « connaît » pas, il l'enregistre. Il y à quelques formes qui sont définies dans le programme telles que des carrés (2*2 ou 3*3 creux) ou encore des smileys (sans le contour)... etc. Bref, le programme ou l'algorithme (apellez le comme vous voulez
) reconnaît des sprites.
Voici à présent une description un peux plus technique du fonctionnement de cet algorithme:
Cela ce passe en plusieurs étapes. Tout d'abord je mentionne que le programme est doté d'une petite interface pour créer des sprites (en locate avec des carrés). Après avoir dessiné le sprite de votre choix dans un espace de 7*7 pixels (on peux en mettre bien plus mais ces dimensions m’ont simplifié la tache) le programme découpe dans l'image totale (matrice de 7*7 contenant le sprite) un rectangle contenant uniquement le dessin. Ensuite il récupère les dimensions de ce dessin et crée une matrice secondaire de même dimensions contenant des poids pour chaque pixels. Ces poids sont crées par un sous algorithme qui rempli la matrice comme ceci :
1.1 1.2 1.3 1.4
2.1 2.2 2.3 2.4
3.1 3.2 3.3 3.4
4.1 4.2 4.3 4.4...
Ce remplissage à été totalement arbitraire mais il évite jusqu'à un certain point les erreurs.
Une fois cette matrice crée, le programme calcule la somme pondérée du dessin découpé par la matrice des poids (il multiplie chaque pixel par son poids associé et ajoute chaque résultat). Le nombre obtenu est utilisé pour « reconnaître » le sprite dessiné parmi ceux pré-enregistrés dans l'algo ou ceux contenus par la liste servant de mémoire. Ce nombre est le fameux « S= » affiché juste avant le résultat de l'algorithme.
Pour créer ce système je me suis inspiré du fonctionnement des IAs de
« deap learning » avec les poids dans chaque neurone et la somme pondérée. (pour les intéressés allez voir cette vidéo, un peux longue mais très explicite
:
https://www.youtube.com/watch?v=trWrEWfhTVg )
Merci donc d'avoir pris le temps de me lire (je suis parfois un peux long dans mes explications ou flou..
). N'hésitez pas à me poser des questions sur mon algorithme ou à le commenter. Si cela intéresse certains je peux poster ce programme.
Sur ce, à bientôt sur Planet Casio !!
Un projet impressionnant d'un point du vue technique : bon courage ! Le projet n'a pas encore de topic dédié, mais si vous voulez des infos complémentaires, vous pouvez vous adressez dans les commentaires.
Nous arrivons doucement à notre dernier invité : Shadow15510 qui nous
bassine tiens au courant de ses projets :
Shadow15510 a écrit :Coucou tous le monde !
Je viens hanter cette RdP pour vous parler de mon dernier projet !
Donc pas encore d'image si c'est ça que vous attendez
mais un code déjà très au point…
Je fais durer le suspense encore un peu : je commence par ma
to do list :
Les moteurs du jeu sont au point, mais, il me manque un scrolling horizontal à gérer et un problème avec des matrices. Dans le jeu, je suis amené à supprimer des lignes d'une matrice en décalant toutes les lignes en dessous de la ligne supprimée vers le haut… J'ai un petit soucis à ce niveau >_<'
Ensuite il me restera encore un petit truc à implémenter, en théorie ça devrait être rapide mais bon… vu que je code avec mon c** ligoté dans le noir, ça peut prendre un peu plus de temps que prévu…
Là vous êtes en train de me maudire pendant que j'allais justement vous donner le sujet de ce nouveau jeu inédit ! Du coup je ne sais pas si je vous le donne…
Bon je le dit alors ? Ce jeu est un jeu de gestion… de compagnie aérienne.
non non c'est pas une blague.
Achetez, vendez et faites voler plus de 15 avions différents au caractéristiques réalistes dans plus de 20 aéroports tout autour du monde le tout dans une interface simple et jolie avec une gestion du temps réel et une fonte créée pour l'occasion !
Pour l'instant c'est pas vraiment possible, mais je mettrait sans doute une première version en ligne et je vous demanderez si vous avez des idées d'avions ou d'aéroports pas encore intégré mais que vous voudriez voir apparaître…
Promis je vous donne des images dès que possible !
Concernant mes autres projets... Ben euh
Plague avance… pas
je le continuerai pendant les vacances d'été
. Concernant mes autres jeux, Air Control devrait avoir une nouvelle version sous peu de temps pour plus d'ergonomie et une gestion des collisions entre avions.
J'avais il y a quelques temps mis un rpg en ligne avec C.Basic, l'envie m'est venue de faire un truc sérieux avec. (moi aussi ça m'étonne, d'habitude le sérieux je m'assois dessus
) Mais je n'ai pas d'idée de quêtes, je m'ouvre à vos propositions de ce côté (sans vous révélez les deux déjà implémentée)
Je n'ai pas fait non plus de topic dédié, le jeu étant très proche de sa sortie… Mais si vous avez des questions : les commentaire sont toujours là !
On arrive à la fin de notre… Ah non ! J'ai oublié : pardon ! Je demande pardon à
Disperseur à qui je dois des félicitations et un article, celui du Résultats du vote du Jeu du Mois de Mars 2019 dont il est l'heureux vainqueur ! Nous avons donc en première place
GéoGraph avec 5 points suivi de
Mini RpG avec 2 points !
Fêtons ça en image avec les superbes screens du jeu :
Voici la coupe dorée que tu peux mettre dans la description de ton programme :
On termine notre RdP avec un triste record celui du nombre de programmes paru cette semaine…
C'est pas que ça m'amuse, mais moi ça m'arrange bien : récupérer les liens de chaque programme c'est d'un chia**
Cette semaine 2 programmes ont été postés
Note de
Tituya est un programme de conversion qui permet de ramener une note sur vingt.
AlphaRun de
Lepianoteur, un jeu où le but est d'appuyer sur touche affichée sur l'écran de votre machine le plus vite possible et sans se tromper.
Lire la RdP précédente :
La Revue des Projets – 143 (la
n°144 est un troll)
Participer à la RdP :
Remplir le formulaire
Citer : Posté le 28/04/2019 18:10 | #
Bon, Shadow, j'ai compté, tu as mis 15 smileys dans ton article !
RECORD BATTU !
Tu t'en lasse pas des avions, hein ?
*Bon*
En fait, je tiens à préciser que j'arrête Evocalc, je me lance sur un RPG reprenant les trucs déjà fait avec ce projet. Voilà.
Sinon ça me manquait les bonnes vieilles Revues des Projets à l'ancienne !
@Disperseur Je partage l'opinion de Shadow, à quoi peut bien servir un programme comme celui-là ???
Citer : Posté le 28/04/2019 18:16 | #
Je sais, je sais, je suis très fort, mais je ferais mieux la prochaine fois…
Je suis déçu pour Evocalc, c'était vraiment un projet prometteur…
Ce que je peux te « conseiller » c'est de faire 3-4 RdG à la suite, une série quoi, avec chacun des RpG qui fait un chapitre avec une évolution à chaque fois… Dès que l'un des opus est fini, tu demande à l'utilisateur de passer au suivant,. etc
Concernant les avions, c'est ma grande passion ! Je veux devenir pilote de ligne
En parlant de ça, j'ai pris quelques images du jeu :
Le jeu est codé en C.Basic, pour l'instant j'ai 17 avions et 30 aéroports pour être exact.
Citer : Posté le 28/04/2019 18:35 | #
Nice
Pour reprendre ton idée, j'avais pensé à un système qui utiliserait la mémoire secondaire pour stocker différents chapitres.
Citer : Posté le 28/04/2019 18:38 | #
Tu peux même passer du Basic au C.Basic à un moment ou même en faire un projet commun si tu trouves des personnes motivées
Je dis pas que c'est un exemple à suivre : https://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=3762&page=last Je dit que les dessins sont pas dégeu et que pour faire le dernier opus d'un RpG, le C.Basic serait un possibilité pour finir en beauté !
Citer : Posté le 28/04/2019 18:40 | #
Le Basic Casio est mort à ce que je vois.
Ce ne serait pas le moment de faire une haie d'honneur ?
Citer : Posté le 28/04/2019 18:41 | #
Rip le basic qui meurt à cause de sa faible puissance
(Et de toute façon, vous pouvez pas dire le contraire)
MultipliCasio
RDM Calculs
Back Mirror
A Switch To The Top C
Citer : Posté le 28/04/2019 18:42 | #
Heey j'ai pas encore validé sa proposition !
Je dis que ça se discute. Je connais pas trop cette bêbête-là.
Citer : Posté le 28/04/2019 19:05 | #
Pis le Basic Casio ça peut-être pratique pour, par exemple, lorsque tu veux... eh bien… quand tu as… Ouais nan c'est nul en fait en le Basic
Citer : Posté le 28/04/2019 19:09 | #
@Admins: comment je fais pour mettre la coupe à côté du nom de mon jeu ..?
-Planétarium 2
Citer : Posté le 28/04/2019 19:11 | #
tu insère le code suivant dans la description :
[center][adimg]Trophee_JDM.png[/adimg]
Ce jeu a été élu Jeu du Mois de Mars 2019[/center]
ce qui affiche :
Ce jeu a été élu Jeu du Mois de Mars 2019
Citer : Posté le 28/04/2019 19:35 | #
Ok
-Planétarium 2
Citer : Posté le 28/04/2019 19:59 | #
@Massena : Le gros défaut de C.Basic c'est de nécessiter l'installation de l'add-in ce qui rendrait les opus l'utilisant inutilisable avec les opus précédents… Ça peut être gênant pour les utilisateurs qui ne veulent par tweaker leurs Casio…
Ajouté le 28/04/2019 à 21:03 :
Bonne nouvelle : mon jeu marche ! Le scrolling s'est résolu plus vite que prévu et mon « petit truc » qui était une gestion des pannes des avions a été remplacé par une vérification simple et efficace : si l'avion est en mauvais état, le décollage n'est pas autorisé ! J'ai résolu le problème de matrice. J'aurais possiblement un bug discret à ce niveau, il faut que je vérifie ça mais c'est marginal ! (oui, parce qu'en plus il faut gérer l'essence et l'entretient de chaque avion )
Soyons fou, j'annonce le passage en prod pour demain !
Citer : Posté le 28/04/2019 21:38 | #
Merci pour cet article Shadow ! Essaie de ne pas démonter les projets que tu présentes, le « je ne vois pas quelle utilisation on peut en faire » est sans doute honnête mais pas très vendeur.
Sinon je trouve, une fois n'est pas coutume, que ce style épuré permet de se concentrer sur le sujet : les projets. Merci
-
Ton algo a l'air sympa Disperseur, toutefois je reconnais ne pas avoir compris toute la méthode. Tu calcules d'abord le poids du sprite recherché dans ta matrice, puis tu cherches un sous-rectangle de taille 7x7 de l'écran ayant le même poids ? Si j'ai bien compris alors tu risques de faire des erreurs avec ton découpage (ie. 1.1 + 2.2 = 3.3).
Sinon, tu as une idée de la complexité ?
Bravo en tous cas pour le Jeu du Mois !
-
Shadow, tu te sous-vends à mort dans ton article ! Finis tes phrases et balance des vannes bien précises à des moments choisis. Ce sera beaucoup plus efficace pour impressionner ton lecteur !
Citer : Posté le 29/04/2019 06:59 | #
Oui hein ? Ça fait drôle de revoir une RdP normale, moi aussi, ca me rappelle l’ete 2018
Désolé pour le démontage : je l’ai supprimé mais là question était sincère : à quoique ça sert ?
Citer : Posté le 29/04/2019 07:30 | #
@Lephenixnoir :
Alors non ça se passe pas tout à fait comme ça.. excuse moi je ne suis pas doué pour décrire les algorithmes, c'est assez complexe .
Voici plus clairement je l'espère, le fonctionnement de ce dernier:
1) Dessin du sprite dans la matrice de base
2) Découpage du sprite dans la matrice de base (il ne prends pas toute la place)
3) Création d'une seconde matrice de la taille du sprite découpé
4) Remplissage de cette seconde matrice de poids comme expliqué dans la rdp
5) On fais le produit de chaque pixel (0 ou 1) de la matrice contenant le sprite découpé par le poids de la seconde matrice qui correspond
6) On ajoute les résultats de tout les produits de chaque pixels
7) Recherche du résultat trouvé précédemment dans la liste qui sert de base de données.
J'espère que c'est plus clair
Non je n'ais pas d'idée de la complexité.. qu'est ce que c'est au fait ..?
Ah et merci pour le compliment
-Planétarium 2
Citer : Posté le 29/04/2019 09:59 | #
D'accord, je comprends un peu mieux ton algorithme. Je vois comment tu "encodes" le sprite - tu le mets dans une matrice de la bonne taille et tu calcules son poids. Comment passes-tu des contenus de l'écran à la base de données ?
La complexité, c'est le nombre d'opérations que ton programme fait pour calculer son résultat. Mettons que j'appelle s le nombre de pixels du sprite et e le nombre de pixels de l'écran.
Si ton algorithme regarde une seule fois chaque pixel de l'écran et une seule fois chaque pixel du sprite, la complexité sera e+s. Tu vois pourquoi ? Une opération "regarder un pixel" pour chaque pixel de l'écran, et une opération "regarder un pixel" pour chaque pixel du sprite, ça fait e+s au total.
Par contre, si ton algorithme recherche ton sprite à chaque position possible de l'écran, tu vas regarder les mêmes pixels de l'écran plein de fois, et ta complexité sera e*s. Comme tu peux t'en douter, e*s est beaucoup plus gros que e+s, ça veut dire que ton algorithme serait moins performant.
Citer : Posté le 30/04/2019 12:59 | #
Re,
Quelques expliquations s'imposent..
Comment passes-tu des contenus de l'écran à la base de données ?
En fait, ce qui est affiché à l'ecran n'est que la représentation graphique de ma matrice de base. Celle dans laquelle on dessine le motif à reconnaître. Ce qui est stocké dans la base de données (la liste 1 de 999 cases je rapelle) ne sont que les résultats des sommes pondérés de chaque motif enregistré. En gros on trouve dans cette liste des valeurs qui "représentent" chaque motif connu.
Pour la complexité je comprends ce que tu veux dire mais je ne vois pas l'utilité de la chose..
Je tiens à préciser notamment que pour découper dans la matrice de base (celle donnée à l'algorithme au début) le motif, je cherche en premier le premier pixel (premier "1" de la matrice) en regardant de haut en bas et a chaque fois de gauche à droite. Une fois ce point trouvé l'algorithme recherche le point du motif ayant la plus petite abscisse puis celui ayant la plus grande abscisse et pareil pour les ordonnées. A partir de ces quatres variables (Xmin, Xmax, Ymin, Ymax) je crée la nouvelle matrice de la taille correspondant au motif qui y rentre parfaitement. Puis j'en créé une seconde de la même taille avec les poids et ainsi de suite.
J'espère t'avoir répondu
-Planétarium 2
Citer : Posté le 30/04/2019 13:08 | #
Ah, donc en fait j'y suis. Je dessine un sprite, je l'enregistre dans la base de données, je recommence plein de fois, disons 100. Ensuite je dessine un des 100 sprites et ton algo me permet de savoir lequel c'est ?
C'est une idée mathématique de si ton algorithme est optimisé. Quand tu veux optimiser un programme, la première chose à faire est de trouver un algorithme avec une bonne complexité (c'est-à-dire faible) et ensuite seulement optimiser le programme.
C'est très important en pratique. Par exemple, si tu veux trier une liste de n éléments, il y a plein de façons de s'y prendre... dont certaines font n² opérations et d'autres font n log(n) (à peine plus que n). Ça veut dire que pour une liste de 100 éléments, les bons algos vont presque 100 fois plus vite... et ça c'est fichtrement important.
Citer : Posté le 30/04/2019 13:18 | #
Quand tu te sens un peu useless parce que tu viens de publier un jeu en basic et que tu vois :
Ce ne serait pas le moment de faire une haie d'honneur ?
je vais faire des cauchemards
Plague avance… pas
et c'est bien dommage j'espere qu'il avancera un jour
Citer : Posté le 30/04/2019 13:21 | #
Je l'avance cet été promis ! Le portage en C est bien commencé, je suis en train de faire une pause et je me suis arrêté sur l'assainissement de mon code qui est atroce ! Le projet BASIC quant à lui est définitivement mort et enterré... Il est d'ailleurs sans licence.