News
TDM n°3 : Utiliser les chaînes de caractères !
Le Tuto Du Mercredi [TDM] est une idée qui fut proposée par Ne0tux. Voici le principe : un mercredi sur deux, nous postons un petit tutoriel sur l'Utilisation de la calculatrice, le Transfert, la Programmation, ou encore la Conception de jeu. Je vous en présente la troisième édition.

Apprendre à se servir des chaînes de caractères (Str) ! (Débutant)

Niveau : ★ ★ ☆ ☆ ☆


Une chaîne de caractère, c'est comme une phrase. Lorsque vous écrivez, vous assemblez des lettres et des signes de ponctuations, des chiffres parfois ou encore d'autres caractères spéciaux. Alors qu'une variable comme A ou θ contient une valeur numérique, les Str – chaînes de caractères, ou string en anglais – contiennent des suites de lettres et de chiffres, des mots, des phrases, etc. Elle sont bien trop peu utilisées dans la plupart des programmes du site, surtout chez les programmes débutants ou les programmes de cours, alors qu'elles peuvent se révéler extrêmement efficaces.

Partie I : Qu'est-ce qu'une Str ?

NB : Ce TDM se veut complémentaire à un cours déjà existant sur l'utilisation des Chaînes de caractères par Totoyo. N'hésitez pas à le consulter également si vous ignoriez jusqu'à présent l'existence des Str.

Comme indiqué dans l'introduction, une chaîne de caractères (Str) contient... des caractères. Des caractères peuvent être des lettres en bas de casse ou capitale, des chiffres, des signes de ponctuations, des espaces, des lettres grecques, des signes mathématiques, et tout autre caractère spécial. Tout ce que vous seriez susceptible d'écrire avec votre clavier, en somme.

Attention toutefois, une Str N'EST PAS une valeur numérique. Toute tentative de calcul entre une Str et une valeur numérique provoquerait une erreur. Il existe cependant des techniques qui permettent de passer d'une Str à une valeur numérique et vice-versa.

Les chaînes de caractère peuvent avoir de nombreuses utilités. Elles peuvent être utilisées pour les programmes de cours, pour les dialogues dans un jeu, pour contenir le nom du joueur ou d'autres informations, et peut avoir des utilisations qui vont même bien au-delà de ce que vous pourriez imaginer : hardcoder des maps pour un jeu, stocker des données sur des monstres ou des attaques dans le code, ou même contenir des caractères qui décrivent des valeurs numériques... Avec un peu d'imagination, tout est possible !

Retenez bien que le premier caractère d'une chaîne est indexé à 1, et non pas à 0. Retenez également qu'une Str ne peut pas contenir plus de 255 caractères.


Partie II : Initialiser les Str

Sachez qu'il existe de nombreuses fonctions qui permettent de manipuler les Str. La première chose à savoir faire est d'initialiser une Str comme il se doit. Voici différentes méthodes :
"Bonjour Mister 2 !" → Str 1
Str 2 → Str 1
? → Str 1 //Ce que rentre l'utilisateur va dans Str 1. Utile pour demander le nom du joueur par exemple.

Il existe des cas plus particuliers :
List 1[0] → Str 1
Exp►Str(Y1,Str 1)
La première ligne fonctionne dans les deux sens. Référez-vous au TDM précédent. La deuxième ligne est assez particulière et fait appel à une technique expliquée dans ce tutoriel. Vous n'aurez probablement pas à vous en servir.

Attention toutefois. Les techniques suivantes ne fonctionnent pas :
A → Str 1 //A est une valeur numérique, pas une Str.
"Hello world!"
Str Ans → Str 1 // Str Ans n'existe pas.
BONJOUR → Str 1 //BONJOUR n'a pas de guillemets : il sera considéré comme le produit des variables B, O, N, J, O, U et R. Donc, une valeur numérique.
Hello world!" → Str 1 //Bien sûr, erreur syntaxe s'il manque un guillemet.
Str 2 + A + ", je te love !" → Str 1 //Même délire : A est une valeur numérique.
StrJoin( Str 2, A) → Str 1 //Même problème qu'au dessus.
//Etc.


Partie III : Manipuler les fonctions pour les Str

