Forum Casio - Actualités


Index du Forum » Actualités » La revue des projets - 136
LephenixnoirHors ligneAdministrateurPoints: 14126 Défis: 136 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


Pages : Précédente1, 2
LephenixnoirHors ligneAdministrateurPoints: 14126 Défis: 136 Message

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


Eh bien tu transposes, tu décales verticalement et tu re-transposes !
DisperseurHors ligneMembrePoints: 1332 Défis: 0 Message

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


Ok dac ben je vois ça a tête reposée alors. Merci
Planetarium

√(2+2-2+2-2+2+2-2-2-2) = 0
MassenaHors ligneCommunity ManagerPoints: 538 Défis: 3 Message

Citer : Posté le 16/01/2019 19:28 | #


Oh là là, j'ai 10 000 000 trucs à installer sur Windows 10
DisperseurHors ligneMembrePoints: 1332 Défis: 0 Message

Citer : Posté le 17/01/2019 07:31 | #


Je suis pas sur de voir ce que ti veut dire par "transpose"
Planetarium

√(2+2-2+2-2+2+2-2-2-2) = 0
LephenixnoirHors ligneAdministrateurPoints: 14126 Défis: 136 Message

Citer : Posté le 17/01/2019 08:00 | #


La transposition de matrices est une opération qui consiste à échanger les lignes et les colonnes. Tu peux l'obtenir avec la fonction Trn !

@CaptainLuigi : Ta lettre est partie hier à la poste. Bonne réception !
Pages : Précédente1, 2

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 20 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