Planète Casio - Vie communautaire - Flux RSS http://www.planet-casio.com Programmes Casio, Jeux, Cours pour Calculatrices Casio fr-FR https://www.planet-casio.com/images/logo.gif Planète Casio - Vie communautaire - Flux RSS http://www.planet-casio.com 55 50 Programmes Casio, Jeux, Cours pour Calculatrices Casio. Sun, 17 Oct 2021 09:15:33 GMT Sun, 17 Oct 2021 09:15:33 GMT contact@planet-casio.com (Planet Casio) contact@planet-casio.com (Planet Casio) 5 Année 2021-2022 pour CreativeCalc https://www.planet-casio.com/Fr/forums/topic16866--.html Bonjour à tous les lecteurs du forum, réguliers ou occasionnels. ;) CreativeCalc est l'association qui gère Planète Casio. Ce n'est pas particulièrement une « face cachée » du forum, mais plutôt un outil légal pour les concours, événements et pour gérer l'argent qui tourne autour de leur gestion et de celle du site. L'Assemblée Générale annuelle a eu lieu il y a quelques jours (le 28 Août), et vous pouvez en lire le compte-rendu sur le site vitrine de l'association. » Compte-rendu de l'AG d'Août 2021 « À une époque les AG rentraient dans le détail de l'organisation du site, mais désormais on fait des « réunions de Planète Casio » (ouvertes à tous !) pour en parler plus librement. Les discussions en temps réel ainsi qu'à l'oral aident énormément à faire passer les bonnes idées, et vous pouvez lire le compte-rendu de la dernière sur le topic ci-dessous. ;) » Compte-rendu de la réunion de Planète Casio de Mai 2021 « Sur ce topic je me concentre sur les choses liées directement à CreativeCalc, à savoir : des estimations de budget, la collecte des cotisations de l'année pour le financer, la mise à jour de la mailing list, et un plan de se rencontrer en présentiel pour tenir une AG. Estimations du budget annuel Il y a essentiellement deux types de dépenses sur le forum : Les envois de lots de concours ou événement. Ça dépend beaucoup de l'activité du forum, mais pour 2021-2022 j'enverrai quelques lots au concours de rentrée, et j'ai aussi reçu un certain nombre de lots de CASIO Éducation pour le calendrier prévu dans PC² accompagnés de goodies. Il faut compter environ 7€ pour envoyer une calculatrice (en France), et entre 1.50€ et 4€ pour les goodies plus lourd (en France toujours). Il me reste 3 calculatrices cette année (concours de rentrée, CPC, Puzzle de l'Avent) donc j'estime que ça représentera environ 40€ pour aller jusqu'à l'été 2022. La location des services web pour maintenir la v5, la forge Gitea, et à peu près tous les services récents. L'hébergement PHP de la version actuelle du site est toujours payé par les fondateurs, mais comme ils ne sont pas apparus depuis longtemps on ne peut pas raisonnablement en rester dépendants. Le prix est invariant et représente 100€ par an. Selon les opportunités, on pourrait aussi aider les membres à se déplacer pour assister à l'AG en présentiel, on y reviendra. Collecte des cotisations La cotisation pour être membre de CreativeCalc est fixée à 5€. Être membre donne un droit de vote dans les décisions de l'association, ce qui est important pour tout ce qui touche au budget et cette année pour la potentielle AG en présentiel. Mais c'est surtout un moyen de soutenir le site ^^ En tant que trésorier, je m'occupe de gérer les adhésions pour cette année (2021-2022 donc). Il y a actuellement trois façons de verser une cotisation : Soit directement en liquide à Dark Storm ou moi (marche uniquement à Lyon) ; Soit via Paypal, en transférant à `contact@planet-casio.com` ; Soit par virement, à l'IBAN : FR76 1780 6008 1904 1189 7396 356. L'argent collecté ira directement financer les lots et services web de l'année. Les membres de l'association sont inscrits sur la mailing list de CreativeCalc et font partie du groupe Planète Casio Membre de CreativeCalc. Mise à jour de la mailing list Il apparaît qu'il y a quelques irrégularités sur la mailing list, avec des adresses qui devraient être inscrites mais ne le sont pas. Pour rappel, l'adresse de la mailing list est `creativecalc_adherents@framalistes.org`, et seuls les mails des inscrits sont acceptés (donc si vous y envoyez un mail sans être membre de l'association il ne sera pas transmis). Je me rebaserai sur les cotisations de l'année pour corriger la liste, qui contient aussi d'anciens membres. Organisation d'une AG en présentiel Depuis 2020 on a dans le fond de la tête une idée d'organiser une rencontre IRL (probablement à Lyon compte tenu de la répartition géographique des membres). Ce serait le moment parfait pour organiser une AG et discuter de vive voix de ce qu'on pense du présent et futur de Planète Casio. Il y a diverses considérations pratiques mais les communes peuvent aider à organiser ce genre d'événements pour les associations, donc il y a du potentiel. On peut aussi aider les gens à se déplacer pour venir. Bien sûr en 2020 et 2021 ce n'était pas possible pour les raisons que tout le monde connaît, donc on continue de surveiller en visant 2022. Dark Storm devrait apporter quelques détails rapidement. Le topic à suivre est Rencontre IRL, édition 2022. Voilà, c'est tout. Si vous avez des questions, vous pouvez les poser ici ou me demander directement en MP. Merci de votre attention :) Fri, 03 Sep 2021 09:44:30 +0200 La stratégie d'audience de Planète Casio https://www.planet-casio.com/Fr/forums/topic16859--.html L'autre soir on a eu une discussion assez poussée de l'audience de Planète Casio, et le renouvellement très réduit de la communauté. Je pense qu'il est temps de discuter franchement de la stratégie à suivre et de qui peut aider à l'accomplir. ;) La situation actuelle et les problèmes que ça pose En majorité, les membres inscrits sont là depuis longtemps. À l'inverse, on a peu de nouveaux membres qui débarquent avec leurs projets (voir le forum des projets) ; vous remarquerez en particulier l'absence quasi-complète de projets en Basic et Python (Shadow exclus). Le public qu'on a est beaucoup plus technique, beaucoup moins lycéen et pas nécessairement français. Un bon ancien exemple serait Sentaro21, ou un plus récent serait KBD2 (il y en a d'autres). Ce n'est pas tout à fait surprenant, étant donné que je suis admin et actif depuis longtemps et que je tire (pas forcément volontairement) dans cette direction. Mais ce nouveau public est très réduit, rien à voir avec les lycéens. Il est aussi très polyvalent : il y a beaucoup de place sur l'Internet technique pour les tours de force comme fxIP, et donc moyennement besoin de Planète Casio. Alors que les jeux en Basic des lycéens ils auraient du mal à se trouver une audience ailleurs. Avec des nouvelles générations plus petites qui s'attachent au forum, il y a à la fois moins d'attrait pour d'autres nouveaux membres, et moins de gens pour prendre la relève (ce qui est un peu un cercle vicieux). On a donc besoin d'une stratégie pour retrouver notre audience si on veut éviter de perdre doucement le momentum qu'on a. Notre ancienne audience : les lycéens La plupart venaient pour le Bac, les cours ou les jeux, et restaient pour les jeux ou le fun. On est quasiment tous passés par là, donc je pense que vous voyez le style. Récemment, il n'y en a quasiment plus pour plusieurs raisons : Bac réformé et sous pression du Covid, aplatissant complètement le pic d'audience du Bac (stats des inscriptions sur cette page, patientez durant le chargement) Le mode examen empêche l'utilisation de programmes, donc les élèves n'essaient même pas d'en installer Les jeux sur smartphone ont bien évolué, l'attrait de la calculatrice n'est pas pareil qu'en 2012 La force de ce public c'était sa taille : vu le nombre de lycéens en France, on récoltait toujours une audience suffisante pour entretenir le forum. Sans eux, c'est évidemment plus difficile. Déterminer notre identité et cible vise Je pense qu'il y a deux points importants à décider. C'est qui on vise, et avec quelle identité. Ou dit autrement, à quel public on s'adresse et comment on présente le site comme intéressant. Toute notre technique et expertise tourne autour des calculatrices Casio - de la programmation Basic aux questions de bas-niveau, en passant par l'utilisation des applications pré-installées. C'est aussi le point unique majeur qu'on a, parce que sur ces modèles et sans compter les communautés asiatiques avec lesquelles on a vraiment aucun contact, il n'y a vraiment personne avec l'activité et l'expertise de Planète Casio. TI-Planet serait le plus proche en termes d'activité, mais ils ne font pas de dev sur la plateforme. Donc personnellement je ne vois pas de plan viable qui nous en détourne. Par contre on peut réfléchir à comment on le présente ; c'est pas parce que les jeux ne tournent en théorie que sur une calculatrice Casio qu'on ne peut pas faire un effet PICO-8 et les partager avec plein de gens qui n'ont pas le modèle avec un émulateur web ou que sais-je. Pour ce qui est du public, il y a quelques options (si vous en avez d'autres je les ajouterai) avec des défis propres. Les lycéens (→ ils sont devenus difficiles à capturer) Les enseignants (→ contenu très différent, et on n'est pas protégés contre les réformes) Les joueurs ou gamedevs (→ il faut vendre l'attrait de la plateforme) Les bricoleurs (→ ils sont plus difficiles à retenir) Les options pour se faire connaître Selon le public visé, il y a différentes approches. Mais une est inévitable, et c'est les réseaux sociaux. Peu importe qui on vise, il y a toujours moyens de les atteindre par là. Pour l'instant, on a principalement un compte Twitter et une chaîne Youtube, ce qui est pas mal : on ne part pas de rien. Donc déjà je pense qu'on ferait bien de trouver quelqu'un pour être Community Manager et gérer le compte Twitter et la chaîne Youtube. Ça ne veut pas dire créer des programmes, ni créer des vidéos pou Youtube d'ailleurs, mais chercher notre audience, commenter, partager, et optimiser. Inutile de prétendre que c'est que du fun, mais c'est de loin notre meilleur piste je pense. Il y a d'autres aspects développeur genre les moteurs de recherche ; Masséna a fait remarquer notre référencement est terrible, et personnellement si je cherche jeux casio graph 90+e Planète Casio n'apparaît pas avant la 3ème page. On a donc aussi du SEO à faire... (Là aussi je mettrai à jour si vous avez d'autres idées.) Ce topic Le but de ce topic est de discuter de notre stratégie : en gros (mais pas seulement) quelle identité on se fixe, quel public on vise, et comment on se fait connaître. Wed, 25 Aug 2021 09:38:12 +0200 La référence du BBCode https://www.planet-casio.com/Fr/forums/topic16821--.html Titres Titres Ce qui donne le titre ci-dessus Intraliens Intraliens – Titres – Intraliens – Formatage usuels en ligne – Formatage usuels en bloc – Images – Listes – Tableaux – Titres – Intraliens – Formatage usuels en ligne – Formatage usuels en bloc – Images – Listes – Tableaux Formatage usuels en ligne Du gras, de l'italique, du souligné, du barré, de la couleur un peu de tout à la fois. Ou avec la la plus belle des couleurs. Avec un lien. Et un lien formaté (cf #183611). Du `code inline` via les backtick, du code comprenant des `backticks` avec les balises inlinecode. Du gras, de l'italique, du souligné, du barré, de la couleur un peu de tout à la fois. Ou avec la la plus belle des couleurs. Avec un lien. Et un lien formaté (cf #183611). Du `code inline` via les backtick, du code comprenant des `backticks` avec les balises inlinecode. Formatage usuels en bloc Une citation anonyme : Faire les choses avec sérieux, mais ne pas se prendre au sérieux. Une citation avec auteur : Même si la vie semble difficile, il y a toujours quelque chose que vous pouvez faire et réussir. Du code : print("Hello World!") Une citation anonyme : Faire les choses avec sérieux, mais ne pas se prendre au sérieux. Une citation avec auteur : Même si la vie semble difficile, il y a toujours quelque chose que vous pouvez faire et réussir. Du code : print("Hello World!") Images https://www.planet-casio.com/storage/forums/witch2-16821.png https://www.planet-casio.com/storage/forums/witch2-16821.png https://www.planet-casio.com/storage/forums/witch2-16821.png https://www.planet-casio.com/storage/forums/witch2-16821.png https://www.planet-casio.com/storage/forums/witch2-16821.png https://www.planet-casio.com/storage/forums/witch2-16821.png https://www.planet-casio.com/storage/forums/witch2-16821.png https://www.planet-casio.com/storage/forums/witch2-16821.png https://www.planet-casio.com/storage/forums/witch2-16821.png https://www.planet-casio.com/storage/forums/witch2-16821.png Listes Item 1 Item 2 Item 3 Item 4 Item 5 Item 6 Item 1 Item 2 Item 3 Item 4 Item 5 Item 6 Tableaux Colonne 1Colonne 2Colonne 3 Cellule 1-1Cellule 1-2Cellule 1-3 Cellule 2-1 | Cellule 2-2 | Cellule 2-3 Cellule 3-1, Cellule 3-2, Cellule 3-3 Colonne 1Colonne 2Colonne 3 Cellule 1-1Cellule 1-2Cellule 1-3 Cellule 2-1 | Cellule 2-2 | Cellule 2-3 Cellule 3-1, Cellule 3-2, Cellule 3-3 Divers trucs à la con Lien vers le profil de Dark Storm. Barre de progression Never gonna give you up! Lien vers le profil de Dark Storm. Barre de progression Never gonna give you up! Sun, 04 Jul 2021 20:37:08 +0200 Label², le nouveau Label de Qualité https://www.planet-casio.com/Fr/forums/topic16751--.html Le label de qualité est une récompense honorifique attribuée aux programmes considérés comme les « meilleurs » programmes de Planète Casio, qu'ils soient particulièrement plaisants à jouer, innovateurs, de qualité presque professionnelle, ou ancrés dans l'histoire et l'identité du site. Les programmes ayant reçu le label sont généralement mis en valeur pour les visiteurs, joueurs, et membres du forum. Description générale du Label Les labels sont attribués par un comité de test (liste des membres ci-dessous) qui teste périodiquement les nouveaux programmes ainsi que ceux soumis par les membres sur le topic du label (accessible par le lien « Soumettre au label » sur toute page de programme). N'importe quel membre peut soumettre un programme, et on apprécie ceux qui prennent le temps de soumettre les programmes des autres ! La décision d'attribuer un label est prise selon des critères de test classiques, mais aussi l'opinion des testeurs et d'autres considérations comme la ligne éditoriale du site. Nous pensons que c'est la méthode la plus juste car chaque testeur est unique et chaque programme est unique. Les programmes soumis sur le topic reçoivent une réponse publique sous la forme d'un test avec une explication du comité et des suggestions d'amélioration si le label n'est pas attribué ; si le programme est mis à jour il peut être soumis de nouveau. Les nouveaux programmes qui n'ont pas été soumis explicitement reçoivent un test plus classique. Les règles du jeu • Recrutement : les membres du comité tournent, quand quelqu'un s'en va un autre membre est recruté ; idéalement on ne remplace pas tout le comité d'un coup pour que les nouveaux puissent interagir avec les anciens. Avoir un lycéen pour représenter l'audience de Planète Casio est souhaitable. • Discussion et vote : les discussions se font en privé, le label attribué à l'unanimité des 3 personnes. Si quelqu'un ne peut pas tester pour des raisons exceptionnelles (personnelles, pannes, etc) c'est à l'unanimité de 2 personnes (pas moins). • Annonces et tests : tout test de programme donne lieu à une note ou un test sur le forum. Si le programme avait déjà été testé la note ou le test est mis à jour. Si le programme était soumis explicitement le test est plus orienté sur les critères du label, sinon c'est un test normal pour encourager l'auteur du programme. En plus de ça on a les annonces périodiques sur le topic public du label. • Divers : On ne retire pas les anciens labels. Les critères de notation Lorsqu'un test est publié par le comité, il suit cette normalisation : :+: est une remarque positive qui participe à l'attribution du label :~: est une remarque neutre ou un conseil d'amélioration pour aller plus loin :-: est un axe d'amélioration, à corriger pour l'attribution du label Si les points sont regroupés par catégorie, celles-ci ne servent qu'à faciliter la lecture des remarques. Elles ne servent pas de cadre fixe et récurrent pour l'évaluation du programme. Le comité du Label de Qualité Au 22 avril 2021, le comité est composé de : • Dark Storm • KikooDX • Potter360 Si l'un des membres venait à ne plus pouvoir tester les jeux proposés, un nouveau serait choisi par l'équipe du site. Liens utiles L'ancien nouveau topic du Label de qualité Thu, 29 Apr 2021 21:02:45 +0200 PC² : Le retour du forum en 2021 https://www.planet-casio.com/Fr/forums/topic16681--.html Note aux lecteurs : Ce topic était initialement privé, les 2 premières pages de commentaires sont d'anciennes discussions ; certains liens peuvent être privés. J'ai déjà mentionné à plusieurs occasions mes plans pour améliorer l'activité du forum cette année. On sait tous à quel point à la fois les forums et les calculatrices n'ont pas trop la côte depuis plusieurs années, ce à quoi s'ajoute l'organisation nécessaire pour faire vivre une communauté non triviale. Ça fait donc plusieurs années que le forum tient comme il peut. Cette année, je compte jouer toutes les cartes possibles pour redresser la situation et recréer une activité conséquente similaire à celle que j'ai connue en 2014. Il s'agit donc de passer à la puissance supérieure. ;) La vision Les réunions de Planète Casio ont déjà évoqué ce sujet plusieurs fois, mais je rappelle ici les éléments principaux. • Plateforme : le format forum est toujours le mieux adapté. On a parlé maintes fois des plateformes émergentes comme Discord/Instagram/etc, mais ces systèmes n'ont aucune traçabilité et tout y est perdu après quelques mois. La v5 fait partie du programme non pas parce qu'on en a besoin pour redresser l'activité, mais parce que tout comme l'activité déclinante on ne peut plus la traiter passivement. • Sujet : Il existe des possibilités d'ouverture (eg. Arduino/Gamedev/Mobile) mais ces domaines sont déjà occupés par des très grandes communautés et on n'a pas l'expérience. Pour l'instant on reste sur les calculatrices comme on l'a toujours fait. • Projets : le coeur de l'activité, autour de 2014 ils suffisaient à entretenir le forum. Il faut d'abord les attirer en proposant des ressources à jour pour tous les langages (tutoriels de programmation), en présentant ceux qui existent (Press Shift, WE de test, RDP, etc), et en entretenant ceux qui se présentent (feedback, mise en page d'accueil, etc), bouclant la boucle pour les prochains. • Rédaction : la rédaction qu'on a connue ces dernières années a beaucoup progressé et la qualité est largement au-dessus de ce que j'ai connu en 2014/2015. Le but est de rester à ce niveau de détail/qualité et de travailler plutôt sur le rythme et l'organisation des publications. • Événements : je pense qu'on a pas mal de formules intéressantes (CPC, Concours de rentrée, 1kBCJ, WE de test, Casio Awards, Puzzle de l'Avent...), la plus grosse difficulté est de bien les organiser. Les nouvelles idées sont bienvenues comme d'habitude. • Ressources : on se doit d'avoir des ressources à jour en permanence et des bons tutoriels si on veut pouvoir attirer et former les personnes intéressées : les programmes ne sortent pas de nulle part. Liste de tâches hiérarchisée Voici la liste que je compte tenir à jour en permanence. Le but est de mettre le plus de noms et de dates possibles sur les éléments, pour qu'on puisse s'organiser au mieux pour tout boucler avant la fin de l'année. J'ai probablement oublié des choses, mais on peut commencer comme ça ! (Oui la majorité est générée par un script.) Les éléments en gras sont les tâches groupées initialement pour fin Avril. Plateforme `█``███` Réparer les problèmes systémiques de la v4.3. `@`Lephe ______ `████` Faciliter la soumission de notes et de tests. ______ `██``██` Ajouter des notifications GLaDOS pour les notes et tests. (Pas possible sur les tests pour l'instant.) ______ `████` Enrichir les articles de descriptions/images pour améliorer leur présentation. ______ `███``█` Implémenter plus de mécanismes pour faciliter l'édition. [1] ______ `████` Refaire une passe sur le topic des suggestions. [2] ______ `█``███` Réactiver les balises dans `` pour les vieux messages. `█``███` Mettre la v5 en production et archiver (sans fermer) la v4.3. `@`Darks `@`Lephe `@`Eragon ______ `███``█` Gestion des comptes des utilisateurs. ______ `███``█` Implémentation du forum. ______ `█``███` Implémentation des programmes, notes, tests, et recherches. ______ `████` Implémentation des tutoriels et ressources générales. ______ `████` Protocole de migration des contenus de la v4.3 vers la v5. ______ :here: La plupart des détails sont gérés sur le dépôt Gitea, devs/PCv5. Rédaction `██``██` Simplifier le travail de rédaction avec des lignes directrices, techniques, et outils d'automatisation. [3], [4] ______ `████` Rédiger un tutoriel sur les techniques de capture d'écran ______ :here: Grouper les techniques dans La rédaction : enjeux, limites et techniques. ______ :here: Grouper les outils dans le panneau de gestion. `████` Revoir les formats de la RDP, pour l'édition 200, et du Label de Qualité. [5], [6] ______ `████` Déterminer le format de la RDP. ______ `████` Déterminer le format du Label de Qualité (a priori : comme avant, mais avec un comité désigné). `████` Planifier une liste de Press Shift (projets du moment ou classiques) pour trouver un bon rythme. `████` Produire un peu de contenu vidéo : pas transcendant, juste pour mieux s'exposer sur les réseaux sociaux. ______ `█``███` Rassembler des techniques pour faire des captures vidéo de jeux Basic, add-ins, Python, etc. ______ `████` Rédiger un tutoriel sur ces techniques. ______ :here: Récupérer les introductions soumises avec le temps. ______ :here: Essayer de monter un rythme d'illustration vidéo de choses simples, eg. RDP. Événements `████` Composer un premier calendrier des événements pour toute l'année. `@`Lephe `████` Organiser un CPC Basic et un CPC add-ins. `@`Lephe ______ `████` Trouver des sujets solides. `█``███` Monter le concours de rentrée 2021. `@`Critor `@`Lephe ______ `███``█` Fixer les modalités générales. ______ `██``██` Trouver les sujets généraux et les détails des épreuves. ______ `████` Implémenter les programmes. ______ `████` Planifier les articles, le déroulement des épreuves, etc. `█``███` Réfléchir à un format pour un concours de graphismes. [7]. `@`Massena `████` Préparer un Casio Awards. [8] ______ `████` Trouver un volontaire ou un jury pour les tests, une personne pour la rédaction et l'organisation. ______ `████` Déterminer une période à évaluer et une liste de programmes (à étoffer durant l'année). ______ `████` Tester les programmes et organiser les publications. `██``██` Planifier des week-ends de test et des réunions de Planète Casio. `@`Lephe `████` Construire le puzzle de l'Avent 2021. `@`Lephe ______ `████` Formuler un ou des sujets algorithmiques sympas à présenter. ______ `████` Construire les sujets du jour. ______ `████` Planifier les articles, les indices et les solutions. `██``██` Demander des lots à CASIO Éducation pour l'année. `@`Lephe Ressources `███``█` Remettre à niveau les ressources existantes. ______ `███``█` Compléter la TODO list du forum. ______ `███``█` Revoir l'organisation des pages statiques. [9] ______ `████` Revoir l'organisation des liens introductifs en page d'accueil. [10] `█``███` Créer des nouvelles ressources à la hauteur. ______ `█``███` Compléter le tutoriel des applications de Shadow. ______ `██``██` Extraire la partie Python et la développer en un tutoriel Python similaire à celui du Basic de Totoyo. ______ `████` Organiser les informations sur le wiki, à intégrer étroitement à la v5 pour plus de visibilité. [11] ______ :here: Ne pas sous-estimer cette partie, c'est du lourd. Questions de fond (à discuter sur d'autres topics) • Comment motiver les gens à tester plus ? __ :here: Mettre en valeur les tests sur le site. __ :here: Ajouter un système de test plus libre (en attendant la v5). __ :here: Maintenir le rythme des Press Shift, plus de WE de test. Calendrier des événements Les régions oranges sont les opportunités pour organiser des réunions de Planète Casio ; je planifie trois réunions dans l'année, à chaque fois il y a plusieurs week-ends d'affilée. Il y aura des sondages (Framadate) pour choisir les dates exactes. L'événement "ALLDR" est une idée de KikooDX pour un événement dans le style de À la limite du raisonnable mais en C. events-2021-v1.png Comment on fonctionne Sur ce topic, je souhaiterais parler presque exclusivement de la liste, de ce qu'on y ajoute, répartit, et comment on date le tout. C'est juste pour pas me perdre et pour qu'on puisse avoir un topic clair qui retrace tout ce qu'on fait concrètement. Les discussions sur ce qu'il faut faire et comment sont très bienvenues mais mieux sur d'autres topics, où on aura toute la place d'argumenter, avant de noter les conclusions ici. N'hésitez pas à en créer. ^^ Pour que ça marche, tous les efforts sont bienvenus, donc je vous propose de fonctionner comme ça. • S'il y a quelque chose que vous souhaitez faire ou contribuer, déclarez-le, je vous ajouterai en `@` à côté. • Si vous pensez que certaines choses doivent être prioritaires, pareil, pour l'instant ce n'est pas clair. • Pour chaque contribution ou nouvelle idée, un commentaire, et je mettrai à jour le topic. Le round actuel de tâches doit se terminer fin Avril, je ferai ensuite une autre passe pour des choses à faire dans le mois de Mai. Je rendrai probablement ce topic public une fois que les détails auront été relus par suffisament de personnes et qu'on sera certains qu'il n'y a pas de conflit sur la marche à suivre. ^^ C'est partie pour une année à sensations façon Planète Casio ! :bounce: Tue, 02 Mar 2021 22:03:23 +0100 TDM #XX : Les animations et les structures de données https://www.planet-casio.com/Fr/forums/topic16659--.html Le Tutoriel du Mercredi (TDM) est une idée proposée par Ne0tux, qui recouvre tous les usages de la calculatrice - des applications de Casio à la conception de jeux en passant par la production artistique. Aujourd'hui, nous allons voir les animations en C/gint et leur rapport avec les structures de données Niveau : ★★★★☆ Tags : Animations, gint, POO Bonjour et bienvenue dans ce TDM #21 ! Aujourd'hui nous allons parler des animations en C pour calculatrices et de comment les créer avec les structures ! Je précise que ce tutoriel contient des codes en C pour gint de Lephenixnoir, mais le code doit être facilement convertible pour le SDK "officiel" avec un poil de jugeote ! ;) Voici le résultat final : https://i.imgur.com/vp1ExtA.gif Durant ce tutoriel, j'utiliserai les frames suivants : https://i.imgur.com/l4L09nY.png Frame idle https://i.imgur.com/GhsLSYF.png Frame de marche Sommaire : 1) Qu'est ce qu'une animation ? 1.1) La boucle principale d'un jeu vidéo 2) Animation et boucle principale 2.1) Premières idées 2.2) L'utilité du sinon 2.3) L'apparition de la variable "frame suivant" 3) La POO (Programmation Orientée Objet) 3.1) Definition 3.2) L'exemple du catalogue d'animaux 4) S'inspirer de la POO pour les animations 4.1) Premières idées 4.2) Détection du clavier 5) Les structures de données en C 5.1) Equivalent des classes 5.2) Equivalent des objets 5.3) Affichage 5.4) Lire les entrées du joueur 5.5) Continuer l'animation précédente 5.6) Le code entier 6) Conclusion 7) Liens utiles Commençons sans plus tarder par des révisions : Qu'est ce qu'une animation ? La question paraît bête : oui, je sais ce qu'est une animation : c'est une suite d'images passées très vite qui donne une impression de mouvement ! Oui, effectivement, bravo ! Mais dans un jeu vidéo ? La boucle principale d'un jeu vidéo Vous savez peut être qu'un jeu vidéo est, en général, constitué d'une boucle principale. Par exemple, pour détecter si l'utilisateur appuie sur la touche , il va y avoir une boucle principale, dans laquelle le jeu détecte si l'utilisateur appuie sur la touche. En algorithmique ça donne ca : Répéter ∞ fois { Si touche est pressée : { //faire l'action } } et, en C/gint on a approximativement ca : int main void(){ while(True){ if(getkey().key == KEY_EXE){ //faire l'action } } } Mais...attendez...une boucle qui change selon l'environnement et qui va très vite...ça ne vous rappelle pas quelque chose ? Oui, les animations ! Animations et boucle principale Premières idées Prenons par exemple une "boucle" d'animation (une animation qui se répète toutes les 3 images par exemple). On pourrait organiser un truc comme ça : on crée une boucle, et les images s'affichent chacune une répétition de la boucle sur 3. On pourrait alors imaginer un truc du genre : A la première répétition : afficher image1 A la deuxième répétition : afficher image2 A la troisième répétition : afficher image3 Puis on recommence au début ! C'est un bon moyen de faire une animation, mais comment la réaliser ? Avec une variable, du genre : Nouvelle variable nommée "a" = 1 Répéter ∞ fois : { si a = 1 alors afficher la première image si a = 2 alors afficher la deuxième image si a = 3 alors afficher la troisième image si a = 1 alors mettre la variable "a" à 2 sinon si a = 2 alors mettre la variable "a" à 3 sinon si a = 3 alors mettre la variable "a" à 1 } ? En soi cela marche mais ce code est long et n'est pas très lisible, il faut de la concentration pour le comprendre. Et puis, imaginez que vous vous retrouvez avec une animation contenant 3 images (que je vais appeler dorénavant des "frames"), le code serait complexe et illisible : on appelle cela un code spaghetti Voici la représentation mathématique d'un code spaghetti : https://s3.amazonaws.com/media-p.slid.es/uploads/paulcayon/images/417448/spaghetti.jpg C'est pas beau à voir, hein ?. Le second problème, c'est que tous les "si ... alors ... sinon ..." sont placés dans le sinon du premier "si ... alors ... sinon ...", ce qui pose des problèmes : si le premier "si ... alors ... sinon ..." a un problème faisant que le "sinon" ne sera jamais exécuté, tout le reste est à l'arrêt. On appelle cela les dépendances : certaines lignes de code sont dépendantes d'autres lignes, et cela peut poser problème, et peut créer l'effet domino : en effet, imaginons que dans un code toutes les lignes sont dépendantes (ce qui est très peu probable), un problème qui ne concerne que la ligne 1 va arrêter la ligne 2 car elle est dépendante de la ligne 1, la ligne 2 va arrêter la ligne 3, la 3 va arrêter la 4 etc... Mais alors, pourquoi mettre tout le code dans des "sinon" ? Très bonne question. L'utilité du "sinon" Pour y répondre je vais prendre un exemple de code en algorithmique que j'appelle " l'interrupteur " : un texte est affiché à l'écran, "1" ou "0", et quand l'utilisateur appuie sur une touche, disons , l'état du texte change : si "0" était affiché on affiche maintenant "1" et vice-versa. Cela donne : Répéter ∞ fois : { Afficher la variable "a" Si la touche EXE est pressée alors : Si la variable "a" = 0 alors mettre la variable "a" à 1 Sinon mettre la variable "a" à 0 } Le sinon est indispensable : réfléchissons. Imaginons que l'on ne le mette pas, on a ça : Répéter ∞ fois : { Afficher la variable "a" Si la touche EXE est pressée alors : Si la variable "a" = 0 alors mettre la variable "a" à 1 Si la variable "a" = 1 alors mettre la variable "a" à 0 } La suite imagine que a = 0 au départ : lorsque EXE est pressé on a cette ligne : Si la variable "a" = 0 alors mettre la variable "a" à 1 Or a = 0 donc ce if s'exécute et a = 1. Ensuite : Si la variable "a" = 1 alors mettre la variable "a" à 0 Depuis la ligne précédente a = 1 donc ce if s'exécute donc a = 0. Au final, a n'a pas changé, le code ne marche pas. Le sinon ne vérifie pas la condition avant de s'exécuter mais avant d'exécuter le if, donc ici cela marche. Attends... j'ai une idée... pourquoi ne pas créer une variable framesuivant pour chaque image ? Et dans le code on dit : affiche le frame actuel et met le frame actuel au frame suivant ! Effectivement, c'est la solution, mais... comment faire ? L'apparition de la variable "frame suivant" Les variables sont multipliées par 2 ; pour 3 frames on a ces variables : frame1 ; frame1next ; frame2 ; frame2next ; frame3 ; frame3next. Et cela en fait 6 ! Encore là, c'est acceptable, mais imaginez une animation de 60 frames : on a 120 variables ! Et si en plus chaque frame a une position x et une position y, ce qui est plus propre, chaque frame a 4 variables ; pour le frame 1 ces variable sont : frame1 (l'image) , frame1next, frame1posx , frame1posy. Pour une animation de 60 frames, cela représente tout de même 240 variables ! Cela impacte en premier lieu le développeur, qui ne s'y retrouvera pas dans ses variables, mais aussi la machine, car les variables prennent de la RAM, et l'utilisateur, qui va voir le programme ralenti. Ha, j'ai une idée ! Et si on... heu... ha non...heu... Bon, j'ai la solution, ne cherchez pas. Et si on s'inspirait de... La POO (Programmation Orientée Objet) On m'informe dans l'oreillette que j'ai dit un mot compliqué... Ne vous inquiétez pas, je vais expliquer. Je demande juste aux programmateurs pointilleux de ne pas me cracher dessus : je vais résumer un max. Résumons... nous aurions besoin de plusieurs variables par frames... Définition La programmation orientée objet est un style d'écriture du code, et Wikipédia dit ici que : Dans ce style, le code source est une suite de descriptions de classes ou de prototypes, avec la description de leurs caractéristiques ( propriétés ) et de leurs comportements ( méthodes ). Ne paniquez pas. En POO, on crée des objets, et les variables ont des "états" en fonction de ces objets. L'exemple du catalogue d'animaux Prenons un exemple : je veux faire un programme simple dans un langage quelconque qui demande à l'utilisateur le nom de l'animal et la caractéristique, et le programme donne le résultat (Exemple : le programme demande le nom de l'animal, l'utilisateur répond "Chien", il demande la caractéristique, l'utilisateur rentre "Cri" et le programme renvoie "Wouf !"). Pour cela on pourrait faire un truc du genre : (en algorithmique) Afficher : "Quel animal ?" Attendre la saisie de l'utilisateur et la stocker dans la variable "animal" Afficher : "Quelle caractéristique ?" Attendre la saisie de l'utilisateur et la stocker dans la variable "caractéristique" Si animal = "chien" : { Si caractéristique = "Cri" : { Afficher "Wouf !" } Si caractéristique = "Poids" : { Afficher "Le poids moyen se situe entre 15 et 25 kg." } Si animal = chat : { Si caractéristique = "Cri" : { Afficher "Miaou !" } Si caractéristique = "Poids" : { Afficher "Le poids moyen se situe entre 4 et 6 kg." } } Vous le voyez, ce code est long et il faut du temps pour le comprendre. L'inventeur de la POO a trouvé ce problème embarrassant, et voici sa solution : on crée deux variables : Cri et Poids. On crée deux "objets" : chat et chien, et pour chaque objet une "version" différente de la variable est crée : par exemple il existe deux versions de la variable Cri : celle du chat et celle du chien. Voici une partie du code amélioré avec la POO : Nouvelle variable "Cri" Nouvelle variable "Poids" Nouvel objet "Chien" : { Sa version de "Cri" = "Wouf !" Sa version de "Poids" = 20 } Nouvel objet "Chat" : { Sa version de "Cri" = "Miaou !" Sa version de "Poids" = 4 } Oui, c'est perturbant mais vous allez vous y faire. Tous mes objets sont des animaux, mais imaginons que je veuille créer un objet "fourmi", pour laquelle je veux enlever la variable "cri". Facile : on ajoute au code précédent : Nouvel objet "Fourmi" : { Sa version de "Poids" = "150 milligrammes" } ! En soi oui. Mais la programmation est pleine de règles, et on ne peut pas choisir de mettre ou non une variable. C'est un peu comme pour un livre : si tu écris un roman mais que tu ne trouves pas de nom, tu ne peux pas décider de ne pas en mettre. Il va falloir créer des "types" d'objets. On va par exemple créer le type "Animal", dans lequel on va créer les variables "Poids" et "Cri", et créer le type "Insecte" dans lequel on va créer la variable "poids" ; en programmation on appelle ces types des "classes". On peut alors obtenir un truc du genre : Nouvelle classe "Animal" : { Elle contient la nouvelle variable "Cri" Elle contient la nouvelle variable "Poids" } Nouvelle classe "Insecte" : { Elle contient la nouvelle variable "Poids" } Nouvel objet "Chien" de type "Animal" : { Sa version de "Cri" = "Wouf !" Sa version de "Poids" = 20 } Nouvel objet "Chat" de type "Animal" : { Sa version de "Cri" = "Miaou !" Sa version de "Poids" = 4 } Nouvel objet "Fourmi" de type Insecte : { Sa version de "Poids" = "150 milligrammes" } On touche au but ! Mais, pour les entrées de l'utilisateur ? En POO, on peut récupérer la "version" d'une variable via cette syntaxe : (la plus courante) [Nom_de_l'objet].[nom_de_la_variable] Par exemple, dans notre cas, écrire dans mon programme Afficher Fourmi.Poids affichera "150 milligrammes", ou écrire Afficher Chien.Cri affichera "Wouf !". On pourrait donc faire ca : Afficher : "Quel animal ?" Attendre la saisie de l'utilisateur et la stocker dans la variable "animal" Afficher : "Quelle caractéristique ?" Attendre la saisie de l'utilisateur et la stocker dans la variable "caractéristique" Nouvelle classe "Animal" : { Elle contient la nouvelle variable "Cri" Elle contient la nouvelle variable "Poids" } Nouvelle classe "Insecte" : { Elle contient la nouvelle variable "Poids" } Nouvel objet "Chien" de type "Animal" : { Sa version de "Cri" = "Wouf !" Sa version de "Poids" = 20 } Nouvel objet "Chat" de type "Animal" : { Sa version de "Cri" = "Miaou !" Sa version de "Poids" = 4 } Nouvel objet "Fourmi" de type Insecte : { Sa version de "Poids" = "150 milligrammes" } Afficher Animal.Caractéristique Et on arrive au résultat souhaité ! Mais les animations dans tout ca ? Ca arrive... S'inspirer de la POO pour les animations Premières idées On pourrait par exemple faire un truc comme cela pour relier les 2 sujets... Nouvelle classe "frames" : { Nouvelle variable "Image" Nouvelle variable "Nextframe" Nouvelle variable "Posx" Nouvelle variable "Posy" } Nouvel objet "Frame1" de type "frames" : { image = image_frame1 nextframe = "Frame2" Posx = 1 Posy = 10 } Nouvel objet "Frame2" de type "frames" : { image = image_frame2 nextframe = "Frame3" Posx = 1 Posy = 10 } Nouvel objet "Frame3" de type "frames" : { image = image_frame3 nextframe = "Frame1" Posx = 1 Posy = 10 } Nouvelle variable "FrameActuel" = Frame1 Répéter ∞ fois : { Afficher FrameActuel.image Attendre 25 ms FrameActuel = FrameActuel.nextframe } On commence à y arriver ! Ici, on a une animation qui fonctionne, mais qui ne s'arrête pas. Détection du clavier Il faudrait créer une variable de type boolean isAnimated, la mettre à true si on appuie sur le bouton permettant d'avancer, et l'animation se fait seulement si isAnimated est à true. Et pour savoir quand l'animation est finie, on crée une variable AnimateTime, sorte de décompte avant la fin du frame. On a ce code : Nouvelle classe "frames" : { Nouvelle variable "Image" Nouvelle variable "Nextframe" Nouvelle variable "Posx" Nouvelle variable "Posy" } Nouvel objet "Frame1" de type "frames" : { image = image_frame1 nextframe = "Frame2" Posx = 1 Posy = 10 } Nouvel objet "Frame2" de type "frames" : { image = image_frame2 nextframe = "Frame3" Posx = 1 Posy = 10 } Nouvel objet "Frame3" de type "frames" : { image = image_frame3 nextframe = "Frame1" Posx = 1 Posy = 10 } Nouvelle variable "FrameActuel" = Frame1 Répéter ∞ fois : { Si touche avancer est pressée : { Mettre isAnimated à true Mettre AnimateTime à 3 //3 car il y a 3 frames avant la fin de l'animation } Si isAnimated = true : { Afficher FrameActuel.image Attendre 25 ms FrameActuel = FrameActuel.nextframe Enlever 1 à AnimateTime Si AnimateTime = 0 : { //l'animation est terminée Mettre isAnimated à false } } Sinon : { //Idle est l'image de la position inactive Afficher Idle } } Bon, on a la base, maintenant... Les structures de données en C Bon, super, nous avons le code en algorithmique ! Mais je vous rappelle que gint, lui, est en C ! Alors comment passer de l'un à l'autre ? Equivalent des classes En C, la POO n'existe pas , mais il existe une solution similaire : les "structures". Pour définir l'équivalent d'une classe, rien de plus simple : struct name_of_class { int variable1; long variable2; } Equivalent des objets Pour définir l'équivalent d'un objet, c'est plus compliqué. Je vais d'abord donner la syntaxe d'un objet faisant partie de la classe "name_of_class" crée précédemment : struct name_of_class name_of_object[2] { {12,14} //Dans l'exemple précédent, la valeur de la variable variable1 pour l'objet name_of_object[1] est 12 et la valeur de la variable variable2 pour l'objet name_of_object[1] est 14 {20,41} } Alors, je sais que c'est difficile à comprendre, mais chaque "objet" créé est une liste d'"objets". Mais en soi cela peut être une bonne idée : on crée une "liste d'objets" pour chaque animations, et chaque objet est un frame. Concrètement, voyons le code de la structure anim, je vous le donne et vous explique après : struct anim { bopti_image_t *img; int duration; struct anim *next; }; La 1ère variable, bopti_image_t *img; est la variable contenant l'image. La 2ème, duration, contient le nombre de frames sur lesquels l'image va rester avant de passer à une autre animation La 3ème, struct anim *next;, est un pointeur. C'est une variable qui envoie vers une autre variable. Ici, elle contient le frame suivant, qui est aussi de type struct. Voici donc ce qu'on obtient pour l'animation de marche : struct anim anim_walk[2] = { { &img_personnagemarche, 3 , &anim_walk[1] }, { &img_personnage, 3, &anim_walk[0] }, }; Pour la facilité du code on va ajouter une animation idle : struct anim anim_idle[1] = { { &img_personnage, 1, &anim_idle[0] }, }; Et voici finalement tout le code des structures, à mettre avant int main(void) : struct anim { bopti_image_t *img; int duration; struct anim *next; }; struct anim anim_idle[2] = { { &img_personnage, 40, &anim_idle[1] }, { &img_personnage2, 40, &anim_idle[0] }, }; struct anim anim_walk[2] = { { &img_personnagemarche, 3 , &anim_walk[1] }, { &img_personnage, 3, &anim_walk[0] }, }; Pour créer la variable current_anim, sachant que celle ci est un pointeur, il faut faire : struct anim *current_anim = &anim_idle[0]; &anim_idle[0] est l'animation par défaut, sachant qu'en arrivant sur l'add-in le personnage est normalement en position idle. Et voici toutes les variables à définir avant la boucle : struct anim *current_anim = &anim_idle[0]; int current_anim_time_left = 0; extern bopti_image_t img_personnage; extern bopti_image_t img_personnagemarche; //État du personnage : 0=arrêté, 1=marche int state = 0; //État du personnage au frame précédent int previous_state = 0; Affichage Pour l'affichage de notre animation, rien de compliqué : on affiche aux positions x et y de current_anim l'image de current_anim comme ceci : dclear(C_WHITE); dimage(current_player->x,current_player->y, current_anim->img); dupdate(); Lire les entrées du joueur Ensuite on va lire les entrées du joueur ; et pour cela nous allons utiliser keydown qui nécessite un clearevents(); qui va effacer les évènements précédents. Lors de l'appui sur une touche il va falloir changer d'animation : pour faire cela proprement, on va créer 2 variables : state, qui va contenir l'état de notre personnage (si la touche permettant d'avancer est pressée, state = 1) et previous_state, qui contient le state du frame précédent. Si state = 1 mais que previous_state = 0, on vient de commencer à marcher, et on peut donc passer à l'animation de marche, et vice-versa. Ca donne : (entrées + test des variables state et previous_state) clearevents(); state = 0; if(keydown(KEY_RIGHT)) state = 1; if(previous_state == 0 && state == 1) { //On vient de commencer à marcher current_anim = &anim_walk[0]; current_anim_time_left = current_anim->duration; } else if(previous_state == 1 && state == 0) { // On vient de s'arrêter current_anim = &anim_idle[0]; current_anim_time_left = current_anim->duration; } Continuer l'animation précédente Bon, ca c'est si on vient de commencer à marcher, ou de s'arrêter, mais si il n'y a aucun changement ? Et bien, on enlève 1 à current_anim_time_left et, si il est égal à 0, on met current_frame au frame suivant et current_current_anim_time_left à current_anim_time_left = current_anim->duration ! Voici le code : (à placer après le bout de code précédent, le else correspond à " if(previous_state == 0 && state == 1) ") else { //On continue l'anim précédente current_anim_time_left--; if(current_anim_time_left <= 0) { current_anim = current_anim->next; current_anim_time_left = current_anim->duration; } } Puis, si state = 1, on ajoute 1 à x pour que le personnage avance comme ceci : if(state == 1) { x = x+1; } } Enfin, on met le délai d'attente, puis on met previous_state à state : //Délai sleep_us(25000); // Préparation des invariants du frame suivant previous_state = state; Et voilà ! Le code entier Voici le code entier : #include <gint/display.h> #include <gint/keyboard.h> #include <gint/clock.h> extern bopti_image_t img_personnage; extern bopti_image_t img_personnagemarche; struct anim { bopti_image_t *img; int duration; struct anim *next; }; struct anim anim_idle[2] = { { &img_personnage, 40, &anim_idle[1] }, { &img_personnage2, 40, &anim_idle[0] }, }; struct anim anim_walk[2] = { { &img_personnagemarche, 3 , &anim_walk[1] }, { &img_personnage, 3, &anim_walk[0] }, }; int main(void) { struct anim *current_anim = &anim_idle[0]; int current_anim_time_left = 0; extern bopti_image_t img_personnage; extern bopti_image_t img_personnagemarche; //État du personnage : 0=arrêté, 1=marche int state = 0; // État du personnage au frame précédent int previous_state = 0; while(a != 1) { //Affichage dclear(C_WHITE); dimage(current_player->x,current_player->y, current_anim->img); dupdate(); //Lecture des entrées ; si on n'appuie sur rien, state=0 clearevents(); state = 0; if(keydown(KEY_RIGHT)) state = 1; //Exécution des animations if((previous_state == 0 && state == 1)) { //On vient de commencer à marcher current_anim = &anim_walk[0]; current_anim_time_left = current_anim->duration; } else if(previous_state == 1 && state == 0) { //On vient de s'arrêter current_anim = &anim_idle[0]; current_anim_time_left = current_anim->duration; } else { //On continue l'anim précédente current_anim_time_left--; if(current_anim_time_left <= 0) { current_anim = current_anim->next; current_anim_time_left = current_anim->duration; } } //Simulation du monde if(state == 1) { xref = xref-1; } //Délai sleep_us(25000); //Préparation des invariants du frame suivant previous_state = state; } getkey(); return 1; } On a à présent une belle animation, celle ci normalement : https://i.imgur.com/vp1ExtA.gif Conclusion Vous avez appris dans ce tutoriel les bases des animations, la POO et son équivalent en C, les structures de donnés et comment utiliser ces dernières en C/gint ! J'espère que ce TDM vous aura aidé dans la réalisation de vos animations, j'ai été très content de le faire ! Merci à Lephenixnoir et à Dark storm pour leur aide qui m'a été précieuse ! Si vous avez des questions, lâchez vous en commentaires ! Liens utiles :here: Voir le TDM précédent : Comprendre et utiliser le path sous Linux :here: Consulter l'ensemble des TDM Wed, 10 Feb 2021 18:25:53 +0100 Press Shift #5 - Mipjabok (Louloux) https://www.planet-casio.com/Fr/forums/topic16632--.html À tour de rôle, les rédacteurs de Planète Casio présentent un jeu innovant, drôle, beau ou bien conçu. Blockbuster ou trésor oublié, venez (re)découvrir des jeux d'une qualité remarquable ! Aujourd'hui, nous allons voir... Mipjabok de Louloux ! Ceci est mon 1er Press Shift ! Le projet Bonjour et bienvenue dans ce 5ème Press Shift ! Aujourd'hui nous allons parler de Mipjabok, un très bon jeu de Louloux ! Il s'agit d'un jeu de plateforme, on l'on incarne un spectre, ou plutôt des spectres, puisque l'on peut incarner plusieurs personnages. De façon générale, c'est le spectre Mipjabok que l'on incarne, mais lui même peut incarner plusieurs personnages, comme Banshy, Bobby, Quadry ou Bluggy. Mais on peut aussi créer nos personnages, ce qui va nous permettre de mieux passer les obstacles. Mais commençons tout de suite avec... Un jeu de plateforme très complet Mipjabok est un jeu très complet, avec ses 22 niveaux, ce qui en fait selon son créateur, Louloux, " le plus grand jeu de plateforme de l'histoire de la programmation sur calculatrices". Pour ma part, je n'ai pas vérifié ! Ces 22 niveaux sont longs, ce qui en fait un jeu très complet ! Le but du jeu : trouver les 22 clés des 22 niveaux, et ce ne sera pas une mince affaire ! Les personnages Dans Mipjabok, nous avons le choix entre différents personnages. Le dernier est un peu particulier puisque c'est un personnage entièrement personnalisable, il coûte 2000 pièces. Dans ce menu (Menu principal → Magasin), descendez jusqu'en bas puis (pas besoin d'acheter le personnage modifiable pour le modifier, par contre il faut l'avoir acheté pour l'utiliser), vous allez voir... Vous arrivez devant cela : https://i.imgur.com/eOcfQLn.jpg Là, rien de plus simple, pour changer l'état d'un "pixel", les flèches pour se diriger et pour sortir. Si vous avez assez d'argent, vous pouvez acheter ce personnage, c'est . Mais justement, comment gagner l'argent ? A chaque partie, vous amassez de l'argent présent dans les niveaux, et lorsque vous avez assez, vous pouvez acheter un personnage. Sans plus tarder passons à la suite... Le système de jeu Niveau gameplay, rien de plus simple : pour sauter, et les flèches pour se diriger, comme dans beaucoup de jeux sur calculettes d'ailleurs ! ;) Les blocs sont variés : il y a les blocs "basiques", mais d'autres plus complexes, comme les ascenseurs. Ces derniers permettent de monter, ou de descendre (selon le sens de l'ascenseur, pour la montée le personnage est attiré vers le haut, l'inverse pour la descente). Nous pouvons aussi trouver les pics, sur lesquels il ne faut pas tomber sous peine d'un Game Over, écran de Game Over d'ailleurs très stylé (des pixels noirs remplissent peu à peu l'écran), les pièces, dont nous avons vu l'utilité précédemment, les portes (activées par une commande que je ne révèlerais pas, je crois que c'est une sorte d' "easter egg" ;) ), les trampolines, permettant de sauter plus haut, et les clés, qui signent la fin du niveau. J'ai aussi trouvé les champignons, et autres blocs "décoratifs". Je ne sais pas si je dois dire ce qu'il se passe à la fin, donc je le mets en spoiler : A la fin des 21 niveaux, votre personnage arrive devant Dracofeu, qui vous pose une énigme, dont je ne donnerais pas la réponse ;) . Vous êtes alors redirigé vers un niveau "bonus", qui vous permettra de finir le jeu. A la fin du jeu, un texte de fin défile expliquant une histoire, pas super claire j'avoue :lol: , entre le bien et le mal. Le jeu est à présent terminé, mais vous pouvez toujours jouer aux autres niveaux, pour débloquer les personnages qui ne le seraient éventuellement pas encore ;) Ce Press Shift est à présent terminé, Mipjabok est en tout cas un très bon jeu, et après l'avoir fini 2 fois je ne m'en lasse pas ! Un grand bravo à Louloux, à bientôt pour un nouveau Press Shift, et... Enjoy ! ... et à bientôt sur planet-casio ! Le Press Shift précedent : Press Shift #4 - Aventura, le Royaume Poudingue (Drak) Fri, 15 Jan 2021 19:13:36 +0100 Liste des jeux qui ne marchent pas sur Prizoop https://www.planet-casio.com/Fr/forums/topic16595--.html Bonjour ! Je crée ce topic suite à celui là. Ici, vous pourrez donc prévenir dans les commentaires si un jeu ne marche pas sur Prizoop. Je commence avec... Liste : - Les jeux créés sur GB Studio. Un message a d'ailleurs été mis au développeur de Prizoop, sans réponse. Sun, 20 Dec 2020 18:45:41 +0100 Que faites vous là ? https://www.planet-casio.com/Fr/forums/topic16503--.html Non c'est pas un article, désolé j'ai pas le temps en ce moment C'est vrai ça ! Ça fait longtemps que je n'ai pas demandé quelque chose ici, ça me manquait un peu, alors voilà ce nouveau sujet : C'est une question qu'on ne pose pas souvent, certaines personnes ici on même tellement été présent qu'ils en on oublié leurs but initial de venir sur le forum ! Mais comme toute chose, pour venir ici, il faut le chercher ! Alors : Que faites vous là ? Bah non mais c'est vrai, pourquoi tu es là derrière ton écran ? Quand on y pense, avant de venir ici on avait forcément un but, une envie de trouver quelque chose ! Et en continuant, on peut se demander que faisons nous ici maintenant, pourquoi rester ici ? :) Comme à mon habitude, je commence : Pourquoi être venu ici initialement ? Et bien étonnamment, je pense ne pas être venu pour la première fois au lycée mais bien au collège. Je commençais à vouloir m'amuser avec ce que j'avais, et j'étais tombé sur des vidéos de tricks sur calculatrice. Je pense que c'est la raison de ma première visite sur ce forum : Pour voir des tricks sur calculatrice Puis après je suis repassé par ici pour apprendre comment fonctionnait le menu de programmation sur ma 35+E Et enfin, je suis resté ici depuis ce jour là. Maintenant, je pense que je peux dire que je reste pour la communauté, je n'ai plus besoin d'apprendre des choses sur calculatrice, mais je reste pour écrire et parler sur notre chère Shoutbox. Je continue bien sûr certains projets parce que la calculatrice est une plateforme qui m'intéresse beaucoup. Mais je reste surtout pour vous en fait :love: Hop, séquence émotion : check En tout cas, je me rend compte que c'est pas une question si simple à répondre, bonne chance pour ceux qui sont là depuis beaucoup trop d'années, va falloir vous souvenir de votre but initial :E C'est à vous ! Racontez donc ce que vous faites ici :) Et bientôt un article, faut bien que je retrouve une activité ici moi ! Sat, 17 Oct 2020 23:27:25 +0200 Je rends vos avatars moches https://www.planet-casio.com/Fr/forums/topic16486--.html J'adore GIMP. Et je l'utilise souvent pour rendre mon style enfantin encore plus moche. Alors quand l'occasion s'est présentée de remixer des avatars, évidemment, j'ai sauté sur l'occasion. https://bible.planet-casio.com/cakeisalie5/avatars_moches/lephe.png Lephenixnoir (référencé dans le DTC) https://bible.planet-casio.com/cakeisalie5/avatars_moches/breizh.png Breizh_craft https://bible.planet-casio.com/cakeisalie5/avatars_moches/filoji.png Filoji https://bible.planet-casio.com/cakeisalie5/avatars_moches/flamingkite.png FlamingKite https://bible.planet-casio.com/cakeisalie5/avatars_moches/eragon_v2.png Eragon https://bible.planet-casio.com/cakeisalie5/avatars_moches/hackcell.png Hackcell https://bible.planet-casio.com/cakeisalie5/avatars_moches/darks.png Dark storm https://bible.planet-casio.com/cakeisalie5/avatars_moches/redcmd.png Redcmd https://bible.planet-casio.com/cakeisalie5/avatars_moches/tituya.png Tituya https://bible.planet-casio.com/cakeisalie5/avatars_moches/eltoredo.png Eltoredo https://bible.planet-casio.com/cakeisalie5/avatars_moches/kirafi.png Kirafi https://bible.planet-casio.com/cakeisalie5/avatars_moches/totoyo.png Totoyo https://bible.planet-casio.com/cakeisalie5/avatars_moches/massena.png Massena https://bible.planet-casio.com/cakeisalie5/avatars_moches/ado.png Ado https://bible.planet-casio.com/cakeisalie5/avatars_moches/neotux.png Ne0tux Si vous voulez figurer dans cette liste, proposez-le et mouillez votre doigt, parce qu'il faut que je n'aie pas la flemme et ça c'est pas évident. :D Tue, 29 Sep 2020 23:35:20 +0200