Comparer deux Str : StrCmp(
StrCmp( compare chaque caractères des deux chaînes à la suite en partant, bien sûr, du premier caractère à gauche, jusqu'à ce que les deux caractères comparés soient différents. Pour les chiffres et les lettres, voici un ordre croissant pour StrCmp :
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

//Voici d'autres cas :
StrCmp("CAKE", "CAKEISALIE") //"CAKE" < "CAKEI". Renvoie -1
StrCmp("5", "5-") // "5" < "5-", donc renvoie -1.

Inverser une Str : StrInv(
Cette fonction inverse simplement l'ordre des caractères de la chaîne. Peut s'avérer amusant.
StrInv("Bonjour !") → Str 1
// Str 1 contient "! ruojnoB".

Concaténer (assembler) deux Str : StrJoin(
StrJoin( sert à fusionner deux chaînes de caractères. Toutefois, elle ne peut pas fusionner plus de deux Str en même temps : cette fonction ne prend que deux paramètres.
"BALDI" → Str 1
StrJoin("Bonjour, ", Str 1) → Str 1
//Str 1 contient "Bonjour, BALDI"
/!\ Cette technique n'est pas celle que je recommande pour concaténer deux chaînes. Voir la suite.

Concaténer plusieurs Str à la fois : +
Cette technique est vivement recommandée pour concaténer plusieurs Str. Par rapport à Strjoin(, elle est plus courte et permet d'assembler plus de deux chaînes d'une seule traite.
"Darks" → Str 2
"666" → Str 1
Str 1 + " est le code secret, " + Str 2 + " !" → Str 3
// Str 3 contient "666 est le code secret, Darks !"

Extraire une partie de la chaîne : StrMid( (ou StrLeft( et StrRight( )
La fonction StrMid( – et, dans une moindre mesure, StrLeft( et StrRight( – est extrêmement utile. Je ne cesse de m'en servir. Elle permet d'extraire une partie d'une chaîne à partir d'un indice. Elle peut aussi prendre un troisième paramètre : la longueur de la chaîne à prendre. Si ce paramètre n'est pas préciser, StrMid( extrait tout le reste de la Str à partir de l'indice indiqué.
StrMid( Str 1, 4, 8) //extrait les 8 caractères de la Str 1 à partir du 4ème caractère compris.


Obtenir la longueur précise d'une Str : StrLen(
StrLen( renvoie la longueur de la chaîne de caractère indiquée. Attention toutefois, une Str ne peut pas dépasser 255 caractères !
StrLen( "TROLOLOL") // Renvoie la valeur numérique 8.

Modifier la casse des lettres d'une Str : StrLwr( (Minuscules) et StrUpr( (Majuscules)
StrLwr( et StrUpr( mettent respectivement les lettres d'une Str en minuscule et en majuscule. Ils ne prennent comme paramètre que la Str que vous voulez modifier.
StrLwr("Drak A ECRIT CE TUTO !")
// Renvoie "drak a ecrit ce tuto !"
StrUpr("Je n'aime PAS le chiffre 7."
// Renvoie "JE N'AIME PAS LE CHIFFRE 7."

Rogner une Str par la droite ou la gauche : StrShift(
StrShift( prend deux paramètres : la Str à manipuler et le nombre de caractères à rogner. Ce nombre peut être positif ou négatif. Les caractères qui disparaissent sont remplacés par des espaces.

Rechercher un caractère ou une chaine de caractères dans une Str : StrSrc(
Extrêmement utile, à connaître. StrSrc( renvoie la position (valeur numérique) de la première occurrence indiquée trouvée. Pour faire une analogie, c'est comme si vous faisiez Ctrl + F sur votre navigateur internet. Bien sûr, StrSrc( respecte la casse. Peut prendre un troisième paramètre qui indique l'indice à partir duquel chercher. Attention : SrtSrc( s'arrête à la première occurrence trouvée. Quand rien n'est trouvé, renvoie 0.
"ATTENTION ! ZONE DANGEREUSE !" → Str 1
StrSrc(Str 1, "!") //Renvoie la valeur 11.
StrSrc(Str 1, "!", 12) //Commence la recherche à partir du 12ème caractère. Renvoie la valeur 29.
StrSrc(Str 1, "TENTION !") //Renvoie la position de "T" : 3.
StrSrc(Str 1, "x") //Renvoie 0 : Il n'y a pas de "x".
StrSrc(Str 1, "TENTION !", 9) //Renvoie aussi 0.
StrSrc(Str 1, "TABLE") //Renvoie également 0.
StrSrc(Str 1, "TANTION !") //Idem

Changer une Str en valeur numérique : Exp(
Exp( convertit la chaîne de caractère en une expression mathématique. Si la chaîne contient des lettres, elles sont considérées comme des variables alphanumériques. Si des lettres ne peuvent être converties en variables alphanumériques (minuscules, lettres spéciales, etc.), ou si des caractères ne peuvent être utilisés pour un calcul (espaces, etc.), provoque une erreur syntaxe.
Exp("32") //Renvoie la valeur numérique 32.
Exp("32A") //Renvoie le résultat de 32 * A.
Exp("32 * A") //Erreur syntaxe à cause des espaces.
Exp("BONJOUR") //Renvoie le produit des variables B, O, N, etc.
Exp("Bonjour !") //Erreur syntaxe.
Exp("5i+A*ln (12)-2") //Fonctionne, si "ln " a été entré avec la touche "ln" de la calculatrice.

Faire se déplacer du texte dans une Str : StrRotate(
StrRotate( décale de N les caractères d'une Str. N peut être positif ou négatif, et peut dépasser la longueur de la Str. Elle permet, entre autres, de simuler un défilement de texte.
StrRotate("Achetez les frites de FRITEMAX !  ", 3)
//Renvoie "etez les frites de FRITEMAX !  Ach"
StrRotate("Achetez les frites de FRITEMAX !  ", -5)
//Renvoie "X !  Achetez les frites de FRITEMA"


Partie IV : Application
Il y a de nombreuses manières d'exploiter les fonctions des Str ! En voici quelques unes, assez simples, qui pourront se révéler surement très utiles pour vos programmes, petits ou gros ! N'hésitez pas à poser des questions si besoin !

Enregistrer un nom de joueur.
Que ce soit pour nommer un personnage ou pour enregistrer un nom pour un score de jeu, il est souvent pratique d'être en mesure d'avoir le nom du joueur (ou un pseudonyme choisi par ce dernier). Nous pouvons très simplement récupérer son nom, et même faire en sorte qu'il commence par une majuscule et que le reste soit en minuscule !
"Votre nom"?→Str 1 //Str 1 contient donc le nom.
StrUpr(StrLeft(Str 1, 1)) + StrLwr(StrMid(Str 1, 2))→Str 1
//Dans cette deuxième ligne, on met la première lettre en majuscule et les suivantes en minuscule.

Faire une fonction qui affiche un message en combat.
Plutôt que de réécrire 100 fois un truc affreux comme "Text, 1,1,"Je suis..." : Text 9,1,"Très fort !", etc.", servez-vous des Str ! Dans un moteur de combat, par exemple, vous aurez surement besoin d'afficher des messages à chaque attaque. Mettons que j'enregistre le message à afficher dans Str 2 et que le nom du joueur soit dans Str 1. Cette fonction sera contenue dans un sous-programme.
PROG "COMBAT" :
//Début de tour :
Str 1 + " se prépare à agir !" → Str 2
Prog "TEXT"
[...]
//Au moment de l'attaque, dont le nom est dans Str 3 :
Str 1 + " lance " + Str 3 + " ! " → Str 2
Prog "TEXT"
[...]
//En fin de tour, par exemple :
Str 1 + " a terrassé l'ennemi ! Wheeee!" → Str 2
Prog "TEXT"
//Etc.

_________________________
PROG "TEXT" :
Cls
Text 1,1,Str 2
Do
GetKey
LpWhile Ans ≠ 77
//Affiche le texte et se met en "pause" tant que le joueur n'appuie pas sur [ALPHA]

Faire afficher sur une ligne un texte trop long.
En mode graphique, les lettres prennent, en moyenne, 4 px de large. L'écran de la calculatrice fait 128 px. 128 / 4 = 32. On peut donc considérer qu'à partir de 32 caractères, le texte à afficher dépassera vraisemblablement du cadre. On a le choix entre faire en sorte à ce que le texte ne dépasse jamais 32 caractères, l'afficher sur une deuxième ligne ou bien l'afficher sur une unique ligne en le faisant défiler. Voici comment faire pour cette dernière méthode :
"Je suis la phrase à afficher et j'ai beaucoup trop de lettres. Oh mon dieu ! Achetez les frites de chez FRITEMAX !" → Str 1
Text 1,1,Str 1
Do
If StrLen(Str 1) > 31 // Si la phrase est trop longue...
Then For 1 → A To StrLen(Str 1) Step 2
Text 1,1,StrRotate(Str 1, A) //On la fait défiler dans une boucle
GetKey⇒Break // On sort dès que le joueur presse une touche
Next
IfEnd
GetKey
LpWhile Not Ans //On arrête à l'appui d'une touche.

Hardcoder des données sur des personnages.
Mettons que vous ayez des données par défaut à attribuer à des personnages. Par exemple, une valeur qui correspond à sa force, une autre à sa sagesse et une autre à la robustesse de sa barbe (lol ?), et que vous voulez les attribuer à une liste lorsque le joueur choisit tel ou tel personnage. Si de telles données sont comprises entre 0 et 9, alors vous pouvez tout à fait avoir quelque chose de très propre comme ceci :
//J est l'ID du personnage.
J = 1 ⇒"645Jasper" →Str 4
J = 2 ⇒"428Pavel" →Str 4
J = 3 ⇒"908Brutus" →Str 4
J = 4 ⇒"373Gael" →Str 4
[...]
For 1→A To 3
Exp( StrMid( Str 4, A, 1)) → List 1[A] //On récupère les carac
Next
StrLeft( Str 4, 4)→Str 1//On récupère le nom.

Sélectionner un Sprite pour votre héros en Locate.
Lorsque vous faites un jeu en Locate avec un personnage qui s'y déplace, vous l'affichez surement en faisant :
Locate A, B, "θ"
Sachez que "θ" est aussi une chaîne de caractère. Alors pourquoi ne pas enregistrer ce caractère dans un Str, changeable à volonté ?
ClrText
"==================== Choisissez le heros"
0→D //Le compteur
"αβδσθ" → Str 1 //Les skins disponibles
While 1
StrLeft( StrRotate( Str 1, D), 1) → Str 2
Locate 10,4,Str 2
Do
GetKey
LpWhile Not Ans
Ans = 77 ⇒ Break //Le joueur valide
Ans = 27 ⇒ Isz D
'a //Ce commentaire évite le saut de ligne de Isz D si D = 0.
Ans = 38 ⇒ Dsz D
'a
WhileEnd
Str 2 → Str 1 //Str 1 contient le sprite choisi.


Et voila ! Maintenant, vous n'avez plus d'excuse. UTILISEZ LES STR ! Si ce tuto vous a plu et que vous souhaiteriez voir des techniques plus avancées sur l'utilisation des Str, alors manifestez-vous dans les commentaires !


Liens utiles :
Voir le TDM précédent : Manipulez les Listes !
Tuto pour avoir 40 Str supplémentaires
Cours officiel de Planète Casio sur les Str.
Var2Str, un utilitaire de Totoyo pour convertir une variable en Str.


Commentez cette news ! (4)
écrit par Drak le 18/07/2018 18:00 Voir toutes les news

La Revue des Projets – 113
Ah, les vacances. Certains écartent leurs doigts de pieds sur la plage, au soleil, paille à la bouche. D'autres respirent le grand air de la montagne et font travailler leurs mollets en randonnée. D'autre encore retrouvent leurs grand-parents adorés pour cueillir les fruits du jardin et préparer la confiture. Oui, c'est les vacances, cette belle et douce période qui fond de tendresse comme une cuillerée de miel chaud.

Très bien. Il est donc l'heure de la cent-treizième édition de la Revue des Projets ! Voyez-vous, tout le monde n'a pas la chance de partir au loin avec sa famille ou ses amis. Il y en a qui restent chez eux, en toute simplicité, et qui continuent de travailler – un bien grand mot, je vous l'accorde.

Sans transition, commençons à regarder dans la boîte magique ! J'y plonge la patte et... Surprise ! Mais que voila donc ? Il s'agit d'Odyssée, ce projet collectif entamé il y a là près de deux semaines par plusieurs membres de la communauté. Shadow15510 prend la parole pour tous les participants et nous mettre l'eau à la bouche ! Si vous ne connaissez pas Odyssée, alors peut-être pourriez-vous regarder un peu dans le topic dédié ? En tous les cas, je vois quelques belles images !

Drak, Math680, Redeyes, Lightmare, Ti64CLi et Shadow15510 a écrit :
Bonjour à tous !
Un petit article pour vous dire que notre projet de jeu collectif se concrétise... On va vous mettre une petite galerie d'image tirées du jeu Je pense que le moment est venu de vous en dire un peu plus sur le scénario... Mais attention, hein, juste un peu !

Alors voyons voir :
Vous habitez dans un village perdu au sud d'un pays ravagé par la dictature... Votre père est mort et vous laisse un testament qui sera lu dans la ville de son décès à 200 km au nord de votre position. Vous trouvez cela un peu futuriste comme cadre ? Détrompez-vous : tous les noms de villes sont des noms latins, et le jeu se passe dans un cadre antique... Le village s'appelle Secreta, la ville que vous devez rejoindre est Eporie et c'est également la capitale d'un pays nommé Lugubriss dans lequel vous évoluez...

La mort de votre père révèle des choses qui auraient dû rester cachées ! Vous seul êtes en mesure de sauver votre peau (et celle du pays) tout en restant discret... car vous êtes surveillés de très très près.






J'en profite pour remercier Drak qui est à l'origine du bois de Nemuroris et des effets autour des pictogrammes

Wow. Je tiens à préciser auprès de nos lecteur·trice·s que le scénario a été écrit par Shadow, et qu'il a longuement travaillé dessus ! Je dois dire que je suis particulièrement séduit par les noms de ville et celui du pays. Je crois que ça me motive même à donner un autre coup de patte pour les graphismes de ce jeu ! Par ailleurs, ce projet de jeu devrait aussi être porté sur la Graph 90+E, alors... Quand verrons-nous la version couleur de ces images ? J'ai hâte !

Replongeons notre main dans la boîte magique... Hmmm ? Sommes-nous à court d'articles ? Ha ! Je refuse de me laisser faire ! J'ai récemment eu vent d'un petit (grand ?) projet naissant, porté par Massena, à la fois fier et frustré d'être arrivé à la deuxième place du jeu du mois... à 1 point de moins que le gagnant ! Je souhaitais vous en parler un peu, chers lecteur·trice·s , pour que cette RDP ne soit pas trop modeste d'une part, et parce qu'un projet de ce type mérite votre attention d'autre part. Mais, attention ! Je ne ferai pas cela tout le temps !

C'est un projet qui se nomme Evocalc ! Il s'agit d'un jeu qui sera, en quelques sortes, une adaptation d'Evoland, un jeu vidéo qui parle de ... l'évolution du jeu vidéo ! Je vous montre le trailer du jeu, vous allez comprendre.


Voici. Ce projet semble assez complexe, et Massena souhaite bénéficier d'un peu d'aide pour réaliser ce jeu et trouver des idées. Rendez-vous sur le topic dédié pour en apprendre davantage !

Eh bien, chers lecteur·trice·s, il ne me reste plus qu'à sonner la fin de cette RDP ! Je vous remercie d'avoir pris le temps de nous lire, et vous souhaite à tou·te·s une agréable journée ! Et, comme toujours... Stay tuned!

Cette semaine, 1 programme a été posté.

KhiCAS, de Bernard Parisse, pour la Casio Graph 90+E. Il s'agit du portage de Xcas en Add-in pour Casio Graph 90+E. Il est enfin disponible !

Voir la RDP précédente : RDP – 112.


Commentez cette news ! (3)
écrit par Drak le 15/07/2018 18:00 Voir toutes les news

Résultat du Jeu du Mois de Juin 2018
Bonsoir à vous !
Comme promis, ce soir, le compte rendu des élections du Jeu du Mois de Juin 2018. Je rappel que 8 programmes au total ont été proposés.


Mesdames et messieurs ouvrez grand vos oreilles,... euh, non vos yeux ! Le gagnant de cette toute première ré-édition aura le droit de mettre la coupe emblématique dans la description de son programme... Mais aussi de bénéficier d'une mise en avant d'un mois en page d'accueil.


Nous avons Flower de arcree et Tuile & co de Shadow15510 avec 1 point. Un grand bravo à vous deux pour vos jeux ! Merci infiniment de votre participation. Et, qui sait ? peut-être avez vous un projet de jeu que nous aurons le plaisir de voir sur le podium le mois prochain?
On continue avec Parc Safari de spongitude avec 2 points. Merci de ta participation !
Les deux prochains se suivent de très très près : il s'agit de Sword Burst Zero ProtoZ de Redeyes avec 5 points, puis de KanColle AirStrike avec ses 6 points ! Bravo à Oradimi.

Nous arrivons au bas du podium, en troisième place avec Plague.inc encore un jeu de Shadow15510 qui avec 7 points. Merci de ta participation et de la qualité de ton jeu.

En deuxième place avec un programme de massena : Aviator qui a 11 points ! Vous avez bien lu : 11 points ! On se rapproche du haut avec ce jeu qui en a fait rêver plus d'un. Bravo pour ce jeu, et peut-être à une prochaine fois pour la première place...

Ahhh ! Le gagnant de cette première ré-édition est... Comment ça tu as perdu le lien... Mais... Je leurs dis quoi moi maintenant ? Hein ? Bon... Euh... Ah oui ! Le gagnant est Alexot avec 12 points ! Le score était serré mais Neural Bird l'emporte ! On l'applaudit ! Bravo pour ce très beau programme qui explose les scores ! Nous espérons te revoir très bientôt dans le vote du Jeu du Mois !
Neural Bird


Merci à tous ceux qui ont votés, et sans qui ce vote serait tombé à l'eau... Merci beaucoup à tous les programmeurs pour leurs jeux !
On se retrouve dans un mois pour l'élection du Jeu du Mois de Juillet 2018 ! On l'espère plein de bonnes surprises et de jeux.
En attendant je vous souhaite un bel été !
Voici le classement récapitulatif :
Première place : Neural Bird d'Alexot
Seconde place: Aviator de massena
Troisième place : Plague.inc de shadow15510
Hors podium :
- KanColle AS d'Oradimi
- Sword Burst Zero de Redeyes
et enfin, ex æquo en dernier :
- Flower d'acree et Tuile & co de Shadow15510

Commentez cette news ! (24)
écrit par Shadow15510 le 08/07/2018 20:00 Voir toutes les news

La Revue des Projets - 112
Les résultats du bac sont tombés, tels la guillotine sur la tête de Louis XVI. Nos braves bacheliers, soulagés ou suicidés, ont dorénavant l'esprit libre pour vaquer à leurs occupations favorites ! Certains feront la fête avec leurs amis, d'autres regarderont les matchs avec leurs parents, et enfin, d'autres encore resteront enfermés chez eux pour coder sur leur calculatrice. Ceux-là sont les meilleurs, si vous voulez mon avis.

Nous commençons donc la 112ème édition de la Revue Des Projets avec un premier article signé collectivement. J'espère par ailleurs que mon humour "glacé et sophistiqué" d'entrée de jeu ne vous aura pas trop fait frémir (un cookie à celui qui connait la référence). C'est donc Shadow15510 qui porte la parole d'un projet de jeu collectif, lancé sous l'impulsion de Math680, jeune et plein d'entrain. Ce projet a déjà un nom : Odyssée. Je laisse la parole à mon cher collègue !

Drak, Math680, Redeyes, Lightmare et Shadow15510 a écrit :
Bonsoir,
Math680 a lancé il y quelques jours un topic demandant une idée de programme. Drak peu avant avait lui aussi lancé un topic : La Boîte à Idées, qui a pour but de centraliser les idées. J'avais moi-même proposé une idée de jeu de rôle. Le projet fût accepté et nous nous lançâmes dans un projet de programmation à 5... Nous travaillons actuellement sur la version démo pour voir ce dont nous sommes capables...

Si vous voulez participer, voici le topic dédié. Sous la supervision paternelle de Lephenixnoir, on essaye de se passer les documents nécessaires à la bonne marche du projet... Le projet va être long mais le moteur de combat est théoriquement au point, et ça c'est déjà pas mal ! On garde la surprise du lieu et de l'histoire... Mais on vous tiendra au courant de l'avancée du projet Odyssée.

Pour l'instant, le menu de démarrage est presque terminé, les deux premières cartes sont terminées mais la gestion des déplacements n'est pas terminée... Il nous reste quelques idées encore.

Je tiens par ailleurs à souligner un record d'activité sur le topic dédié cette semaine ! Un total de dix pages de commentaires remplies en l'espace de quatre jours ! C'est fantasmabuleux ! Ce projet, bien entendu, est toujours ouvert et le restera jusqu'à la fin. Votre participation et votre implication, grande ou petite, seront toujours les bienvenues !

En parlant de cela, permettez-moi de vous évoquer un autre record : le mien. Tous les jours, du matin au soir, je me consacre moi-même corps et âme à un projet de jeu avec lequel je n'hésite pas à bombarder les RDP. Et oui, ça fait de l'activité, ça créé des emplois et ça fait tourner l'économie (meuh non, nous sommes bénévoles) ! Sans plus attendre, je laisse donc la parole à mon propre article pour cette RDP.

Drak a écrit :
Bonjour ou bonsoir !
J'aimerais vous faire part de toute l'enthousiasme que j'éprouve en avançant dans mon projet de jeu : Aventura, Le Royaume Poudingue. Il s'agit d'un projet de RPG en Basic que j'ai entamé il y a près de deux ans et que j'ai repris assez récemment. Plus j'avance dessus, moins j'en décroche ! Aujourd'hui, je dresse un état des lieux des avancées de ce jeu. Je tiens par ailleurs à préciser que le titre du jeu changera peut-être un jour ou l'autre.

Voici : j'ai très récemment mis la version V -0.2 sur le repo – que j'ai par ailleurs nommé "V-2.0" par inadvertance. Une version négative indique que le jeu en lui-même n'est pas jouable et que j'en suis encore à la "phase 3" : le code en lui-même. Cette version contient le moteur de combat – sous-programme "CO" – du jeu, presque complet ! Il manque quelques réglages, ainsi que quelques ajouts qui n'ont pas été mis sur le git, et surtout l'IA du monstre. Je vous ai préparé des petits visuels pour vous vendre du rêve :

Le jeu, depuis 2016. Discussion avec un pnj sur la map

Le moteur de combat actuel.

Voici ce qu'il est possible de faire en combat :
Lancer les sorts Cogne, Rafale ou Estoc. Un mini-jeu apparaît alors et les performances du joueur influent directement sur les dégâts infligés.
Utiliser le Sort-Code : le joueur entre alors un code à 3 chiffres pour lancé l'attaque avec l'ID correspondant. Enclenche un échec critique si le joueur s'est trompé.
Analyser le monstre : le joueur peut alors lire une description du monstre et regarder ses bonus/malus actuels. Ceci ne compte pas comme une action.
Afficher / masquer les barres de vitalité (les barres verticales à gauche et à droite de l'écran) avec OPTN.
Les monstres ordinaires ont une couleur : Rge, Blu, Vrt ou Neu (Neutre), qui décrit leur type. Un peu comme dans Pokémon avec les types Feu, Eau, Plante, il y a un système d'efficacité en fonction du type de l'attaque et de celui de la cible qui influe directement sur les dégâts infligés.
Certaines attaques peuvent soigner, d'autres peuvent infliger une altération d'état ou appliquer un bonus de caractéristiques, d'autres encore peuvent s'enchaîner avec d'autres sorts ! Les combinaisons sont nombreuses !
Possibilité de sélectionner la cible. Le joueur peut donc également soigner sa cible ou se frapper lui-même.
Des animations génériques accompagnent chaque attaques et s'affichent en fonction de la cible de la capacité.
Les messages s'affichent centrés en haut de l'écran. Ils défilent s'ils sont trop grands pour l'affichage.
Gagner et augmenter ses pts d'exp.
Perdre et avoir un Game Over. Dans l'état actuel des choses ça reviendrait à se suicider.
Dans un futur proche, le monstre sera capable d'attaquer, et le joueur de fuir.

Le projet de jeu est toujours ouvert à vos propositions d'attaques ! Vous pouvez aussi demander à apparaître dans le jeu (anecdote, pnj, clin d’œil...) ! Manifestez-vous sur le topic dédié !

Eh bien ! C'est un sacré projet que voici, et j'en sais quelque chose ! À présent, il ne me reste plus qu'à vous dire au revoir et à vous... Hmm ? Attendez ! Je viens de recevoir une info de dernière minute ! Fantastique, c'est exactement ce dont j'avais besoin pour clore cette RDP ! Je laisse donc le projecteur à Nemhardy, le Grand Maître des Traits de l'Esprit, qui nous fait envie avec un petit teaser textuel sur un projet naissant !

Nemh a écrit :
Salut !

Quelques infos sur un projet qui n'est que mi-couché sur papier, et encore c'est bien dire beaucoup de peu… Mais j'espère que j'arriverai à y consacrer un peu de temps qui arrive. Je donnerai d'autres nouvelles de toute façon.

Donc, a l'idée, un petit “jeu” (je suis quasi-sûr qu'on pourrait s'amuser avec, oui… au moins moi ça m'amuserait, je crois… ), inspiré du classique Lunar Lander, qui certes pas forcément très évolué est capable de capter mon attention bien longtemps, je ne sais pas trop pourquoi mais j'aime beaucoup y passer de trop longues minutes parfois. Pour aller un peu plus loin que ce concept qui peut vite tourner en rond, j'imaginais la chose suivante : le cadre serait sensiblement le même, vous, aux manettes, d'un «truc qui vole» (ou au moins tombe doucement, tout en grâce), avec divers objectifs : posé de précision, récupération de machins, parcours délicat, le tout avec plus ou moins de carburant, etc.

Mais ne ratez pas alors le cœur du jeu !… qui serait le suivant : par défaut, le truc volant serait presque impossible à manier : les seules choses faisables seraient de «bas niveau» (par exemple, si le machin volant est un “drone”, vous ne pouvez contrôler qu'individuellement chaque moteur, et sans doute pour corser, la possibilité de faire pivoter des moteurs, ou déplacer quelque centre de gravité, etc, c'est le genre de choses qu'il me reste encore bien à définir…). C'est à dire pas mal de touches pouvant faire changer des paramètres, mais volontairement pas pratique à utiliser tout ça. Peu d'indications à l'écran aussi. Toute l'idée serait de permettre au “pilote” de pouvoir programmer un peu son truc volant, pour tirer parti des actions fines possibles, tout en faisant en sorte que ce soit contrôlable assez facilement (par exemple pour un type de “virage”, il faut faire en sorte qu'une touche agisse de manière pas trop idiote sur plusieurs moteurs, etc), le jeu voulant que ça soit quasi obligatoire de passer par là pour se frotter aux objectifs successifs (on peut peut être arriver au début du jeu en tout manuel, mais les contraintes (peu d'essence, pannes possibles, etc) et les parcours plus difficiles et variés, obligeraient à être plus fin, efficace dans les maneuvres, à s'afficher des informations supplémentaires, et donc à programmer des bouts de son truc volant). Un peu à la manière d'un mode «campagne» de KSP, sauf qu'au lieu de construction qui se raffine petit à petit, on parle du programme embarqué de la chose qui vole.

Voilà, c'était plus un teaser qu'autre chose, je n'ai vraiment rien à montrer pour l'heure, j'ai encore des questions importantes ou peu est décidé (typiquement… comment la programmation se passe en pratique, j'ai plusieurs pistes, mais j'aimerai faire en sorte que ça reste un peu accessible (genre la piste initiale était d'avoir un genre d'assembleur qui ressemble à ce qu'on peut trouver dans le code source des machins d'Apollo 11, je trouvais ça rigolo, mais c'est peut être un peu trop pas drôle en pratique pour motiver le jeu), enfin tout ça reste à voir et ouvert, désolé pour le teasing sans trop de matière, et bon c'qui reste de week-end !

Chouette ! Je suis content d'avoir découvert ce petit jeu relaxant. Je suis également très content de voir un projet en train de naître ! J'espère que de cette graine poussera un grand et robuste arbre, qui sera encore là pour inspirer les générations futures...

Permettez moi de clore cet article avec les résultats du JDM – le Jeu du Mois !
Et le gagnant est...
[Neural Bird], de Alexot !



Cette semaine 2 programmes ont été postés :

Speed game : Saisissez votre CG90+E ! Dans ce petit jeu de Math680, l'objectif est d'appuyer sur les chiffres indiqués avec rapidité.
BUZZ The Game : Un autre jeu proposé par Math680 pour la récente Casio Graph 90+E. Ce jeu "améliorera vos capacités de réflexe" !

Voir la RDP précédente : RDP - 111.

Commentez cette news ! (20)
écrit par Drak le 08/07/2018 18:00 Voir toutes les news

TDM n°2 : Manipulez les Listes avec adresse !
Le Tuto Du Mercredi [TDM] est une idée qui fut proposée par Ne0tux. Voici le principe : un mercredi sur deux, nous postons un petit tutoriel sur l'Utilisation de la calculatrice, le Transfert, la Programmation, ou encore la Conception de jeu ! En voici donc la deuxième édition ! (une édition bien grosse !)

Manipulez les Listes avec l'adresse d'un expert ! (BASIC)

Niveau : ★ ★ ★ ☆ ☆

Les listes sont des suites de valeur que l'on appelle via la fonction List. Celles-ci sont visible dans le menu STAT de la calculatrice. Elles sont très pratiques et souvent utilisées pour des suites logiques de variables, des sauvegardes de jeu, du DrawStat et bien plus encore. Nous allons donc explorer les techniques à connaître pour profiter du potentiel des Listes !


Partie I : Initialiser une liste

Il existe plusieurs manières d'initialiser des listes. Il est préférable de toutes les connaître pour choisir la bonne méthode en fonction de vos besoins ! La première méthode, la plus évidente, est celle-ci :
{1, 5, 3} → List 1
Dans cet exemple, j'attribue respectivement les valeurs 1, 5 et 3 dans les cases 1, 2 et 3 de la liste 1. Cela effacera tout le contenu de la liste 1 pour le remplacer par ces trois valeurs.

/!\ Attention : le premier index d'une liste en Basic Casio n'est pas 0 mais 1. Vous rencontrerez une Memory Error si vous tentez de rentrer un nombre en List1[0]. Vous verrez plus tard à quoi sert List 1[0] en réalité.

3 → Dim List 1
Cette méthode est redoutablement efficace. Elle réinitialise la liste en lui attribuant une nouvelle dimension : autrement dit, cette ligne me donnera une liste de 3 cases. Chaque case se voit attribuer la valeur 0. En quelques octets, vous pourrez donc remplir une centaine de cases de zéros aisément. Cela vous permet aussi d'anticiper les Dim Error, puisque vous saurez précisément jusqu'où s'étend votre liste.

"MALISTE1" → List 1 [0]
« Quoi ? On peut mettre des chaînes de caractères dans une liste ? À l'indice 0, qui plus est ?! » Alors. Laissez-moi vous expliquez cette méthode : une liste peut avoir un nom. Oui, un nom, donc une chaîne de caractères. Et, ce nom, sachez qu'il est contenu dans la case 0 de la liste. Vous pouvez le voir dans le menu STAT :

En employant cette commande, vous donnez donc un nom à la liste. Attention toutefois à ne pas dépasser les 8 caractères. Si cette liste contient déjà des valeur, cette méthode n'affectera pas le contenu. En revanche, si la liste est vide, cette méthode attribuera la valeur 0 à la case 1. Autrement dit, c'est une excellente méthode pour vérifier si votre liste est vide ou non en évitant le Dim Error. Pour plus de sûreté, vous pouvez aussi vérifier que votre Liste a les dimensions attendues.
"MYLIST" → List 6 [0]
If List 6 [1] != 0 And Dim List 6 = 5: Then //Si la première case n'égale pas zéro, c'est que la liste était déjà remplie. Ma liste est aussi censée faire 5 cases.
// Donc... Tout va bien.
Else //Sinon, ça pue.
« Error : No List. »
Stop
IfEnd

//Le même code, un peu optimisé :
"M" → List 6 [0
If List 6 [1 : Then
// Tout va bien
Else
« Error : No List. »
Stop
IfEnd
Sachez que vous pouvez également appeler une liste par son nom plutôt que par son indice :
1 → List "MALISTE" [1]
3→Dim List "MALISTE"
etc.

Il existe encore d'autres méthodes moins répandues, comme celle-ci :
Seq(X^2, X, 1, 10, 1) → List 1  
La description de la fonction Seq( se trouve ici. Elle permet de rentrer une séquence de nombres dans une liste. La fonction prend les arguments suivants :
Seq( Expression/Fonction mathématique à exécuter, Variable utilisée pour la fonction, Première valeur de la variable à utiliser, Dernière valeur de la variable, Le pas (de 1 en 1, de 2 en 2, de 0,55 en 0,55...) ) → List 1

Dans mon exemple, je remplis donc dix cases avec les résultats de la fonction f(x) = x², en partant de x=1 jusqu'à x=10 et en allant de 1 en 1. J'aurai donc cette liste comme résultat :
{1, 4, 9, 16, 25, 36, 49, 64, 81, 100}
En résumé, cette fonction génère une liste à partir d'une expression dépendant d'une variable.

{1, 3, 5, 15}
Il est aussi possible d'écrire une liste sans l'attribuer. Cette ligne remplira en fait la List Ans, ce qui est utile si vous manipulez une liste pour un court moment (comme un Drawstat). Vous pouvez appeler la List Ans de la même manière que les autres listes, à condition bien sûr qu'elle ne soit pas vide.


Partie II : Le calcul listique

Parce que listique rime avec balistique, ce chapitre pourrait faire frémir certains d'entre vous. Rassurez-vous jeunes gens, le calcul listique n'est pas très dur à comprendre. Suivez-moi !

Pour commencer, voici un exemple de calcul listique :
List 1 [2] + List 1 [3] → List 6[1]
Ici, rien de bien compliqué ! On se sert des cases des listes exactement de la même manière que des variables. J'additionne la valeur de la case 2 de la liste 1 avec la valeur de la case 3 de la liste 1 pour attribuer le résultat à la case 1 de la liste 6. Du point de vue de la forme, ça serait la même chose que « A + B → C ».

15 + List 1 → List 1
// ou encore
15 + {1, 3, 5} → List 1
« Heu... »
Mais non ! Tout va bien ! Cette ligne assez particulière ajoute 15 à l'ensemble des valeurs de la liste 1. Autrement dit, j'aurai ce résultat :
{16, 18, 20}
À partir de là, vous pouvez tout envisager : additions, soustractions, multiplications, divisions.

Mais c'est là que ça devient encore plus tordu !
List 1 + List 2 → List 3
//ou bien
{12, 5, 6} + {20, 0, -10} → List 3
Vous ne rêvez pas : il est également possible de faire des calculs avec des listes entières ! Attention toutefois ; ces listes doivent IMPÉRATIVEMENT avoir la même dimension, autrement c'est l'erreur fatale. Cette méthode permet donc d'additionner chaque case une à une, comme indiqué dans ce schéma :

À partir de là, je peux vous montrer comment faire une liste de valeurs complexes, utiles pour stocker des coordonnées :
{10, 12, 4, 5, 0} + i {2, 3, 10, 0, 12} → List 1

Sachez aussi que vous pouvez faire des conditions avec des listes ! On plonge encore plus dans le délire !
{25,10,0,-85,-2,2,100000, -1} → List 1
List 1 < 0 → List 2
Cette deuxième ligne permet de faire vérifier une condition sur toutes les valeurs de la List 1. Autrement dit, cette deuxième ligne renvoie une liste de booléens. « 0 » si la condition demandée et fausse, « 1 » si cette dernière est vraie. List 2 contient donc ceci :
{0,0,0,1,1,0,0,1}

Si vous ne comprenez pas, ça reviendrait à faire la même chose que ce code :
For 1 → A To Dim List 1
If List 1 [A] < 0 : Then
1 → List 2 [A]
Else 0 → List 2 [A]
IfEnd
Next
Puissant, hein ?


Partie III : Optimiser, économiser, compresser.

Dans cette partie, nous allons parler d'une chose essentielle, nécessaire même, en Basic Casio : l'optimisation. Il est important de savoir qu'une liste, ça prend de la place. Écrire une suite de nombres dans la code à attribuer à une liste, ça prend de la place aussi. Nous allons voir comment gagner / économiser des octets lorsqu'on utilise des listes.

1) Chaque case a un poids.

Sachez que lorsque vous attribuez un réel à une case, celle-ci occupera 12 octets dans la mémoire de la calculatrice. Un nombre complexe, quant à lui, occupera 24 octets ! Voici un bout de code qui pèse 24 octets :
"Je suis une banane !!!"
Ce n'est pas négligeable. Donc, lorsque vous stockez des coordonnées pour votre Drawstat, plutôt que d'occuper 24 octets par points (soit en complexes, soit en ayant deux listes pour les abscisses et les ordonnées), il existe une technique pour n'en prendre que 12 par points. Vous êtes prêts ?
{10, 12, 4, 5, 0} + i * {2, 3, 10, 0, 12} → List 1 //24 octets par cases.
{10.02, 12.03, 4.10, 5.00, 0.12} → List 1 //12 octets par cases.
//En plus optimisé :
{10.02, 12.03, 4.1, 5, .12} → List 1
L'astuce consiste à stocker l'abscisse de chaque point dans la partie entière du nombre et l'ordonnée dans la partie fractionnaire. Il faut cependant partir du principe que les ordonnées de vos points sont comprises entre 0 et 99. Rien ne vous empêche d'intervertir les deux. Pour ensuite extraire les valeurs de vos cases, vous pouvez faire ceci :
Int List 1 //toutes les parties entières des valeurs
100 Frac List 1
// ou encore :
E2 Frac List 1 //toutes les parties fractionnaires des valeurs

Ensuite, dans d'autres cas, vous n'avez que des petites valeurs à stocker, comme des suites de 0 et de 1 ou bien des chiffres compris entre 0 et 9. Par exemple, mettons que j'aie des caractéristiques de base à distribuer à mon héros dans un RPG, chacune comprise entre 0 et 9. Avec 6 caractéristiques, par exemple, voici ce qu'on serait tenté de faire dans l'immédiat :
{2, 2, 4, 5, 6, 7} → List 1
// Dans l'ordre : PV, Attaque, Défense, Attaque Spé, Def. Spé, Vitesse.
Cette liste occupera 72 octets dans la mémoire de votre calculatrice. Voici maintenant ce que vous pourriez faire :
224567 → List 1 [1]
Non seulement ces informations ne prendront que 12 octets dans la liste, mais en plus vous économisez des octets en n'écrivant pas les accolades et les virgules. Pour récupérer chaque valeur individuellement, vous pouvez avoir recours à cette formule :
MOD(Int (A/10^(n-1)),10)
Cette dernière vous donnera le nième chiffre de A. Je ne vais pas rentrer dans les détails de cette formule. Poursuivons notre chemin !

Enfin, si vous n'avez plus besoin d'une liste de valeurs, alors ne la laissez pas prendre de la place inutilement sur votre mémoire. N'oubliez donc jamais cette commande :
ClrList 1

2) Il n'y a pas de « petites » optimisations !
Depuis le début de ce topic, j'ai fait en sorte d'écrire « proprement » chaque ligne de code, c'est à dire de ne pas y faire d'optimisations étranges. Il y a une chose que l'on peut faire en Basic Casio, qui pourtant serait intolérable dans un quelconque langage de programmation : se passer des accolades, crochets et parenthèses finales. À partir de maintenant, ne faites plus :
{10, 12, 4, 5, 0} + i * {2, 3, 10, 0, 12} → List 1
Mais faites :
{10, 12, 4, 5, 0} + i {2, 3, 10, 0, 12 → List 1
De même, ne faites plus :
10 * Int (List 1 [2] + List 1 [3]) → List 6[1]
Mais faites :
10Int (List 1 [2] + List 1 [3 → List 6[1

Je sais. C'est moche, mais on gagne des octets, eh ! Pour plus d'informations, consultez cette page.

3) Soyez malin, soyez radin !
Ne laissez jamais passer une occasion de gagner de la place. Mettons que vous vouliez hardcoder (écrire directement dans le code) une liste comme celle-ci :
{10, 12, 14, 15, 10, 12, 13, 20, 10, 12} → List 1
C'est l'occasion d'utiliser le calcul listique pour gagner de la place ! En avant, toutes !
10 + {0, 2, 4, 5, 0, 2, 3, 10, 0, 2 → List 1 // 7 octets gagnés !

Ou bien une liste comme ça :
{420, 150, 980, 1000, 10 000, 122, 540} → List 1 // avant
10{42, 15, 98, E2, E3, 12.2, 54 → List 1 //après !

Poussons le vice !
{10, 15, 8, 6, 12, 13, 11, 11, 7, 7} → List 1 //Avant...
6+{4, 9, 2, 0, 6, 7, 5, 5, 1, 1 → List 1 //Après...
//Toutes mes valeurs sont comprises entre 0 et 9 ! Alors...
4920675511 → List 1 [1
//Pour retrouver le nième chiffre...
6 + MOD(Int (List 1 [1]/10^(n-1)),10)
// Vous remarquerez que cette dernière ligne peut paraître lourde, mais elle représente un gain de place conséquent quand elle est appliquée sur plusieurs variables de ce type.


Partie IV : Application directe.

1) Faire une sauvegarde de jeu.
Dans beaucoup de jeux différents, il est nécessaire de sauvegarder des données de jeu : un score, des caractéristiques, une avancée de quête, des accomplissements... On évitera de laisser ces données dans les variables alphanumériques qui pourraient très facilement être changées par un autre programme ou par l'utilisateur. On pourrait décider de stocker ces données à sauvegarder dans une liste, ce qui est judicieux, mais il y a toujours le risque que le joueur efface ces données par inadvertance. Il existe une solution assez sure pour effectuer une sauvegarde de jeu : la fonction File.
Le réglage List File disponible dans Shift → Menu (Set up)

Saviez-vous que vous avez accès en réalité à 156 listes différentes ? Vous avez en fait 6 fichiers de liste (appelées ListFiles) différents. Vous travaillez avec le fichier 1 par défaut. Voici comment s'en servir :
File 2 //Exploite le deuxième ListFile.
{1, 2, 45 → List 1 //Vous remplissez une liste de valeurs dans le ListFile 2
File 1 //Revient au premier ListFile
ClrList //Efface toutes les listes du ListFile 1, mais pas des autres !

Voici donc un exemple d'application directe, dans le cas où les données à sauvegarder se situent dans List 5 sur le fichier 1.
//Quand j'effectue une sauvegarde :
List 5 //la liste 5 du fichier 1 va dans la List Ans qui est universelle.
File2 //Je me mets sur le fichier 2
List Ans → List 1 //Je copie la List Ans dans la List 1 du fichier 2
File1 //Je reviens au fichier 1 pour continuer.
[…]
//Lorsque je quitte le jeu :
ClrList //J'efface tout le fichier 1
Stop

//Quand je reprends la partie :
File 2
"S" → List 1[0]
If Not List 1[1 : Then
"Aucune sauvegarde disponible."◢
Stop
IfEnd
List 1
File 1
List Ans → List 5

Une autre application : Un Super Drawstat.
[...]
D = 2 ⇒ {.1,5.03,2.08,10.08,12.15 → List 6 //Ceci est un premier sprite à afficher pour un combat : le monstre.
[…]
{4.04, 5.04, 6.03, 15.03, 16.04, 17.04, 17.14, 12.19, 9.19, 4.14, 4.04 → List 4 //Un deuxième sprite, le joueur.
//Puis on dessine.
Augment(15+List 4, 80+List 6) // J'assemble les deux listes en modifiant leurs valeurs
1 → Tθmin
Dim List Ans → Tθmax
Graph(X,Y)=(Int List Ans[T], 100 Frac List Ans[T

Il existe également un tutoriel pour réaliser des effets de particules, réalisé par Ninestars. Il est assez complexe et fait appel à une utilisation assez poussée des listes. Si vous avez suivi ce tutoriel jusqu'au bout, il ne devrait pas y avoir de problème ! Le lien se trouve ici.

Liens utiles
Le précédent TDM : Créez de magnifiques écrans-titre pour vos jeux !
Le Jeu du Mois : le retour ! N'oubliez pas de voter !
Savoir manipuler le Super Drawstat, une méthode de dessin puissante !
Mettez vos nouvelles connaissances à l'usage avec ce tutoriel sur les effets de particules .
Si vous connaissez mal les fonctions utilisées : Seq(, List, File, Augment(, ClrList, Frac.


Commentez cette news ! (26)
écrit par Drak le 04/07/2018 18:00 Voir toutes les news

La reprise du vote du Jeu du Mois (JdM)
Bonjour à tous !
Aujourd'hui, j'ai le plaisir de vous annoncer que le vote du Jeu du Mois reprend après 1an et 7mois... La liste sera agrandie des derniers programmes de mai ainsi que des programmes de juin ce qui nous fait 8 programmes !


Chaque participant propose un Top 3 des programmes du mois : le programme en première position reçoit 3 points, le suivant 2 points, et le dernier 1 point.
Pour cela nous allons vous soumettre une liste des programmes avec une présentation succincte... Ceux qui le veulent téléchargent ces programmes et proposent en commentaire un classement.

Règles

On ne peut voter qu'une seule fois
Le Top 3 peut contenir des lacunes : vous pouvez ne mettre aucun programme en face des notes.
On ne peut pas voter pour soi-même (Tout vote pour soi est considéré invalide et remplacé par une lacune.)

Exemple de classement : Nous avons les jeux Sony, Mario, Starwars, Zelda, Pizza. J'aime beaucoup Pizza, j'ai bien aimé joué à Mario, sans plus et je n'ai pas aimé les autres :
1-Pizza (3pts)
2-
3-Mario (1pt)
Si j'ai bien aimé Sony mais pas les autres et que je pense que Sony aurait pût être mieux ce vote serait approprié:
1-
2-Sony (2pts)
3-

Si j'ai adoré Mario, Sony et Zelda, mais que je préfère Mario aux deux autres et que je trouve que la prestation de Zelda est bâclée alors mon vote va ressembler à ça :
1-Mario (3pts)
2-Sony (2pts)
3-Zelda (1pt)

Bon ! Je ne vais pas vous énumérer tous les cas de figures !!


Voici la liste (les jeux sont classés par ordre alphabétique) :


On commence avec un programme de massena
Aviator Un jeu dans lequel on est dans un avion et où le but est d'éviter les missiles qui arrivent sur vous. Plus vous survivez longtemps, plus vous aurez de points. Trop facile ? Pas tant que ça puisque vous devez adopter une stratégie pour gagner !

Le second programme est celui de arcree
Flower Un joli petit jeu dans lequel vous devez attraper le plus de fleurs possible en un minimum de temps. Ce serait trop simple !! Heureusement il y a un petit carré noir pour vous empêcher d'atteindre votre but.

Voici le programme suivant de Oradimi
KanColle AS Un programme, inspiré d'un simulateur, qui permet de simuler les dégâts des frappes aériennes : dégâts, pertes,... Choisissez vos escadrilles, vos avions, les avions et bateaux enemis et observez le résultat !

On continue avec Alexot
Neural Bird Ce "jeu" est en fait une intelligence artificielle : l'IA joue à Flappy-Bird et apprend de ses erreurs jusqu'à devenir très très forte. Pour cela elle ne prend en compte que trois données que je vous laisse découvrir.

Vient ensuite le jeu de spongitude
Parc Safari Ce jeu pourrait s'apparenter au célèbre "Pokemon Go" puisque le but est de chasser des pokémons. Les pokémon vous permettent d'augmenter vos capacités, ce qui vous permet de capturer plus de pokémons.

Nous avons un programme de Shadow15510
Plague.inc Ce jeu est une adaptation du jeu Pandemic où le but est tuer tous le monde... Et ce grâce à un virus que vous pouvez faire muter.

La première partie du jeu de RedEyes
SwordBurstZero C'est un jeux de rôle dans lequel vous découvrirez "Online-Universe" un monde parallèle au notre... Choisissez un personnage, une arme et partez découvrir ce nouveau monde : découvrez la ville et trouvez des missions. Mais avant cela, comment pénétrer l'Online-Universe ?

On termine avec un autre programme de Shadow15510
Tuile & co Un jeu dans lequel vous incarnez le patron d'une tuilerie. Une seule consigne : ramasser un max de pognon !


Enfin, je remercie d'avance les votants ainsi que les programmeurs pour la qualité de leur programme.
Le vote se termine le dimanche 8 juillet, à cette date nous compterons les points et le gagnant de cette première re-édition sera nommé ! Son programme bénéficiera d'une mise en avant d'un mois en page d'accueil du site ainsi que de la célèbre coupe dorée dans la description de son programme.

Commentez cette news ! (12)
écrit par Shadow15510 le 01/07/2018 20:00 Voir toutes les news

La Revue des Projets - 111
Bonsoir à tous !
Une pleine benne de bonnes nouvelles pour clore ce beau mois de Juin ! A commencer par l'arrivée d'un nouveau membre très motivé : je pense à Redeyes qui, à peine arrivé nous poste un beau RpG dont nous aurons l'occasion de reparler croyez-moi. natnat avance son projet dont il va nous parler aujourd'hui. N'oublions pas les plus anciens : NineStars nous réserve un petit quelque chose ! Et bien sûr notre rendez-vous hebdomadaire avec Drak... Sans oublier un invité surprise j'ai nommé Zezombye


Depuis un mois déjà natnat travaille sur un nouveau projet : Casio_asm un assembleur double puisque compatible et sur PC et sur calculatrice !! Ce projet faramineux s'apparente à la création d'un langage. Si vous avez bidouillé de l'IDE vous savez ce que représente le travail de créer l'IDE et le langage.

natnat a écrit :
Bonjour à tous,

Depuis environ un mois, je travaille sur un projet nommé Casio_asm. Il s'agit d'un langage assemblé pour calculatrice ET pc.
Le projet se présente sous la forme d'un assembleur et d'une VM, tous les deux fonctionnels sur calculatrice ET pc, et à l'aide de ces deux programmes, il est possible d'écrire des petits (ou pas, hein) scripts en un langage type assembleur. Ces scripts seront ensuite executés aussi bien sur Casio que sur pc et tournent beaucoup plus vite que le Basic.

L'idée était que le Basic est pratique car il peut se programmer depuis la calculatrice (donc en cours ou en permanence) mais il est lent. Le C est rapide, mais il faut le SDK ou une toolchain GCC pour le compiler. Donc mon langage est un compromis entre les deux: plus rapide que le Basic, mais programmable directement depuis la calculatrice.

Le projet est toujours en phase de dev. Certaines fonctionnalités sont encore absentes et il y a toujours des crash/bugs.
Liste de ce qui fonctionne
Cliquez pour recouvrir

-> L'assembleur
-> Le processeur virtuel, dans l'ensemble
-> L'arithmétique (sur les entiers)
-> Les opérations de base sur les décimaux
-> Les conditions
-> Les sauts
-> La gestion du clavier (sauf la touche AC, et seulement quelques touches sur PC)
-> Une partie de la lib graphique (rectangles, lignes, partiellement les cercles, pixels)

Liste de ce qui est à améliorer ou à réparer
Cliquez pour recouvrir

-> Une partie de la lib graphique (les cercles en XOR, tout le reste)
-> Le design des interruptions (crash si interruption alors qu'on est dans le handler)
-> Le jeu d'instructions
-> La structure du code, sérieusement, c'est super moche

Liste de ce qui reste à implémenter
Cliquez pour recouvrir

-> Un support Gint pour avoir un code beaucoup plus propre et des vrais événements
-> Les timers
-> Le support Windows, pour le moment, ça ne tourne que sur Linux (et probablement Cygwin).


De plus, comme cela ne me suffit toujours pas, je suis aussi en train d'implémenter un émulateur et assembleur Super-H qui viendra, à terme, remplacer Casio_asm et pourquoi pas créer des vraies VM sur Casio ou émuler la calculatrice sur PC?

Sur ce, bonne journée à tous, et bonne programmation!

Un projet rondement mené qui avance bien. On applaudit bien fort ! En effet il très complexe de coder un langage et un tel projet demande (en plus de connaissances très pointues) une implication régulière et beaucoup de temps. On a hâte de voir le projet fini !

On poursuit avec un petit nouveau Redeyes qui se révèle parfaitement à l'aise avec le Basic ! Bienvenue parmi nous. On le félicite pour son implication et son jeu : Sword Burst Zero dont il va nous parler.

RedEyes Kurenai a écrit :
Je vous présente un jeu de rôle intitulé SwordBurstZero.
Vous découvrirez un monde parallèle au monde réel, le Online-Universe par l’intermédiaire de votre personnage principal choisi au début, via un nouveau phénomène découvert en 2064: Le Sword-Accross. Cependant une menace pèse sur le Online-Universe: des forces maléfiques tentent de s'approprier cet univers en éradiquant tous ceux qu'ils jugent inaptes à y vivre, et ainsi réveiller la menace absolue, Proto Z.

Celui-ci veut contrôler non seulement le Online-Universe, mais aussi le monde réel. Sakimi Hakyu, la présidente de la société Neuro-Communication a besoin de votre aide! Cette société, se situant dans le monde réel à Tokyo est en lien direct avec le Online-Universe.
Proto Z n'est pour le moment qu'un faible virus dans le système informatique de cette société, et aussi dans le Online Universe. Il prend forme petit à petit. Vous incarnez un personnage de votre choix. Vous serez convoqué au départ par Sakimi Hakyu avec deux autres personnages que vous connaîtrez au fil de votre aventure.

Après votre première rencontre, vous devrez vous rendre dans cette fameuse société Neuro-Communication où Sakimi Hakyu va créer le portail au Nord de Tokyo pour acceder à l'univers parallèle. Vous ferez ainsi votre premier pas dans le Online-Universe et une fois à l’intérieur, vous y serez sous une autre aspect physique.

Or, pour pouvoir lutter contre la menace, vous devez choisir une arme et gagner de l'experience au combat. Au départ, vous aurez le choix entre 3 armes, et vous mènerez votre premier combat.
Vous découvrirez à travers le jeu de nombreuses difficultés sur votre chemin! Surmontez-les, gagnez en experience et sauvez les deux mondes de la destruction absolue!

Un jeu qui a l'air passionnant et dont nous attendons la partie suivante avec impatience ! On encourage Redeyes n'hésitez pas à laisser un commentaire, une note ou un test : ça fait plaisir d'avoir un retour et ça encourage ! Tout ceux qui en ont eu des retours ont vu leurs projet avancer plus vite (et je sais de quoi je parle ! ). J'encourage Redeyes à poursuivre ainsi et à créer un topic sur son jeu dans la partie Projets de Programmation.

On continue avec une vieille branche pour ainsi dire NineStars qui, en ce moment, travaille un moteur graphique 3D. J'ai nommé Windmill.
Ce projet vertigineux avance dans le plus grand calme... C'est pourquoi il fallait que NineStars trouve le temps de nous en dire un peu plus...

Un petit résumé des épisodes précédent :
NineStars a réussi à afficher des murs parallèles sous formes de deux parallélogrammes de part et d'autre de l'écran... (ça c'était le premier jour)
Depuis il a relevé le défi d'appliquer des textures, d'afficher des cubes texturés (pour faire une caisse pas exemple). Nous avons eu le droit à une accélération cardiaque avec la gestion de la vue de côté, l'opacité des mur et la correction d'un bug étonnant : le chevauchement des textures...
NineStars a construit un moulin à vent en 3D avec les pâles, le toit et les murs en planches ! Il nous a surpris une fois de plus avec les objets dynamique (les pâles qui tournent ).
Il a eu plus récemment un problème d'affichage : les objets proche de la caméra et en bordure d'écran disparaissait. Mais une fois de plus ce problème est résolu !
Bon j'ai assez parlé : laissons NineStars nous expliquer les nouveautés de son projet.

NineStars a écrit :

Jour 15

Une grosse surprise se prépare. Encore quelques soucis en train d'être corrigés et vous allez en prendre plein les yeux promis
En attendant cette semaine j'ai corrigé quelques bêtes erreurs comme un 1204 au lieu d'un 1024.
Changé un tas de chose en interne pour homogénéiser mon code
Les ajouts depuis le jour 13 :

:hère: Ajout d'une ligne d'horizon (c'est tout bête mais ça rend bien mieux)

:hère: J'ai changé les coordonnées des textures, maintenant on définit la taille en pixel en la texture, et la taille dans le monde.
Par exemple un texture de 32x32 peut correspondre à un carré de taille 20x20 (soit 2m carré), ou plus, ou moins c'est au choix.
- En affichant cette texture sur un rectangle de taille 40x40, la texture va automatiquement boucler.
- En renseignant 0x0 en taille réelle, la texture va s'étirer sur son support au lieu de boucler.
C'est très pratique pour répéter des motifs sans avoir à créer un autre rectangle, ou alors pour appliquer une texture sur n'importe quelle surface.

Actuellement j'ai un problème de serpent qui se mort la queue, clipping() doit être executé avant afficher() et afficher() doit être executé avant clipping() sinon j'ai des triangles qui s'effacent à certains moment. Je suis en train de corriger ça, mais c'est un peu casse tête

j'ai une grosse piste d'optimisation, si ça fonctionne j'estime à +30% de fps !

Plus qu'un moteur graphique : Windmill peut s'apparenter au travail d'une carte graphique en trois dimensions !

Décidément cette RdP va être l'une des plus remplie ! Drak continue d'avancer dans son projet de jeu de rôle en BASIC et ce à bonne vitesse. Ce jeu comporterait 3 types d'actions (Puissance, Force Technique) avec plusieurs attaques, ripostes, sorts, potions de chaque types. Vous avez une idée de sort, vous voulez que votre nom apparaisse dans le jeu n'attendez plus et lisez ! Si vous trouvez cela déplacé de demander à ce que son nom apparaisse sachez qu'il est très dur de trouver des noms qui sonnent "bien" en grande quantité.

Drak a écrit :
Hey hey hey!

J'écris un petit texte rapide pour vous tenir au courant des avancées de mon projet de jeu (un RPG en basic !) :

J'ai fini depuis près d'une semaine la phase d'architecture du code. J'en suis maintenant à l'écriture du code, c'est-à-dire au moment le plus... le moins... enfin, au moment difficile.

C'est pour cette raison que votre participation m'importe. Je n'ai pas la science infuse, et les idées et solutions techniques que je trouve ne sont pas forcément les meilleures. Dans les semaines à venir, je réactualiserai régulièrement le topic dédié pour vous tenir au courant ou vous appeler à l'aide.

N'oubliez pas ! Vous pouvez demander une place dans le jeu, autrement dit un petit clin d’œil personnalisé dans le projet final ! Manifestez-vous !

Suite aux recommandations de Lephenixnoir, j'ouvrirai vraisemblablement – je ne sais pas pour quand encore – un Git pour ce projet. Toutefois, mon ordinateur personnel étant en panne, la progression de ce projet risque d'être entravée pour une durée encore indéterminée. Il se peut également que j'aie perdu des fichiers relatifs au jeu, comme du texte ou des images.

Comme toujours, Stay tuned!

Je radoterais si je disais "Bon courage" ou autre formule du même tonneau... Donc je ne dis rien mais je n'en pense pas moins !

Encore un article ?? Non... Eh ben... Faut en garder pour la semaine prochaine... Juste un tout petit ? Ah bon ben ça va alors ! C'est Zezombye qui nous tient au courant de l'avancé de son environnement de développement en BASIC ; Mesdames, Messieurs, voici BIDE 4.3 : avec quelque nouveautés au programme que Zezombye va nous présenter :

Zezombye a écrit :
BIDE 4.3 est sorti

La principale nouveauté : une update au générateur de multi drawstat. La grille est plus espacée pour une meilleure lecture, il gère le zoom (ctrl+molette), les types de lignes (sketchthick/sketchdot/sketchbroken), et il affiche la position actuelle du curseur.



Outre ça :
- Support des programmes en mode "base", il faut ajouter l'opcode &negative_B; à la fin du nom
- L'emplacement de sauvegarde est maintenant par défaut l'emplacement du fichier ouvert
- Lors d'une importation de picture de taille 0x400, demande de confirmation de taille pour ne pas faire d'erreur (sinon, met à 0x800)
- Ajout du caractère caché △ dans le sélecteur de caractères
- Correction d'un bug lors de l'importation d'une picture entre 0x400 et 0x800

Téléchargement : https://www.planet-casio.com/Fr/logiciels/voir_un_logiciel_casio.php?cat=6

On félicite Zezombye pour BASIC-IDE (BIDE) oui oui oui ça vient de là... Cet IDE est très utile car il permet de programmer avec toute l'ergonomie du PC avec la possibilité de tester le programme via l'émulateur. BIDE dispose d'un convertisseur image.png en *.g1m : un format lisible par la calculatrice. Encore mieux BIDE est codé en Java autrement dit il est compatible sous Windows, Mac et Linux... On ne peut que vous encourager à l'essayer.

Si vous avez proposé un article mais qu'il n'apparait pas dans cette Revue des Projets, ne vous inquiétez pas : il paraitra la semaine prochaine.

On termine avec l'apparition d'une nouvelle rubrique à la fin de chaque RdP : la liste de programmes de la semaine : des jeux, et des cours mais aussi et surtout des utilitaires. En effet, les cours sont mis en avant lors du Bac ; les jeux avec le JdM c'est au tour des utilitaire d'avoir leurs mise en avant !


Cette semaine 7 programmes ont été publiés :

Les suites Ce cours de hashby permet de connaitre la forme explicite ainsi que la limite et la variation d'une suite géométrique, arithmétique, ou arithmético-géométrique. Attention ce programme n'est compatible que pour les Fx-CP 400.

SI BAC 2018 Ce cours, pour les classes Siences de l'Ingénieur, publié par Alananas regroupe les formules que l'son est sensé connaître en première et en terminale SI en mécanique et en électronique

SI BAC 2018 Lite Ce programme est le même que celui juste au dessus (du même auteur également). Il est néanmoins plus léger. Ces deux programmes sont compatibles sur les Graph 35 à 100

SIRDM un cours de JuKapi qui récapitule les formules liées à la torsion, la flexion, la traction, ainsi que des explications sur les moments quadratique et la loi de Hooke. Ce programmes est compatible aves les Graph 35 à 100

Casio_asm Si cela ne vous dit rien, relisez bien le début de cet article Ce programme de natnat est compatible avec les Graph 35 à 100

SwordBustZero Ce RpG de Redeyes devrait également éveiller en vous un souvenir... Ce programme fonctionnes sur les Graph75/85/95 (SD) mais il est également compatible avec les Graph 35 à 100

Filetage Ce programme de fabcvlr permet de connaitre la pas, le diamètre, la clé plate à utiliser ou quelle clé à six pans choisir et cela en fonction du diamètre de votre vis. Ce cours est compatible avec les Graph 35+/75/85/95 (SD)

Voila pour ce soir et n'oubliez de rester en ligne : dans 2 heures le vote du Jeu du Mois reprend avec une liste bien remplie !

Voir la RDP précédente : RDP - 110.

Commentez cette news ! (12)
écrit par Shadow15510 le 01/07/2018 18:00 Voir toutes les news

Les vertus et intérêts éducatifs de la calculatrice.
Quels sont les intérêts de la calculatrice programmable alors que nous avons les Smartphones avec Internet ? Qu'est-ce qui passionne les membres de Planète Casio ? Cela vaut-il la peine d'apprendre à se servir d'une telle machine ? La réponse tout de suite.

Cet article s'adresse aussi bien aux lycéens qu'aux enseignants, ainsi qu'à toute autre personne susceptible d'être intéressée par la programmation. Au fil de ces lignes, je mettrai en relief ce qui fait les intérêts de l'usage de la calculatrice, dans un cadre scolaire principalement (lycée).

La calculatrice, outil de compréhension des mathématiques


La calculatrice est un outil formidable qui présente de nombreux avantages. Il permet d'avoir rapidement accès aux résultats de calculs souvent utilisés en classe (racines, puissances, trigonométrie, etc.). La calculatrice est aussi un outil de vérification et d'autonomie : l'élève qui résout des problèmes mathématiques est en mesure de vérifier rapidement l'exactitude de ses calculs !

C'est important pour un élève de ne pas se sentir complètement dépendant des enseignants et d'être en mesure de maîtriser, par ses moyens, des calculs. Toutefois, l'usage intensif d'une calculatrice peut entraîner des lacunes en calcul mental chez beaucoup d'élèves. Si vous vous identifiez à ce portrait, je vous conseille d'essayer de ne vous servir de votre machine qu'en cas de nécessité. Une dépendance totale à la calculatrice ne vous aidera pas à développer vos capacités de calcul et donc bien comprendre les mathématiques. C'est pourquoi on trouve une certaine méfiance envers cet outil chez certains enseignants de mathématiques.

Les calculatrices graphiques permettent d'obtenir la représentation graphique d'une fonction. Des représentations visuelles aident à comprendre les concepts abstraits que sont les mathématiques. Ainsi, l'élève peut facilement savoir que les fonctions Sinus et Cosinus ont une représentation en forme de vague, constater que la fonction inverse f(x) = 1/x n'est pas définie sur zéro, etc.

En quelques mots, la maîtrise de cet outil n'est pas un but, c'est un moyen ! La calculatrice offre de véritables possibilités de calculs et d'approches qui ne seraient pas envisageables si on devait faire les calculs à la main. Ne sous-estimez pas l'utilité de ces valeureux compagnons !

Un tremplin vers la programmation !


C'est l'un des points sur lequel je souhaite le plus m'attarder. Les modèles de calculatrices tels que la Casio Graph 35+ ou encore la TI-82+ sont des modèles qui permettent de s'initier à la programmation directement sur l'interface de la machine. Pour les modèles Casio, on parle de Basic Casio. C'est un langage de programmation assez limité qui est lu par l'interpréteur intégré par défaut dans la calculatrice. Cette possibilité permet à l'élève d'aborder un premier contact avec la programmation, avec des notions d'arithmétique et de logique informatique. Elle constitue généralement un tremplin vers le monde de la programmation chez certains lycéens, ce qui fut le cas pour moi ! Wheee !

Généralement, les notions de programmations apprises en classe se résument à cela :
– Ce qu'est une variable
– Utiliser une boucle (For, While...)
– Afficher des informations
– Utiliser certaines fonctions mathématiques

L'emploi de la programmation en classe se résume donc à une application directe à des problèmes mathématiques. Un apprentissage qui passe donc à côté de plus de 75% des possibilités qu'offre le Basic Casio ! Par exemple, le mode graphique en Basic ou encore le Getkey que l'on exploite dans énormément de jeux sur ce site sont souvent ignorés des enseignants. Toutefois, cette méconnaissance des potentialités de la programmation sur calculatrice s'explique : les élèves peuvent avoir des modèles différents ! Entre les modèles TI et Casio, ainsi que la Numworks qui vient de sortir sur le marché pour concurrencer ces deux dernières marques, cela complexifie la tâche de l'enseignant.

Planète Casio est dotée de ressources éducatives pouvant combler ce manque : pour ce qui est de l'apprentissage du Basic Casio, nous avons un excellent tutoriel ici. Nous avons également la liste des fonctions Basic Casio à laquelle je me réfère toujours. Vous trouverez davantage d'informations en fin d'article.

Le Basic Casio est un langage qui a aussi beaucoup de limitations : 60 000 octets de mémoire vive disponibles, écran de 128 * 64 pixels en noir ou blanc (pour les calculatrices monochromes répandues au lycée) et son exécution est si lente qu'elle est perceptible par l’œil humain. Les contraintes sont nombreuses. En se lançant dans la conception de programmes plus longs et complexes (comme un programme de soutien au Bac, ou bien un jeu abouti), le lycéen doit apprendre à optimiser son code, à prendre conscience des limites de sa machine. C'est essentiel quand on se lance dans la programmation ! Un ordinateur propose aujourd'hui de très bonnes performances et capacités de stockage, si bien qu'on a tendance à oublier qu'un fichier, une information, ça a un poids.

De ces contraintes naît aussi l'envie de se tourner vers un autre langage avec de meilleures possibilités. Il est possible de faire des programmes en C pour la calculatrice – les Add-ins. L'apprentissage du C est complexe et pas forcément accessible à tout le monde, mais un tel apprentissage – toute l'équipe peut en témoigner ici – constitue une base très solide qui servira dans l'apprentissage de tout autre langage de programmation, je vous assure. Cela comprend aussi l'apprentissage de l'organisation de la mémoire d'une machine et de son fonctionnement. Avec le nouveau modèle de calculatrice Casio Graph 90+E, on peut aussi commencer à apprendre le Python, un langage répandu, reconnu et utilisé pour réaliser des programmes sur ordinateur, des sites web, des jeux et même utilisé dans la robotique ! Ce sont des compétences aujourd'hui très recherchées et utiles, dans un monde où le numérique et le web occupent une place immense.

En découvrant les fonctions disponibles en Basic, certains commenceront à vouloir complexifier les programmes réalisés en classe, voire même commencer à réaliser des jeux. C'est alors que, curieux d'en apprendre davantage ou de partager ce qu'ils ont fait, des lycéens découvrent Planète Casio – ou TI-Planet. Certains d'entre eux découvrent alors qu'ils ignoraient encore beaucoup de choses que leur professeur de mathématiques n'avait pas donné à voir en classe – professeurs, ceci n'est pas un blâme.

La calculatrice, et par extension ce merveilleux forum, constituent un tremplin vers le monde de la programmation et peuvent susciter des vocations.

Une île de création vidéo-ludique


Comme vous l'aurez sans doute remarqué, ce site propose un très large panel de jeux différents pour nos valeureuses petites machines. Un certain nombre d'entre eux sont des adaptations de jeux déjà existant tels que KanColle Airstrike simulator ou Plague.inc pour citer les plus récents, ou bien Zelda, Fruit Ninja, Pokemon, Minecraft, Kirby pour citer parmi les plus connus... D'autres jeux sont des créations plus singulières et plus spécifiquement pensées pour la calculatrice. Ils sont très nombreux et diversifiés ! Depuis 2004, des programmes de jeux s'échangent sur cette plate-forme. Les membres de la communauté s'entraident dans la conception de ces projets de jeux et donnent des retours assez nombreux lorsqu'un nouveau jeu est posté !

La calculatrice programmable, de part ses nombreuses limitations que j'ai évoqué plus haut, rend la conception de jeux globalement moins difficile, d'une part parce que l'apprentissage du Basic Casio est léger, d'autre part parce qu'on ne s'occupe pas du son, de la musique, des couleurs, etc. Les limitations physiques de la machine donnent aussi – paradoxalement – des libertés aux utilisateurs qui tentent de pousser les limites de la calculatrice. Par exemple, Ninestars s'est lancé depuis quelques temps déjà dans la conception de Windmill, un moteur 3D ! Lephenixnoir, quant à lui, a même mis au point Gint, un environnement de développement d'add-ins qui permet d'afficher des valeurs de gris sur une calculatrice monochrome – et bien plus ! Oh, et puis, pour la musique, ce n'est pas tout à fait vrai. Certains ont réussi à faire faire jouer de la musique à leur calculatrice !

En tous cas, s'attaquer seul à la création d'un jeu n'est pas facile. Pour un jeu en 3D sur Unity par exemple, vous allez en chier. Pour un jeu en 2D, c'est déjà un peu plus accessible en terme de quantité de travail. Pour un jeu sur une calculatrice monochrome en 128*64 pixels et sans son, ça simplifie les choses. Toutefois, faire un bon jeu sur calculatrice n'est pas forcément une tâche aisée !

Je veux apprendre à bien programmer sur ma calculatrice et faire des jeux !

Excellent, c'est ça que je veux entendre, bébé. Nous avons un excellent tutoriel ici pour apprendre le Basic Casio appliqué au jeu vidéo. Si vous souhaitez avoir toutes les bases, et même si vous pensez déjà les avoir, suivez minutieusement ce tutoriel qui vous apprendra certainement des choses. Vous pouvez également regarder les tutos de qualité dont nous disposons ici. Nous avons également la liste des fonctions Basic Casio à laquelle je me réfère toujours. Enfin, n'hésitez pas à venir partager vos projets en cours sur la page dédiée !

Sources :
Pour regarder les jeux de Planète Casio, ça se passe ici !
Le mode examen du Bac est d'actualité, informez-vous
Un essai précis sur la place de la calculatrice dans l'enseignement des mathématiques au collège et au lycée. Téléchargez et lisez le pdf ici.

Commentez cette news ! (8)
écrit par Drak le 27/06/2018 12:00 Voir toutes les news

La revue des projets - 110
Le soleil se montre, la température grimpe, les vêtements légers sont de sortie, les ordinateurs surchauffent encore plus, et les journalistes ne parlent que du bac ou de Manu ! Oui, vous l'aurez compris, ça sent l'été ! Ça sent également la nouveauté, avec deux nouveaux rédacteurs depuis quelques semaines à peine, à savoir Shadow15510 et Drak – oui, c'est moi !

Laissez-moi, chers casionautes, vous parler d'un projet assez impressionnant ; celui de Sentaro21. C'est Lephenixnoir qui prend la parole pour lui, car notre ami ne parle malheureusement pas français. Ce projet se nomme C.Basic. Lephenixnoir, à toi le micro !

Lephenixnoir (et indirectement Sentaro21) a écrit :

Vous avez certainement déjà entendu quelqu'un évoquer l'idée de refaire un interpréteur Basic pour voir si celui de Casio est vraiment bridé ou non. Mais avez-vous déjà entendu dire que Sentaro21, un développeur japonais, l'a fait ?

Son projet s'intitule C.Basic et est en fait une partie d'un plus vaste appelé C:Basic dont le but est d'écrire un compilateur Basic !

C.Basic est donc un interpréteur Basic alternatif compatible avec Graph monochromes et Graph 90+E.

La version actuelle de C.Basic est déjà avancée et dispose du support de nombreuses fonctions classiques ou originales. Il a porté des grands projets comme Graph 3D, Tokitori et même Calc Wars de Zezombye !

Allez donc voir sa page pour tester cet interpréteur capable d'approcher même les performances du C ! De quoi rejouer à de bons programmes avec un supplément de fluidité. Laissez un commentaire (en anglais) si ça vous a plu !

» Projet C.Basic de Sentaro21


Merci beaucoup de ces indications ! Toutefois, laissez-moi vous éclairer davantage, mes chers lecteurs. Ce projet est en fait un Add-in à installer sur votre calculatrice. Vous pourrez alors profiter d'un éditeur semblable à celui de la calculatrice (dans Menu → PRGM), avec de nombreuses fonctionnalités et petites améliorations qui rendront l'écriture du code plus agréable et plus pratique. Par exemple, en un seul appui de touche, vous pouvez passer de l'écriture en majuscule à l'écriture en minuscule. Vous pouvez même importer des programmes que vous avez écrit auparavant, un par un, dans la mémoire de stockage de la calculatrice pour les manipuler depuis C.Basic !

Si vous voulez mon avis, ça vaut le coup de se pencher sur ce projet prometteur, surtout si vous préférer éditer vos programmes en Basic directement depuis la calculatrice. Moi, j'ai essayé Block Tower de Ninestars, qui a lui aussi été porté pour C.Basic. Le jeu était si fluide ! L'essayer, c'est l'acheter ! (Mais non, c'est gratuit .)

Block Tower, un jeu en Basic de Ninestars.

Nous poursuivons donc notre article avec... Oh ? Encore Lephenixnoir ? Décidément, notre administrateur est sur tous les fronts ! Pas étonnant qu'il aie plus de dix kilos de points. Cette fois-ci, c'est pour nous parler de WebCalc, un lecteur de documents qui lit l'html et le CSS ! Cet Add-in a été posté en 2015. Qu'est-ce qui a fait replonger Lephenixnoir dans ce projet ? À vous les studio !

Lephenixnoir a écrit :

Salut à vous ! Récemment Palmenros, un membre un peu discret, m'a contacté pour demander comment étendre le moteur d'affichage naturel de WebCalc. Et puis il lui a trouvé des bugs, aussi !

Je me suis replongé dans la chose, qui avait déjà servi à Eigenmath, et j'ai pu constater que mes pratiques de code d'il y a quelques années étaient encore assez rudes. Mon parser en particulier est une horreur très difficile à étendre pour rajouter de nouvelles fonctions.

Le parser est une partie du programme qui permet de transformer les expressions TeX en une représentation structurée. Par exemple, il transforme le texte suivant en un arbre dont les nœuds (textes) sont des structures et les arêtes (flèches) sont des pointeurs :

\frac{\vec{AB}{a + b}}



J'ai donc entamé la réécriture de cette chose, ce qui n'est pas une tâche très difficile mais reste très intéressant. En effet, on peut faire générer le parser automatiquement par un logiciel (dit parser generator) à partir d'une description abstraite du langage que l'on veut parser. J'ai commencé à faire ça avec Bison, l'implémentation GNU du célèbre Yacc.

J'ai l'intention de rendre le moteur assez paramétrable pour qu'on puisse l'utiliser à la fois sur Graph monochrome et sur Graph 90 et j'ai de bons espoirs que ça va marcher. Je vous mettrai des images dès que j'en aurai !


Oh, dear god! J'en ai l'eau à la bouche, pas vous ? Que de projets ambitieux et complexes qui pousseront encore plus loin les possibilités de la calculatrice ! Et puis, c'est l'heure de faire péter le champagne pour moi : mon premier article de la RDP publié ! J'espère que cette lecture vous a plu.

N'hésitez pas à laisser un commentaire, ou bien à parler de vos propres projets, grands ou modestes, pour la RDP suivante !
Et, si vous ne faites pas encore partie de Planète Casio, alors... Partez vous inscrire !!!


Voir la RDP précédente : RDP - 109

Commentez cette news ! (13)
écrit par Drak le 24/06/2018 18:00 Voir toutes les news

TDM n°1 : Créez de magnifiques Écrans titres !
Mesdames, messieurs, j'ai l'honneur et l'immense plaisir d'inaugurer le tout premier Tuto Du Mercredi [TDM], une idée qui fut proposée par Ne0tux. Voici le principe : un mercredi sur deux, nous postons un petit tutoriel sur l'Utilisation de la calculatrice, le Transfert, la Programmation, ou encore la Conception de jeu !

Créez de magnifiques Écrans titres !

Niveau : ★ ★ ★ ☆ ☆

Souvent, les programmes en Basic Casio exploitent les Pictures, des images enregistrées sur la calculatrice qui permettent d'avoir des éléments graphiques fins et précis, comme des menus, des images de fond et bien sûr des écrans titres ! Ce tutoriel s'adresse aussi aux programmeurs d'Add-ins (en C) qui souhaitent soigner leurs graphismes !


Images issues du projet Arcuz de Dark storm, en C.

Pour ce premier TDM, nous allons donc apprendre à créer des Pictures dignes de ce nom. Pour cela, nous n'allons pas travailler sur calculatrice mais sur ordinateur. Nous aurons donc besoin des logiciels suivants :
GIMP, ou un autre logiciel de traitement d'image équivalent (non, Paint n'est pas un logiciel de traitement d'image équivalent. Photoshop en est un)
BIDE (version 4.2 ou supérieure)

I – Chercher des images sur le net.

Cette étape est essentielle. Nous allons nous constituer une petite banque d'images pour nous inspirer et à utiliser dans le montage. Dans mon exemple, je vais faire un écran titre pour une adaptation d'Arcuz. J'ai donc récupéré quelques images ici :


À présent, ouvrons le logiciel GIMP et commençons à travailler !

II – Interface de GIMP

Vous ne connaissez pas forcément ce logiciel, et l'aborder n'est pas toujours évident. Je vous présente donc rapidement l'interface du logiciel :


Si jamais, par mégarde, vous fermez l'une de ces deux fenêtres flottantes, vous pourrez les réafficher en allant dans « Fenêtres » ► « Groupes de fenêtres récemment fermés ». Vous pouvez également masquer ces fenêtre flottantes avec Tab.

III – Manipulation d'image avec GIMP

À présent, nous allons ouvrir une de nos images pour commencer. J'en profiterai pour vous montrer les outils dont nous aurons principalement besoin. Allons donc dans « Fichier » ► « Ouvrir » (Ctrl + O). Nous allons commencer par redimensionner l'image pour qu'elle soit suffisamment petite pour l'écran de la calculatrice : 128*64 pixels. Utilisez l'outil « Redimensionner » puis, dans les réglages, réglez « aucune » dans l'option « Interpolation ». Cela nous permettra de redimensionner l'image sans anti-aliasing, autrement dit sans floutage dégueulasse.


Cliquez sur l'image et redimensionnez à la largeur souhaitée. Les chaînes dans la fenêtre des dimensions permettent de conserver le rapport largeur / hauteur. Nous arrivons alors à ce résultat :


Ah. Problème. Nous venons de modifier la taille du calque, mais pas du canvas, qui est l'espace de dessin. Allons, soldat, on ne perd pas espoir ! Allons dans « Image » ► « Taille du canvas... ». Rentrez les même dimensions que le calque et le tour est joué. Autrement, la manipulation « Image » ► « Découpage automatique de l'image » est plus rapide.

À présent, je ne veux conserver que le titre « ARCUZ » de mon image. Je vais faire quelque chose de simple, je vais sélectionner la zone que je souhaite garder pour effacer le reste. Pour cela, je vais prendre l'« outil de sélection rectangulaire » dans ma boite à outil et sélectionner la zone en question par un simple cliquer-glisser.


Ici, plusieurs choix. Soit nous rognons l'image, soit nous supprimons tout ce qu'il y a autour. Pour rogner l'image selon votre sélection, faites « Image »► « Rogner selon la sélection... ». Pour supprimer ce qu'il y a autour de la sélection, vous pouvez inverser la sélection avec « Sélection »► « Inverser » (Ctrl + I) puis presser la touche Suppr de votre clavier. Pour ma part, je vais rogner l'image. Vous pouvez supprimer les parties qui ne vous intéressent pas à coup de sélections / suppressions.

Dans mon exemple, je veux isoler le titre. Comment faire ? L'idée est de supprimer les couleurs qui ne sont pas celles du titre, car j'ai beaucoup d'éléments qui viennent polluer ce dernier. Pour ça, un outil magique : La sélection par couleur.


Avec cet outil, sélectionnez les couleurs qui ne sont pas celles de votre titre pour les supprimer de la même manière qu'avec les sélections rectangulaires. Régler le seuil pour augmenter ou diminuer la tolérance dans les réglages. Vous pouvez aussi utiliser la baguette magique qui est l'« outil de sélection contiguë » : cet outil sélectionnera les zones adjacentes qui sont dans le même ton de couleur. Ce n'est pas grave si le résultat n'est pas parfait. Après ce travail de suppression, j'obtiens ceci :


Ensuite, nous allons utiliser un outil assez particulier qui va nous permettre d'obtenir une image en monochrome. Cet outil se trouve dans « Couleur » ► « Seuil ». Modulez les sliders pour obtenir le meilleur résultat visuel :


Maintenant, fignolons les détails. Prenez l'outil crayon et régler la taille à 1 (un pixel). Remplissez des pixels en noirs en cliquant et inversez les deux couleurs du crayon en appuyant sur X pour remplir des pixels en blanc. Vous pouvez également sélectionner des parties de l'image et les couper/coller pour les déplacer. Voila le résultat :


Effectuez les mêmes types d'opérations avec les autres éléments que vous vouliez ajouter. Pour déplacer un calque d'un canvas à un autre, un cliquer/déposer dans le canvas depuis la fenêtre des calques suffit. Un copier/coller fait également l’affaire. Assurez-vous, au final, d'avoir une image aux bonnes dimensions : 128*64 pixels ! N'hésitez pas à prendre votre temps. Un petit thé ?


Une fois le résultat voulu atteint, faites « Fichier » ► « Export As... » (Exporter en tant que...), ou bien Maj+Ctrl+E. Enregistrez votre image au format png puis ouvrez BIDE. Nous allons maintenant faire de cette image une Picture exploitable dans votre jeu !

IV – Conversion en Picture avec BIDE.

NB : si cette étape ne fonctionne pas de votre côté, assurez-vous de réinstaller la dernière version disponible de BIDE.


Ouvrez BIDE. Si vous avez déjà commencé votre projet, ouvrez le dans « File » ► « Open Basic Casio file ». Pour récupérer et exploiter notre image, allez dans « Tools » ► « Convert image to picture ». Allez chercher l'image en question et validez. Il est probable que vous ayez un message d'erreur indiquant : « ERROR: Size must be between 0x4 and 0x800 ». Si vous rencontrez ce bug, c'est que vous n'avez pas la version la plus récente de BIDE. Ce message correspond en fait au poids, en octets, de la Picture. Pour en savoir davantage sur le fonctionnement des Pictures et de leur taille, vous pouvez regarder ce lien ainsi que la description de ce programme.


Pour ma part, je règle la taille de ma Picture à « 400 » (1024 octets) puisque je vais l'exploiter avec la fonction BG-Pict dans mon programme. La Picture est donc visible et prête à être exportée avec le reste du projet ! Vous n'avez plus qu'à faire « File » ► « Save to g1m » Pour sauvegarder votre projet. La Picture y sera comprise. Il ne vous reste plus qu'à réaliser le transfert sur votre calculatrice ou sur votre émulateur, pour voir enfin le résultat ! Notez que cette image pourra aussi servir d'image de présentation lorsque vous posterez votre programme. Une belle image de présentation attirera beaucoup plus de joueurs, je vous assure !


C'est-y pas bô ?

Liens utiles :
Tout savoir sur les Pictures !
En apprendre davantage sur l'utilisation de Gimp.
Des questions sur BIDE ? Postez un commentaire !

Commentez cette news ! (34)
écrit par Drak le 20/06/2018 18:00 Voir toutes les news

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2018 | Il y a 21 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd