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 - Projets de programmation


Index du Forum » Projets de programmation » [Bêta] PythonExtra.
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

[Bêta] PythonExtra.

Posté le 29/10/2022 09:49

PythonExtra est un add-in Python alternatif pour (à ce stade) Graph 35+E II, Prizm et Graph 90+E. L'objectif est de fournir plus de fonctionnalités : modules standard, getkey(), fonctions de dessin plus performantes, etc.

Version Bêta 0.2
Graph 35+E II / Prizm / Graph 90+E : PythonExtra-pe-0.2.0-beta.zip


Aperçu de PythonExtra sur Graph 90+E. (Cliquez pour agrandir)

Description sommaire des fonctionnalités :
  • Compile pour Graph 90+E (fx-CG 10/20/50) et Graph 35+E II (fx-9860G III)
  • Peu de RAM sur Graph 35+E II (c'est difficile d'en trouver sur ce modèle)
  • Un shell pas trop mal (saisie rapide, scrolling) avec de bonnes performances
  • Plein de modules standard
    • array, builtins, cmath, collections, io, math, random, struct, sys, time
  • Le module spécifique CASIO : casioplot (fidèle à part sur les polices)
  • Un nouveau module gint avec les fonctionnalités avancées de gint :
    • Pour l'instant, une bonne partie de <gint/display.h> et <gint/keyboard.h>
    • Donc getkey() (attente de touche) ainsi que keydown() (test instantané) !
    • Et des fonctions de dessin rapides comme dline() ou drect()

Le plan actuel :
  • Être sensiblement compatible avec l'appli Python officielle.
  • Pousser les fonctionnalités ajoutées pour vraiment relever le niveau de Python !
  • Si du temps de développement se débloque : support autres Graph mono (pas de promesses).

Updates et screenshots à venir. Je n'ai pas l'intention d'implémenter un million de fonctionnalités, juste ce qu'il faut pour s'assurer que ça ne finisse pas mal documenté et non maintenu comme CasioPython.

Dépôt Git : https://gitea.planet-casio.com/Lephenixnoir/PythonExtra
PythonExtra est notamment possible grâce à l'aide précieuse de Mb88.

Comparaison directe

Dans l'exemple ci-dessous (réalisé par Mb88), un Flappy Bird déjà bien optimisé (dessin partiel etc, à gauche) est accéléré un bon gros coup en utilisant PythonExtra et le module gint pour le dessin (à droite).


Contexte historique

Aux journées APMEP 2022, redgl0w racontait comment le port MicroPython pour Numworks n'était finalement pas super difficile. Moi je parlais de comment un port maison résoudrait le problème de getkey(), et Critor m'a convaincu d'essayer sur-le-champ.

En fin de compte, j'ai clôné MicroPython Dimanche à midi et à 1 heure du matin j'avais un port fonctionnel avec getkey() sur ma Graph 90+E (que j'ai d'ailleurs montré à CASIO Lundi, pour la démo). Comme quoi, des fois ça marche tout seul !

