Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Un Locate pour la Graph 90 en Python
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Un Locate pour la Graph 90 en Python

Posté le 30/10/2018 22:23

En développement : la 7ème ligne.
WAOW.................
.....................
.....................
..ENFIN..............
.....................
............7........
.........LIGNES..     < l'input se trouve ici


old
Cliquez pour recouvrir
Salut, étant donné que je code principalement sur mon RPi (sans BIDE donc) j'ai du mal à continuer activement mes projets.
En voyant ce sujet, j'ai pensé que ce serait quand même sympa de pouvoir coder des petits jeux en Python sur 90+E.
Je me met donc au défi de réaliser un module équivalent au Locate avec quelques fonctions en plus (accéder aux cases déjà présentes par exemple).
Juste pour voir si c'est possible, malheureusement je n'ai pas les moyens pour investir dans une 90+E, mais j'essaierai quand même sur mon p'tit RPi avec une console de 21x7 puis sur émulateur officiel

Demain je ferais des tests approfondis sur les possibilités du Micro Python de la machine via l'émulateur prévu.

Je comptais le représenter comme ceci :

.....................
........Zone.........
......Affichable.....
.....................
.....................
.....................
> Input


Je poste ce sujet aujourd'hui principalement pour ne pas oublier :roll:
Bonne nuit. 'Suis crevé



Hackcell En ligne Membre Points: 1405 Défis: 11 Message

Citer : Posté le 30/10/2018 23:49 | #


Qu'es ce qui t'empêche de mettre BIDE sur ton RPi (Raspberry pi, c'est ça ?)
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 31/10/2018 10:55 | #


Hackcell a écrit :
Qu'es ce qui t'empêche de mettre BIDE sur ton RPi (Raspberry pi, c'est ça ?)

C'est bien un Raspberry Pi 2
Je n'y avais tout simplement pas pensé...
BIDE fonctionne plutôt bien (hormis les ralentissements de 5 secondes à chaque fois que je tape un caractère dû à l’auto-complétion) mais je n'ai pas de moyen de les tester ni sur émulateur (je ne pense pas que Casio ait prévu des émulateurs ARM ni qu'ils tourneraient à plus de 0.2 FPS) ni sur calculatrice (toujours pas assez de fonds pour le câble ou un modèle plus évolué).

Pour le moment je vais continuer de travailler là-dessus (Locate) et je verrai pour les autres projets plus tard
D'ailleurs j'ai vu que la limite en nombre de lignes est de 300, ça devrait tenir mais je pense que je devrais compresser quand c'est possible, par exemple avec des variables de 1 caractère, ce qui en fait 51 disponibles dans chaque fonction, la dernière (Z) étant destinée à la "map", et abuser des point-virgules ; pour économiser des lignes si ça dépasse les 300 (ça m'étonnerait)
Protip
Ne me remerciez pas
Massena En ligne Rédacteur Points: 1892 Défis: 11 Message

Citer : Posté le 31/10/2018 13:37 | #


Aaah RPi <3
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 31/10/2018 14:11 | # | Fichier joint


Massena a écrit :
Aaah RPi <3



J'ai fait quelques tests et cette ligne m'indique une MemoryError
Est-ce que c'est dû à l'émulateur bridé ou est-ce que la 90+E ne peut pas faire des liste de listes ?
R=range
_L=[[c for _ in R(21)]for _ in R(6)]

Protip
Ne me remerciez pas
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 01/11/2018 22:50 | # | Fichier joint


J'ai fini de coder la première version fonctionnelle
Si un heureux possesseur de 90+E voulait bien tester, je met le programme en fichier joint (je n'ai pas pu n'en possédant pas)
Pour ceux qui ont la flemme de télécharger mais qui veulent quand même voir le code en l'état (j'ai économisé le plus de place possible pour moi donc c'est pas très lisible )

Le code
Le code
P,R,I=print,range,input
def setup(c=" "):
global _L
_L=[[c for _ in R(21)]for _ in R(6)]
def refresh(i=0):
s=""
for l in _L:
  for c in l:
   s+=c
P(s)
if i:
  return I("> ")
else:
  P()
def locate(x,y,s):
s=str(s)
i=-1
for c in s:
  if i+x<21:
   _L[y-1][x+i]=c
  i+=1
def getCellContent(x,y):
return _L[y-1][x-1]


Pour l'utilisation :

