Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Actualités


Index du Forum » Actualités » La revue des projets - 136
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

La revue des projets - 136

Posté le 13/01/2019 22:03

On se retrouve après une semaine creuse pour notre rendez-vous de projets hebdomadaire. Au programme : électronique, pokémons, et interpréteurs Basic. Bonne lecture !

La deuxième semaine de 2019 a été assez tranquille et même assez peu active dans l'ensemble. Pourtant, en coulisses, plus d'un continue de travailler sur un projet secret (ou peut-être même la domination du monde !).

On commence ce soir avec Disperseur, dont le dernier programme permet de simuler des circuits électriques. Vous placez vos sources de courant (des leviers), tirez les câbles et observez le passage du courant dans le circuit. Pour ça, vous avez des ampoules qui changent joyeusement de couleur selon leur statut. Ajoutez des diodes et quelques portes AND et vous obtenez un cocktail Dispersif !


Alors comment tout ça marche-t-il ? Pour vous, le making of !

Disperseur a écrit :
Bonjour à tous sur Planète Casio !

Comme certains d'entre vous l'auront déjà lu j'ai récemment posté mon tout dernier programme Circuit. Pour ceux qui n'ont pas eu l'occasion de lire la description du programme, il s'agit d'un simulateur de circuit électronique. Vous pouvez y créer des circuits électriques et surtout les faire fonctionner. Je ne m'étalerais pas trop là dessus, j'en parle ici.

Aujourd'hui je vais vous parler de la manière dont ce programme à été développé. Avant toute chose, je précise que je parlerai un peu technique.

Tout d'abord, je me suis simplement penché sur le problème des « câbles ». En effet, simuler le déplacement d'un courant dans un câble n'est pas si simple que ça n'y paraît. Dans l'ignorance de la solution je publie donc le topic Circuits dans l'espoir que quelqu'un me guide un peu. Grâce toute la gentillesse de Hackcell, je me suis donc renseigné sur certains sites qu'elle m'a proposé. N'y ayant pas trouvé de possible piste je me lance donc dans des réflexions très compliquées. Je finis donc par comprendre que la méthode du signal qui parcourt littéralement le câble pour aller alimenter une sortie est beaucoup trop compliquée car elle emploie des notions de programmation que je ne connais pas.

Après maintes réflexions je me trouve une petite piste qui me semble pas idiote du tout. Elle consiste à stocker le circuit dans une matrice sous la forme de valeurs puis à lire cette matrice de gauche à droite et de haut en bas. Lorsque le pointeur de la boucle qui lit la matrice se trouve sur une valeur qui est entourée (toujours dans la matrice) d'un ou de plusieurs éléments (valeurs) qui sont « alimentés » alors on alimente l'élément se trouvant à la place du pointeur. Et ainsi de suite plusieurs fois pour être sur que le signal se propage dans tout le circuit. Lancé sur cette piste je me lance dans l'élaboration du programme.

Rapidement je me rends compte qu'un premier problème se pose : comment coder un élément allumé ou éteint ? La solution : chaque élément, c'est à dire chaque câble, levier (alimentation), ampoule est codé avec un nombre dans la matrice qui sert de support au circuit. Ce nombre est constitué de deux parties, l'une, la dizaine, correspond au type de l'élément (10=levier, 20=câble,... etc), l'autre, l'unité, correspond à l'état de l'élément (0=éteint, 1=allumé). On peut de cette manière distinguer par exemple un levier allumé d'un levier éteint. Ainsi, lors de la lecture de la matrice, un élément allumé aura son code (nombre dans la matrice) se terminant par un « 1 ».

Je termine donc le programme dans cette lancée puis crée mon premier circuit. Déjà le programme se trouvait très lent. A la première exécution je constate que l'ampoule qui se trouve avant le levier (j'avais : [Ampoule][2*Câble][levier]) ne s'allume pas. En fait le signal ne se propageait que de gauche à droite en raison de la boucle de lecture de la matrice. Pour régler ce problème, j'ajoute un double de la première boucle mais qui lit la matrice dans l'autre sens : de droite à gauche et de bas en haut. De cette manière le courant peut aller dans toutes les directions.

Au départ, pour savoir si un élément était allumé je faisait un simple test pour touts les éléments possibles. Ce qui s’avérait très long. Pour parer à cette répétition, je finis par découvrir la commande « Frac » qui permet de récupérer la partie décimale d'un nombre. Je remplace donc toutes mes conditions par de simple calculs avec « Frac » : je divise le nombre qui correspond à un élément à coté du pointeur de la boucle dans la matrice par 10 puis en récupère la partie décimale. Si je trouve « 0,1 » c'est que l'élément est alimenté, si je trouve zéro, alors il ne l'est pas.