(Enfin, le début marche tout seul. Faire une bonne UI et gérer tous les détails ensuite c'est une autre paire de manches !)

Fichier joint


Précédente 1, 2, 3 ··· 10, 11, 12, 13, 14, 15, 16, 17 ··· 20, 21, 22 Suivante
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 31/01/2024 07:08 | #


On pourrait en théorie mais personnellement je ne comprends pas du tout l'intérêt. Ça fait plein de fichiers à installer en plus, le chargement + décodage serait relativement lent, et ça oblige à passer par le système de fichiers plein de fois au démarrage...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2389 Défis: 17 Message

Citer : Posté le 31/01/2024 08:30 | #


Je suis en phase avec Lephé. Sur calculatrice, en python, je n'y vois pas un grand intérêt non plus. En C, pour un add-ins que l'on veut rendre customisable OK (mais pas de manière générale) ou avoir des ressources embarquées dans le code via une conversion avec fxconv, c'est cool.

Perso, je verrais bien une moulinette sur ordinateur qui génère les data d'une image donnée et qu'on copie dans le code python (à l'image de l'exemple de Lephé). Eventuellement sous forme d'un script externe qu'on pourrait importer histoire de pas avoir un code trop spaghetti ou trop long.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Slyvtt Hors ligne Maître du Puzzle Points: 2389 Défis: 17 Message

Citer : Posté le 31/01/2024 09:15 | #


Pour info complémentaire, voilà mon taf de ces quelques dernières soirées : faire tourner des scripts NW en natif dans PythonExtra. On est au stade du PoC. Pour info le support est un jeu que développe Afyu appelé Orlog. C'est basé sur un mini jeu dans Assassin Creed Valhalla.

https://www.youtube.com/shorts/imMv7OzrOp8

C'est un format Shorts alors ça passe pas en vidéo.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 31/01/2024 09:18 | #


Ahh ok je comprends mieux, et en plus, les images vont prendre beaucoup de place. Mais sinon je be comprends pas cette partie:
gint.image(IMAGE_MONO, 79, 12, b'|\x00||\x00|||||\x00\x00\xba\x02::\x82\xb8\xb8:\xba\xba\x00\x00\xc6\x06\x06\x06\xc6\xc0\xc0\x06\xc6\xc6\x00\x00\xc6\x06\x06\x06\xc6\xc0\xc0\x06\xc6\xc6\x00\x00\x82\x02\x02\x02\x82\x80\x80\x02\x82\x82\x00\x00\x00\x00|||||\x00||\x00\x00\x82\x02\xb8:::\xba\x02\xba:\x00\x00\xc6\x06\xc0\x06\x06\x06\xc6\x06\xc6\x06\x00\x00\xc6\x06\xc0\x06\x06\x06\xc6\x06\xc6\x06\x00\x00\xc6\x06\xc0\x06\x06\x06\xc6\x06\xc6\x06\x00\x00\xba\x02\xb8:\x02:\xba\x02\xba:\x00\x00|\x00||\x00||\x00||\x00\x00')
tout ces nombres servent a quoi?

Merci
Tuper
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Slyvtt Hors ligne Maître du Puzzle Points: 2389 Défis: 17 Message

Citer : Posté le 31/01/2024 09:23 | #


Ce sont les data qui constituent l'image. Le code couleur de chacun des pixels constituant l'image.
L'image fait 79 pix * 12 pix et ensuite tu as l'ensemble des données consitutant cette image monochrome.
Ici chaque pixel est représenté par 1bit particulier de la série d'octets que tu passes à la fonction.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 31/01/2024 10:01 | #


Slyvtt a écrit :
Ce sont les data qui constituent l'image. Le code couleur de chacun des pixels constituant l'image.
L'image fait 79 pix * 12 pix et ensuite tu as l'ensemble des données consitutant cette image monochrome.
Ici chaque pixel est représenté par 1bit particulier de la série d'octets que tu passes à la fonction.
Je comprends mieux mais je ne comprends pas pourquoi il y a xc6 et x00 et xba .

Merci encore une fois
Tuper
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Slyvtt Hors ligne Maître du Puzzle Points: 2389 Défis: 17 Message

Citer : Posté le 31/01/2024 10:09 | #


C'est de l'hexadecimal. Les bits sont regroupé par lots de 4, donc chaque octet est composé de 2 digits en hexadecimal, entre x00 et xFF.
Les digits en hexadecimal sont au nombre de 16 et vont de 0 à 9 + A à F.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 31/01/2024 10:13 | #


Ahh oui j'avais oublié désole ^^"

Merci!
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Ptitjoz Hors ligne Membre Points: 264 Défis: 10 Message

Citer : Posté le 31/01/2024 10:39 | #


Lephenixnoir a écrit :

Edit : Il est passé où ton avatar Ptitjoz ? :'-

à la trappe...

Sinon pour revenir à tout cela, je pense que le code hexa des images devrait être généré avec un script sur pc.
On ne va pas s'amuser à envoyer un bmp ou png sur la calculatrice pour lui demander de faire le boulot ; ça n'a pas trop d'intérêt selon moi. Sur Tip il y a déjà un outil qui fait cela (à voir si ça pourrait convenir)

Je pense qu'on ne va pas demander à PythonExtra trop de choses, le principal étant déjà là ou alors dans les tuyaux. Merci à Lephe et PapySly

Pour info, je ne rencontre plus de bugs sur PE

Bien à vous
Un peu poète, un peu geek, un peu rêveur, un peu écolo.
https://joz.alwaysdata.net/info/

Fcalva Hors ligne Membre Points: 600 Défis: 10 Message

Citer : Posté le 31/01/2024 12:04 | #


Si il y aura le support du fs dans PE, ont peut même imaginer un script pour générer les images
Après ptet que faire un addin ça sera mieux, et surtout pourra être fait dès maintenant
Pc master race - Apréciateur de Noctua moyen
Caltos : G35+EII, G90+E (briquée )
Le_masque Hors ligne Membre Points: 87 Défis: 0 Message

Citer : Posté le 02/02/2024 20:06 | #


Salut ! Juste, comment utiliser la fonction getkey() dans python extra, j'avoue ne pas trop comprendre, par exemple comment désigner les différentes touches de la calculatrice ?
Cordialement
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 02/02/2024 20:18 | #


Coucou ! Tu appelles getkey() et la programme est en pause jusqu'à une pression. Tu récupères un "événement", qui est un petit objet te disant quelle touche a été pressée, quand et quelques autres détails. Les noms des touches sont gint.KEY_* comme dans <gint/keycodes.h>. Par exemple :

from gint import *
ev = getkey()
if ev.key == KEY_EXE:
    print("EXE!")

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Fcalva Hors ligne Membre Points: 600 Défis: 10 Message

Citer : Posté le 02/02/2024 20:19 | #


getkey() renvoie une classe avec différents attributs, dont la base est définie ici (Enfin c'est le struct en C de gint, mais les membres sont les mêmes et ici c'est expliqué)
L'attribut dont tu veux te servir est "key", qui retourne un code de touche dans ceux ci (encore la même chose qu'a dessus).
Par exemple pour récupérer la touche "shift" :
import gint

a = gint.getkey()
if a.key == KEY_SHIFT :
  print("la touche shift a été pressée")


Plus compactement, tu peux aussi faire
touche = getkey().key

à la place
PS : Désolé pour le double post sur le sujet, je n'ai pas été assez rapide on dirait
Pc master race - Apréciateur de Noctua moyen
Caltos : G35+EII, G90+E (briquée )
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 02/02/2024 20:20 | #


Merci Fcalva d'avoir pris le temps de répondre. Juste un détail : tu ne peux pas détecter KEY_SHIFT comme ça parce que ça servirait comme modifieur.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Fcalva Hors ligne Membre Points: 600 Défis: 10 Message

Citer : Posté le 02/02/2024 20:21 | #


Ah oui j'ai l'habitude de keydown()
Pc master race - Apréciateur de Noctua moyen
Caltos : G35+EII, G90+E (briquée )
Le_masque Hors ligne Membre Points: 87 Défis: 0 Message

Citer : Posté le 02/02/2024 22:48 | #


Merci beaucoup, je pense avoir compris mais si je veux par exemple utiliser ça dans un flappy bird, si j’ai bien compris, Key met en pause le programme jusqu’à un événement, donc comment faire ?
Le_masque Hors ligne Membre Points: 87 Défis: 0 Message

Citer : Posté le 02/02/2024 23:01 | #


Ah, et je viens d’essayer, peut être ai-je fait quelque chose de mal mais lorsque que je fais un fichier pour tester tout ça, et que je veux le sauvegarder, il y a une pop-up qui m’en empêche avec marquée : « Donnée est protégée »
Fcalva Hors ligne Membre Points: 600 Défis: 10 Message

Citer : Posté le 02/02/2024 23:44 | #


C'est un bug du programme, dans cette situation la solution la plus sûre est d'appuyer sur le bouton "reset" au dos de la calculatrice
Et oui, getkey() met en pause le programme, si tu veux un moyen de récupérer une entrée sans bloquer, il faut utiliser keydown()/keyup()
Lephenixnoir l'a expliqué ici
Pc master race - Apréciateur de Noctua moyen
Caltos : G35+EII, G90+E (briquée )
Ptitjoz Hors ligne Membre Points: 264 Défis: 10 Message

Citer : Posté le 03/02/2024 08:18 | #


Normalemenr le bug "donnée est protégée" est corrigé.

Assurez-vous que vous avez bien la dernière version de PythonExra.

Dans le shell vous devriez y lire cette information : "2024-01-07".
Un peu poète, un peu geek, un peu rêveur, un peu écolo.
https://joz.alwaysdata.net/info/

Le_masque Hors ligne Membre Points: 87 Défis: 0 Message

Citer : Posté le 03/02/2024 09:19 | #


Merci beaucoup pour l’information, mais, je ne trouve vraiment pas où la dernière version est-elle accessible ?
Slyvtt Hors ligne Maître du Puzzle Points: 2389 Défis: 17 Message

Citer : Posté le 03/02/2024 09:23 | #


Tu peux la trouver dans le lien de téléchargement dans le premier post du fil.
Si ça marche pas, dis nous on buildera une version plus à jour avec tous les trucs en statut de développement (et y'a du lourd )
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Précédente 1, 2, 3 ··· 10, 11, 12, 13, 14, 15, 16, 17 ··· 20, 21, 22 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 235 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