setup(c=" ") : Permet d'initialiser le programme, a n'utiliser qu'une fois (fait aussi office de ClrText). c est la variable remplissant le tableau, par défaut un espace (si vous mettez un "K" en paramètre vous aurez un tableau Locate plein de K)
locate(x, y, s) : le Locate tel que vous le connaissez sûrement déjà en Basic, il gère les débordements (locate(20,1,"ave") fonctionne ) et gère les entiers et les chaînes de caractères.
getCellContent(x, y) : mon petit ajout ; retourne le contenu de la cellule pointée sous la forme d'un string.
refresh(i=0) : "raffraichit" le Locate, et si i est vrai ajoute une ligne d'input en bas qui renvoie une valeur

Voilà, merci de me dire si cela fonctionne sous Graph, votre avis, des bugs ou optimisations possible.
Merci d'avance

Le Kikoo

Ajouté le 01/11/2018 à 22:53 :
Je précise que la variable _L contenant le tableau utilisé est global pour alléger le code

Ajouté le 01/11/2018 à 22:58 :
Et aussi (je suis endormi là ) la fonction refresh(i=0) fait office d'input() si i est vrai. Sinon il affiche juste un retour a la ligne et ne renvoie rien.

Ajouté le 01/11/2018 à 23:43 :
Un code d'exemple commenté parce que mes explications sont tout sauf claires et aussi en partie car je m'ennuie
from locate import *
setup() #Indispensable, lance le programme.
locate(1, 1, "Bonjour, veuillez") #Définit les contenants du Locate.
locate(1, 2, "entrer votre age") # /!\ N'effectue pas de changements avant de refresh /!\
age = int(refresh(1)) #Rafraîchit et attend une entrée.
locate(1, 1, "Vous êtes ") #D'autres Locates...
locate(1, 2, "Heureusement que je")
locate(1, 3, "suis là pour vous le")
locate(1, 4, "dire !")
if age >= 18: #Une condition, vous devriez savoir faire :E
    locate(11, 1, "majeur !")
else:
    locate(11, 1, "mineur !")
refresh(1) #Fin du programme, input de pause.

Protip
Ne me remerciez pas
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 02/11/2018 22:42 | # | Fichier joint


OK, j'ai testé le programme sur l'émulateur officiel, il fonctionne après quelques modifs'
Je devrais le poster en tant que programme sur le site maintenant ?
(En fichier joint une version fonctionnelle)
Protip
Ne me remerciez pas
Dark storm En ligne Labélisateur Points: 11537 Défis: 176 Message

Citer : Posté le 06/11/2018 23:16 | #


Si i est un booléen, en Python c'est beaucoup plus propre de faire i=False
Je suppose que tu stockes l'écran dans un tableau ? Combien de temps ça prend pour l'afficher ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 07/11/2018 07:24 | #


Dark storm a écrit :
Si i est un booléen, en Python c'est beaucoup plus propre de faire i=False
Je suppose que tu stockes l'écran dans un tableau ? Combien de temps ça prend pour l'afficher ?

Je sais que c'est bien plus propre d'utiliser False mais j'ai essayé de faire le script le plus compact possible, c'était sûrement un mauvais choix pour 4 octets... Je vais modifier demain pour que ce soit plus clair à l'utilisation merci
L'écran est bien stocké dans un tableau global _L

_L=[[c for _ in R(21)]for _ in R(6)] //Initialisation du tableau

Pour le temps je ne sais pas, je n'ai pu le tester que sur l'émulateur.
En tout cas c'est quasi-instantané (tout le tableau s'affiche d'un coup), tant que l'on ne l'appelle pas trop souvent le rafraîchissement est fluide

https://www.planet-casio.com/Fr/programmes/programme3658-1-Locate.py-KikooDX-.html
Protip
Ne me remerciez pas
Manolo Hors ligne Membre Points: 910 Défis: 13 Message

Citer : Posté le 27/02/2019 02:32 | # | Fichier joint


J'ai réussi le défi sans regarder vos réponses, mais je l'ai fait sur portable, je sais pas si ça marche sur Casio, je testerai demain, en attendant, je vous le donne en fichier joint, vous allez voir, c'est très simple .
Par contre, j'utilise un
import os
trash=os.system('clear')

Donc je sais pas si ça marche sur Casio...
Sinon, ça s'utilise comme ça :
locate(x,y,t)

t = texte, nombre, variable, etc...
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 27/02/2019 11:20 | #


C'est bien, j'avais choisi de ne pas utiliser de chaîne de caractères pour un tableau, mais cette fonction...

def locate(a,b,c):
    import os
    trash=os.system('clear')
    global lct
    lct=replace(lct,c,a+((b-1)*22))
    print(lct)

On n'importe JAMAIS un module dans une fonction, et OS n'existe pas sous le MicroPython de la 90+E.
Tu devrais regarder ce que j'ai fait, c'est très différent.

Protip
Ne me remerciez pas
Manolo Hors ligne Membre Points: 910 Défis: 13 Message

Citer : Posté le 27/02/2019 11:26 | #


Ah ! Je viens de vérifier et oui... Il n'y a pas de module os dans la 90...

Ajouté le 27/02/2019 à 11:28 :
Ah oui ! C'est super compliqué ton truc là !
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 27/02/2019 12:28 | #


Le code est condensé, c'est pas très lisible effectivement, mais son but n'est pas d'être lu
Protip
Ne me remerciez pas
Manolo Hors ligne Membre Points: 910 Défis: 13 Message

Citer : Posté le 27/02/2019 14:15 | #


Je me suis rendu compte, si on enlève le clear, c'est quasi instantané, il y a plusieurs tableaux mais osef
Hackcell En ligne Membre Points: 1405 Défis: 11 Message

Citer : Posté le 27/02/2019 15:33 | #


Kikoodx a écrit :
Le code est condensé, c'est pas très lisible effectivement, mais son but n'est pas d'être lu


Alors non, un code est fait pour être lus par un être humain et occasionnellement exécuté par un ordinateur
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 05/11/2019 17:01 | #


Est-ce un déterrage ?

Bonjour
J'aimerais supprimer les étapes de test de Locate.py 2 pour la prochaine version, les checks rendent le code beaucoup plus lent et moins propre. Ils gênent plus qu'autre chose, et si un utilisateur en a besoin qu'il code les vérifications lui-même
De plus les programmes qui utilisent ce module (majoritairement de Shadow et quelques-uns par moi-même) ne se voient pas du tout affectés par ces vérifications.

Je vous demande votre avis.
Merci d'avance

Ajouté le 06/11/2019 à 09:49 :
Je suis revenu sur le projet, j'ai déjà commit la suppression des vérifications ; je suis en train de coder une idée que j'ai eu hier pour pouvoir utiliser les 7 lignes du shell
Ce sera terminé très bientôt, c'est déjà codé pour Screen, il me reste à faire Pad
Protip
Ne me remerciez pas
Lephenixnoir Hors ligne Administrateur Points: 20736 Défis: 143 Message

Citer : Posté le 06/11/2019 10:13 | #


Psst, mets un exemple dans le post principal
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 06/11/2019 10:17 | #


Lephenixnoir a écrit :
Psst, mets un exemple dans le post principal

Fait
WAOW.................
.....................
.....................
..ENFIN..............
.....................
............7........
.........LIGNES..... < l'input se trouve ici


Ajouté le 06/11/2019 à 11:11 :
Nouveau problème, le programme fonctionne parfaitement sur ordinateur et calculatrice, mais Casio a décidé de tronquer les messages pour permettre de taper du texte ???
Ce qui résulte en une magnifique tilde et 5 espaces blancs.
Hum.
5 espaces de perdus.
Impossibilité d'ajouter une ligne.
Ils ont fait ma journée
Vous pouvez le voir avec ce simple code :
input("."*20)
# Utiliser print("."*20, end="");input() ne résoud pas le problème

Je suis assez déçu, j'ai passé deux heures à coder ça bien, le programme fonctionne mais pas pour eux
https://gitea.planet-casio.com/KikooDX/Locate2.py
Protip
Ne me remerciez pas
Lephenixnoir Hors ligne Administrateur Points: 20736 Défis: 143 Message

Citer : Posté le 06/11/2019 19:16 | #


Je voulais dire un exemple de programme Python utilisant Locate.py

Hmm, c'est surtout pour se garder une place à l'écran le temps de la saisie. Une fois tapé, les 20 points reviennent. Est-ce vraiment un problème ? C'est plutôt mieux au contraire que le shell se charge de faire scroller la saisie.
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 06/11/2019 22:33 | #


Lephenixnoir a écrit :
Je voulais dire un exemple de programme Python utilisant Locate.py

Hmm, c'est surtout pour se garder une place à l'écran le temps de la saisie. Une fois tapé, les 20 points reviennent. Est-ce vraiment un problème ? C'est plutôt mieux au contraire que le shell se charge de faire scroller la saisie.

Ah ! Il y a les jeux de Shadow et mon Sokoban, je mettrai les liens demain (si j'y pense).
Perdre autant de place est assez gênant, le rendu apparaîtrait "presque" comme un plein écran si seulement la case en bas à gauche était utilisée par le input, là c'est une perte d'espace assez conséquente.
Dans d'autres situations, oui c'est plutôt utile.
Protip
Ne me remerciez pas

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 v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 76 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