Ce fut la dernière mise au point de ce programme. Suite à celle-ci je n'ait fait que des modifications esthétiques et de contenu (ajout d'éléments).

Malgré mes efforts ce programme reste lent. Il est néanmoins très fonctionnel. Je conseille de l'utiliser sur le programme C.Basic de Sentaro21, il y est presque instantané comparé au 15s d'attente à chaque placement d'élément et exécutions en Basic.

N'hésitez pas à tester le programme maintenant et à commenter !

Merci de m'avoir lu et à bientôt sur Planète Casio !

Effectivement, ce genre de simulations n'est pas facile car il y a une grande quantité de données à traiter à chaque étape (21×7 objets pouvant contenir du courant à l'écran). As-tu pensé à utiliser des techniques de calcul matriciel pour travailler sur toute la matrice en une seule opération ?

Notre second article de la soirée est partagé par Lightmare. Son topic Pokémon Obsidienne [C.Basic] suscite de l'attention en tant que l'un des premiers gros projets C.Basic. L'interpréteur est mis à l'épreuve mais produit de très bons résultats !


Voyons comme avance la programmation du futur meilleur Pokémon Basic de Planète Casio !

Lightmaaaaare ! a écrit :
bonjouuuur ! j'apporte des nouvelles fraîchement pêchée sur mon projet de pokemon Obsidienne codé en C.Basic ! Premièrement, je tiens à remercier vivement les commentaires de soutien du projet qui ont été publiés lors de la dernière RDP !
Alors maintenant, du concret :
- j'ai ajouté le menu avec : - les sauvegardes
- la liste des pokémons
- l'écran de combat ( la beauté graphique n'est pas au rendez-vous mais j'en profite pour caser le premier pokémon du jeu : Evoli ! )

- changement de la manière de gérer le changement de cartes ( l'ancien programme ne permettait pas de changer de map si on était pas sur un bord d'écran )
- une démo téléchargeable sur le topic dédié ! hell yeah !

Superbe ! N'hésite pas à mettre plus de photos, voire -soyons fous- une vidéo de ce jeu en pleine action !

La dernière intervention de ce soir est de Krevo_. L'homme au projet unique (le seul qui y parvient... !) et son Casio Basic Web Interpreter qui permet d'exécuter des programmes Basic dans votre navigateur, sans installation ni calculatrice.


L'outil s'est amélioré progressivement depuis 2014, et y voit exécutés des programmes toujours plus complexes. Alors, quelle surprise pour nous ce soir ?

Krevo_ a écrit :
Dans la Rdp 129, je vous annonçait le redémarrage de mon projet Casio Basic Web Interpreter. Aujourd'hui, 2 mois plus tard, il est temps de faire un point d'étape.

