[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
Citer : Posté le 12/12/2022 18:33 | #
Hello, sorry for not writing this in French. I can understand it but I'm not so sure about being able to make myself understood...
I've managed to build PythonExtra and while I very much like the way it looks, I have some questions about it:
- Is input() available? I tried a simple program a=input("A: ") and it seems to freeze with a sort of cog icon, both on calc and on Manager
- On Manager I couldn't find a way to type anything in the shell, initially the status icon can change from 1 to S,or to A, and back, but after trying to input any character it sort of freezes. I can go to Menu if I press it twice
PS: feel free to reply in French, if you want
Thank you
Citer : Posté le 12/12/2022 18:40 | #
Le input ne s'affiche que après qu'on appuie sur EXE pour le valider et la saisie marche différemment que l'input de CASIO.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 12/12/2022 18:44 | # | Fichier joint
English is fine, no worries! Thanks for your interest in PythonExtra. I realize the project state isn't well described in the main post, I'll update that.
Anyway, input() is available, but was untested so far. It works but the screen doesn't update until you type EXE to submit the input, which I should look into.
I'm a bit unsure about Manager, I tested fx-CG Manager and input works fine, see below.
Edit: Updated main post.
Citer : Posté le 12/12/2022 19:16 | #
Le input ne s'affiche que après qu'on appuie sur EXE pour le valider et la saisie marche différemment que l'input de CASIO.
Merci
Citer : Posté le 12/12/2022 19:46 | #
@Lephenixnoir thank you!
Maybe it's because I'm running Manager with Wine under Ubuntu, but here it is how it looks.
When I run it it the screen stays like this
I tried using EXE after a character but it isn't doing anything.
The shell on Manager is also stuck after inputing the first character.
What's more, it takes two MENU presses to exit, weird. On calc the EXE works as you said, must be the fact that I run Manager on Linux.
Thanks again for your help, and for everything that you do here!
[Edit] I just noticed there's a difference between your version of the program and mine... I will rebuild it
Citer : Posté le 12/12/2022 22:01 | #
I'm also using fx-CG Manager within Wine on Linux (Arch), so it should be working! I'm hoping using the latest commit will work for you. Otherwise please send me the g3a so I can see if it also fails for me.
You're welcome, I'm happy that this Python tangent is of value outside of this small community!
Citer : Posté le 12/12/2022 23:09 | # | Fichier joint
I've rebuilt it, still doesn't display the MicroPython version, like in your screenshot.
I think I've got it, in the Manager it works only when using the mouse to press the keys, nothing from the keyboard works after the first Shift press. Also, the 1/S/A/a icon doesn't change, so no way to know what you're typing.
Same thing for both Files and Shell. Still takes two MENU presses to exit.
This doesn't matter much, though, important thing is that it works on calc.
I'm attaching my g3a here anyway.
Thanks
Citer : Posté le 18/12/2022 00:20 | #
@Lephenixnoir great work, now input() works as expected on my CG50
Citer : Posté le 22/12/2022 01:20 | #
PythonExtra commence à bien marcher ! J'ai publié en haut du topic une version bêta avec une mise à jour du post principal.
Avec les fonctions supplémentaires du module gint - getkey(), keydown(), dline(), drect() pour nommer les plus utiles - on peut déjà faire des jeux très sympa, avec des bons contrôles mais aussi avec de bien meilleures performances.
Je vous invite à tester vos programmes favoris, faire remonter les bugs, et si ça vous inspire contribuer un petit retour aussi. Enjoy! o/
Citer : Posté le 22/12/2022 08:37 | #
Le passage du mode shell au mode graphique se fait comme en Basic ?
Citer : Posté le 22/12/2022 08:40 | #
Plus ou moins ; il n'y a pas vraiment deux modes, le shell et le graphique se partagent la même VRAM. Si tu print() ou input() çe repasse en mode shell, si tu casioplot.show_screen() ou gint.dupdate() ça repasse en mode graphique.
Il n'y a que deux subtilités :
1. Contrairement au Python officiel, si tu input() tu es obligé de redessiner ton prochain frame graphique de zéro
2. Le shell se met à jour 10 fois par seconde de façon régulière ; pour éviter les interférences, si tu veux passer au mode graphique juste après un print() il faut faire show_screen() ou dupdate() avant de commencer à dessiner ton premier frame (pour indiquer que tu t'appropries la VRAM).
Citer : Posté le 22/12/2022 11:43 | #
Il y a aussi les modules micropython, gc, sys qui sont très utiles pour coder des jeux bien optimisés.
Pour l'instant ça marche très mal, mais avec PE_DEBUG à 1 on peut avoir accès à 200Ko de RAM sur Graph 35+e II, mais il y en aura sûrement moins quand ça marchera correctement car il y a des SysERROR
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 22/12/2022 20:11 | #
Hello , je viens juste de tester la bêta fournie, et ça donne très très bien!
Du coup avec ce petit test j'ai remarqué 2/3 trucs
-> Lors de "l'exécution" d'un fichier via le menu files, le shell est réinitialisé à chaque fois... et surtout le fichier est importé sous la forme d'un module (et non pas comme prévu logiquement intégralement avec tout son contenu ( j'avoue que mon lexique utilisé est pas très adapté )
-> Lorsqu'on quitte l'app avec menu ( on revient au menu, quoi ) et qu'on revient sur l'app à nouveau, l'écran n'est pas entièrement re dessiné, (on voit la bande en haut avec l'icone de batterie notamment, et ça ne disparaît qu'après un rafraichissement si on utilise le clavier )
Voilà , c'est tout pour l'instant, et encore thanks for that extremely fast made stuff !
Passé ici il y a peu. ಥ‿ಥ
Jouez à Mario sans arrêt sur votre Casio !
City Heroes
Piano Casio
Micro GIMP
Citer : Posté le 22/12/2022 23:08 | #
Oui donc on peut faire from X import * au lieu de import X comme actuellement, ça pas de souci. La réinitialisation c'est normal sinon tu ne pourrais pas lancer le même fichier plusieurs fois !
C'est une limitation de gint (sans rapport avec MicroPython), mais qui grâce à un travail récent de Dr-Carlos pourra peut-être être levée bientôt.
Content que ça plaise !
Citer : Posté le 23/12/2022 12:57 | # | Fichier joint
J'ai amélioré le flappy bird gint pour fx :
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 23/12/2022 13:06 | # | Fichier joint
Le flappy bird original (pour comparer) :
Quand j'ai pris ces deux vidéos ma calculatrice n'était pas overclockée.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 23/12/2022 20:33 | #
Hop, ajouté au post principal, merci
Citer : Posté le 25/12/2022 19:52 | #
Après l'avoir vu naître, bien content de voir que PythonExtra atteint un état aussi avancé.
Avec enfin un getkey() entre bien d'autres choses, voilà donc quelque chose qui nous sera grandement utile pour les prochaines années.
Désolé, je n'ai pas trouvé dans les posts précédents.
Est-ce que le code de la version gint de Flappy Bird est disponible quelque part, histoire que je me familiarise avec cette nouvelle bibliothèque ?
Merci.
Citer : Posté le 25/12/2022 19:54 | #
Oui, dans le dépôt dans ports/sh/examples/flappyCG2.py ou ports/sh/examples/flappyFX3.py
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 25/12/2022 19:57 | #
J'avais trouvé un dossier examples mais ce n'était clairement pas le bon.
Merci pour le bon chemin, je me plonge là-dedans.
Citer : Posté le 26/12/2022 18:32 | #
Hello again, où en est actuellement le support de la fonction open() ?
Dès qu'on l'appelle, on a une erreur comme quoi on doit fournir comme argument un tuple, et non une chaine , du coup j'ai mis tous mes arguments en un tuple :
Passé ici il y a peu. ಥ‿ಥ
Jouez à Mario sans arrêt sur votre Casio !
City Heroes
Piano Casio
Micro GIMP