Petite liste des ajouts fait entre-temps :
- ajout de la fonction 'GetKey' avec un petit clavier virtuel et un programme d'exemple éponyme.
- Syntax error avec le numéro de ligne correspondante (..... ce qui m'a amené à envisager de faire monter la version du compilateur/parser "js/cc" car je pense que j'aurais moins galéré .... mais ça ne se fait pas sans bien tester et éventuellement réécrire certains morceaux) ... du coup le textarea est augmenté à sa gauche avec les numéro de lignes ce qui est plus pratique.
- GetKey : j'ai mis un mapping / correspondance clavier du pc <-> clavier virtuel calculatrice (donc on peut cliquer sur les touches du clavier virtuel et ça alimente getKey et réponds aussi à l'input ... et inversement)... voir les programmes d'exemple "GetKey" et "TextMenu".
- ajout de And/Or/Xor/Not (et d'un programme de test/exemple : "Bool. table") ... comme ça on peut faire les exemples du tutoriel Basic Casio de ce site, en bas de la page conditions.
- (du coup revu ≥, ≤, ≠, <, > pour qu'ils renvoient bien 0 ou 1 et non true/false de Javascript)
- ajout des variables manquantes : rhô ("r") et thêta ("θ" ou "t") .... parce que c'était pas grand chose à faire...
- ajout de la touche DEL (code touche Casio : 44) sur le clavier virtuel (mappée au Backspace du clavier PC)
- début du support des listes


Et là grosse nouvelle de ce début d'année 2019, c'est que j'ajoute dès à présent :
- le support des couleurs (White, Black, Blue, Red, Magenta, Green, Cyan, Yellow) et les instructions qui vont avec (Plot/Line-Color color et le support de color devant une instruction graphique type F-Line, Horizontal, ...)
- le support d'une "haute" résolution d'écran de 379x187 pixels (qui correspond à la taille de la zone addressable en Basic de l'écran d'une Graph 90+E sauf erreur...)

Ainsi donc les démos "screen saver" et "random dots" sont modifiés pour utiliser des couleurs. Et un nouveau programme d'exemple fait son apparition "lines" :



Certains verront dans tout ça un fort lien avec le gain récent d'un Graph 90+E au puzzle de l'avent... c'est pas impossible

Pour la suite, je ne manque pas de choses à faire. Il y a d'une part une liste de problèmes connus à régler et une liste conséquente d'instructions non-encore implémentées. Sans parler de quelques surprises "fonctionnelles" à venir dans l'année, selon le temps qui pourra être consacré au projet et les difficultés rencontrées.

A bientôt.
Krevo_

Des couleurs et de la haute résolution ! Oui, tout le monde aura pensé à la Graph 90+E. Un jour peut-être on pourra tester les programmes Basic sans même posséder la calculatrice appropriée ?

Voilà qui conclut la revue des projets de ce soir. Soutenez les créateurs de cette semaine et n'hésitez pas à nous parler de vos propres projets, sur le forum ou dans la revue de la semaine prochaine !

À bientôt sur Planète Casio !

Lire la revue des projets précédente : La revue des projets - 135
Soumettre à un article pour la prochaine revue : Formulaire de soumission

Ces deux dernières semaines, sept programmes ont été publiés :
Circuit de Disperseur
City de Krevo_
La Lorien de Shadow15510
Tuiles et co de Shadow15510
Calendrier univ de Krevo_
Carton de loto de Theodu26
Ptune3 de Sentaro21


1, 2 Suivante
Captainluigi Hors ligne Membre Points: 816 Défis: 1 Message

Citer : Posté le 13/01/2019 22:19 | #


Bravo Lephen' pour ta rapidité .
P.S:oublie pas ma lettre
Les bons artistes copient, les grands artistes volent. Picasso

Passé ici il y a peu. ಥ‿ಥ

Chaîne youtube
Cliquez pour recouvrir

Vieux projets et jeux sur Casio
Cliquez pour recouvrir
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 13/01/2019 22:23 | #


Désolé, je te cause des problèmes... je remonte tout ça dans la liste de priorité pour pas te faire attendre.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Critor En ligne Administrateur Points: 2673 Défis: 18 Message

Citer : Posté le 13/01/2019 22:54 | #


Merci pour cette RdP riche et intéressante !
Ityt Hors ligne Membre Points: 216 Défis: 0 Message

Citer : Posté le 14/01/2019 00:42 | #


Sympa tout ça
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 14/01/2019 07:23 | #


@Lephenixnoir : à l'occasion j'aimerais que tu me parle un peu de la technique matricielle stp
Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

Citer : Posté le 14/01/2019 07:42 | #


Génial Lephe ! Je vais mettre le topic a jour quand j'aurai le temps !
Sinon piur le Casio Web interpreter, je me demandais si on pouvait utiliser directement un fichier g1m ou non ?

"Quand je dis à la cour : "Sautez ! ", tout le monde me demande "jusqu'où ?" "
Dijkstra - The Witcher
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 14/01/2019 07:57 | #


Disperseur a écrit :
@Lephenixnoir : à l'occasion j'aimerais que tu me parle un peu de la technique matricielle stp

Eh bien, c'est pas très difficile : imagine que tu arrives à prendre ta matrice et la « décaler » d'une colonne vers la droite. Tu auras donc deux matrices dont les positions I,J donnent les états originaux des cases I,J et I-1,J. Ensuite tu peux écrire une fonction mathématique pour combiner les deux (il faut donc t'arranger pour que le format d'entiers que tu utilises marche bien) et l'appliquer sur toute la matrice !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 14/01/2019 09:34 | #


Lightmare a écrit :

Sinon piur le Casio Web interpreter, je me demandais si on pouvait utiliser directement un fichier g1m ou non ?


Non, hélas. Le projet n'en est pas encore au stade de pouvoir le faire, ... mais c'est quelque-chose qu'il faudra faire à terme.
Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Captainluigi Hors ligne Membre Points: 816 Défis: 1 Message

Citer : Posté le 14/01/2019 09:36 | #


Lephenixnoir a écrit :
Désolé, je te cause des problèmes... je remonte tout ça dans la liste de priorité pour pas te faire attendre.



OK merci
Les bons artistes copient, les grands artistes volent. Picasso

Passé ici il y a peu. ಥ‿ಥ

Chaîne youtube
Cliquez pour recouvrir

Vieux projets et jeux sur Casio
Cliquez pour recouvrir
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 14/01/2019 12:19 | #


@Lephenixnoir: oui mais je vois pas comment je peut propager le courant de cette manière ? Avec une fonction combinée a ta technique être..
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 14/01/2019 13:34 | #


Par exemple, suppose que dans ta matrice il y a un 1 s'il y a du courant et 0 sinon (pas d'autres infos, pour simplifier).

Mettons que Mat A c'est la matrice actuelle. Tu calcules Mat B en décalant Mat A vers la droite, en suite tu peux faire :

Mat A+Mat B>0→Mat A

et hop, tout le courant qui était dans la matrice A s'est propagé vers la droite.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 14/01/2019 14:24 | #


Il serait juste de parler de tous les programmes publiés depuis la précédente Rdp (donc ici sur les 2 dernières semaines, puisqu'il n'y a pas eu de Rdp dimanche dernier)
Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 14/01/2019 17:41 | #


@Lephenixnoir: Mais on peut pas décaler la matrice de 1 vers la gauche autrement que par boucle non ? Et ça change si on ajoute des dizaines aux nombres que contient la matrice pour ajouter une info comme je fais actuellement ?
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 14/01/2019 18:11 | #


Krevo_ a écrit :
Il serait juste de parler de tous les programmes publiés depuis la précédente Rdp (donc ici sur les 2 dernières semaines, puisqu'il n'y a pas eu de Rdp dimanche dernier)

Urg, ce que je suis... inefficace. Toutes mes excuses, c'est corrigé. -_-"

Disperseur a écrit :
@Lephenixnoir: Mais on peut pas décaler la matrice de 1 vers la gauche autrement que par boucle non ? Et ça change si on ajoute des dizaines aux nombres que contient la matrice pour ajouter une info comme je fais actuellement ?

Ben déjà tu peux utiliser Mat→List() et List→Mat(), ce qui te permet de ne travailler qu'avec les colonnes. Il n'y a même pas de boucle.

Ensuite, c'est là que tu commences à t'amuser. Tout ce que tu fais avec les entiers (modulos, divisions, parties entières) pour maintenir ton format, tu peux faire exactement pareil sur la matrice : ça agira juste sur toutes les cases en même temps.

Si j'étais toi, je séparerais le courant et le type d'objet dans deux matrices différentes pour profiter d'avoir des formats moins compliqués.

Ajouté le 14/01/2019 à 18:17 :
Encore modifié, puisque les utilitaires ne sortent pas sur la page où je croyais qu'ils sortent... enfin le script est pas comme il faut... comme tout le reste du site de toute façon.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 14/01/2019 18:52 | #


@Lephenixnoir : Ok du coup je décale dans chaque direction la matrice pour déplacer le courant dans toutes les directions ?
Massena Hors ligne Ancien rédacteur Points: 2244 Défis: 11 Message

Citer : Posté le 14/01/2019 18:54 | #


Je veux un Mentali dans ce jeu, Lightmare. Tu m'entends ? Tu as fait un Evoli, c'est bien, c'est cute. Mais il faut un Mentali. Sinon c'est pas un bon jeu Pokemon. La survie de Planet-Casio dépend de toi. Voilà.

Bravo à Disperseur pour ton programme, il a l'air vraiment bien réalisé. Compte-tu ajoutern d'autres fonctionnalités à ton utilitaire ?

Ajouté le 14/01/2019 à 18:48 :
Je signale au passage que, ayant supprimé mon système d'exploitation, je ne peux pas assurer une communication sur les réseaux sociaux...
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 14/01/2019 18:59 | #


@Massena: Merci !
Tu peut tester sinon ça serait cool. Et oui je compte ajouter la porte logique xor ainsi que des timers (Ça va pas être de la tarte ).
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 14/01/2019 19:04 | #


Disperseur a écrit :
@Lephenixnoir : Ok du coup je décale dans chaque direction la matrice pour déplacer le courant dans toutes les directions ?

Yup. C'est l'idée.

Massena a écrit :
Je signale au passage que, ayant supprimé mon système d'exploitation, je ne peux pas assurer une communication sur les réseaux sociaux...

Noté, pas de problème ! Dis-nous quand tu auras une estimation du temps que ça va durer.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 14/01/2019 19:06 | #


@Lephenixnoir : Mais pour la décaler verticalement j'utilise les listes mais alors horizontalement ?
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 14/01/2019 19:27 | #


Eh bien tu transposes, tu décales verticalement et tu re-transposes !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 243 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd