π
<-
Chat plein-écran
[^]

Tutoriel NumWorks: Exploiter à son plein potentiel keydown()

Tutoriel NumWorks: Exploiter à son plein potentiel keydown()

Message non lude Dogm » 18 Fév 2020, 16:29

Bonjour, :)

Hier la team Omega a sortie la mise à jour 1.19 tant attendue basé sur la beta d'Epsilon.:) Avec celle-ci une nouvelle fonction fort utile a été ajoutée : une fonction keydown() comparable au getkey() du Ti-basic.
Cette dernière étant fort utile pour créer de petits jeux-vidéo ou programmes interactifs. :#top#:

Ainsi, voici un petit tutoriel pour te permettre d'exploiter à son plein potentiel getkey() :).

Le tutoriel se découpera en 3 parties :

Sommaire :Go to top



Présentation :
Go to top


Tout d'abord, avant d'utiliser cette instruction il est nécessaire d'importer le nouveau module ion au début du programme dédié exclusivement à cette fonction : from ion import *

Cette fonction retourne True si la touche k est enfoncée à un instant T, il faudra donc inclure keydown() dans une boucle while de préférence pour bien capter touts les input de l'utilisateur.

Le code en pratique :

Code: Tout sélectionner
from kandinsky import fill_rect
from ion import keydown

while 1:
  if keydown(KEY_SHIFT):
    fill_rect(0, 0, 320, 240, (255, 0 ,0))
  elif keydown(KEY_BACK):
    break


Explications : la boucle while se répète jusqu'à que la touche back (retour) soit enfoncée, de plus, si la touche shift est pressée un rectangle bleu occupant la totalité de l'écran apparait.

Attention ! Il faut toujours penser à inclure une touche pour quitter ton programme sinon l'utilisateur sera contraint de reset sa calculatrice, perdant ainsi tous ses scripts. :'(


Voici ci-dessous une liste des touches et de leurs correspondances dans le module ion :

Show/Hide spoilerAfficher/Masquer le spoiler













































Flèche gaucheKEY_LEFT
Flèche hautKEY_UP
Flèche basKEY_DOWN
Flèche droiteKEY_RIGHT
Touche OKKEY_OK
Touche maisonKEY_HOME
Touche retourKEY_BACK
Touche On/OffKEY_ONOFF
Touche shiftKEY_SHIFT
Touche alphaKEY_ALPHA
Touche x,n,tKEY_XNT
Touche varKEY_VAR
Touche boite à outilsKEY_TOOLBOX
Touche effacerKEY_BACKSPACE
Touche exponentielleKEY_EXP
Touche logarithme neperienKEY_LN
Touche logarithme decimalKEY_LOG
Touche i imaginaireKEY_IMAGINARY
Touche virguleKEY_COMMA
Touche puissanceKEY_POWER
Touche sinusKEY_SINE
Touche cosinusKEY_COSINUS
Touche tangenteKEY_TANGENT
Touche piKEY_PI
Touche racine carréKEY_SQRT
Touche carréKEY_SQUARE
Touche 7KEY_SEVEN
Touche 8KEY_EIGHT
Touche 9KEY_NINE
Touche parenthèse gaucheKEY_LEFTPARENTHESIS
Touche parenthèse droiteKEY_RIGHTPARENTHESIS
Touche 4KEY_FOUR
Touche 5KEY_FIVE
Touche 6KEY_SIX
Touche multiplicationKEY_MULTIPLICATION
Touche divisionKEY_DIVISION
Touche 1KEY_ONE
Touche 2KEY_TWO
Touche 3KEY_THREE
Touche plusKEY_PLUS
Touche moinsKEY_MINUS
Touche 0KEY_ZERO
Touche pointKEY_DOT
Touche 10 puissance de xKEY_EE
Touche ansKEY_ANS
Touche EXEKEY_EXE


Variations :
Go to top

Une petite variation :

Code: Tout sélectionner
from kandinsky import fill_rect
from ion import keydown 

while True :
  if not keydown(KEY_SHIFT):
    fill_rect(0, 0, 320, 240,(255, 0, 0))
  elif keydown(KEY_BACK):
    break
  else:
    fill_rect(0, 0, 320, 240, (0, 0, 255)


Ici c'est l'inverse du programme précédant ; tant que la touche shift n'est pas pressée le programme affiche un rectangle rouge. En revanche, quand la touche shift est enfoncée le rectangle se colore en bleu.

Pour acquérir un nombre limité de touches dans un temps donné, on peut coupler une fonction keydown() à la fonction sleep() du module time.
Ce qui nous donne :

Code: Tout sélectionner
from kandinsky import fill_rect
from time import slee
from ion import keydown

x = 100
y = 100

while 1:
  if keydown(KEY_LEFT):
    x-=10
  elif keydown(KEY_RIGHT):
    x+=10
  elif keydown(KEY_UP):
    y-=10
  elif keydown(KEY_DOWN):
    y+=10
  elif keydown(KEY_BACK):
    break

  fill_rect(x, y, 20, 20, (255, 0, 0,)
  sleep(0.1)


Ce script donne la possibilité de déplacer un carré rouge sur l'écran. :p
L'instruction sleep() en fin de boucle permet de mettre en pause le programme pendant 0.1 seconde ce qui est très utile pour limiter le nombre de touches acquises et ainsi ralentir ou fluidifier le déplacement de ton objet.


Optimisation :
Go to top


Pour gagner quelques octets, la NumWorks manquant cruellement de stockage, il peut être salutaire de ne pas écrire ==True pour chaque argument.
En effet, l'interpréteur python comprendra et exécutera sans erreur ton programme. :#top#:
De la même manière, il est possible d'écrire if keydown(k): ou if not keydown(k): à la place de ==False
Une autre technique d'optimisation simple mais très efficace consiste à écrire sur la même ligne les instructions qui suivent une condition.

Ainsi le code
Code: Tout sélectionner
def Test():
  x=0
  return x

devient:
Code: Tout sélectionner
def Test(): x=0; return x


Avec toutes ces optimisations le programme précédant ressemble à ceci :

Code: Tout sélectionner
from kandinsky import *
from time import sleep
from ion import keydown

x = 100
y = 100


while 1:
  if keydown(KEY_LEFT): x-=10
  elif keydown(KEY_RIGHT): x+=10
  elif keydown(KEY_UP): y-=10
  elif keydown(KEY_DOWN): y+=10
  elif keydown(KEY_BACK): break
  fill_rect(x, y, 20, 20,(255, 0, 0))
  sleep(0.1)


Un trop grand nombre de conditions (if, elif et else) avec keydown() comme arguments peut alourdir ton programme et le rendre plus lent.

De manière générale, évites d'afficher un grand nombre d'éléments à l'écran, le frame buffer (fréquence de rafraichissement) de la NumWorks étant très lent. :#non#:


Voilà, désormais tu as toutes les clefs en main pour intégrer cette fonction dans tes programmes :#top#:, n'hésite pas à demander de l'aide ou des explications supplémentaires ou même partager tes programmes tirant parti de cette fonctionnalités ici. :)

Merci à A2drien, redgl0w et M4x1m3 de m'avoir relu et aidé à améliorer grandement ce tutoriel ! :)




-Tutoriel d'installation Omega
-Article sur la beta d'Epsilon 13 et les nouveautés d'Omega 1.19
Dernière édition par Dogm le 26 Déc 2020, 16:12, édité 2 fois.
Avatar de l’utilisateur
DogmEcrivain
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 44.3%
 
Messages: 117
Images: 7
Inscription: 14 Nov 2019, 18:53
Localisation: Lyon, France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Terminale Math NSI
GitHub: Tim-ats-d

Re: [Tutoriel] Exploiter à son plein potentielle keydown()

Message non lude telpe51 » 18 Fév 2020, 18:57

Super tuto et bien utile pour faire des programmes interactifs !
Merci ! :D
Avatar de l’utilisateur
telpe51VIP++
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 14.1%
 
Messages: 63
Images: 1
Inscription: 18 Nov 2017, 12:31
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Tutoriel NumWorks: Exploiter à son plein potentiel keydo

Message non lude Dogm » 18 Fév 2020, 20:31

Merci, c'est un plaisir :)

Voici une adaptation pour Numworks du célèbre télécran réalisé avec getkey() faite par mes soins :D
Avatar de l’utilisateur
DogmEcrivain
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 44.3%
 
Messages: 117
Images: 7
Inscription: 14 Nov 2019, 18:53
Localisation: Lyon, France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Terminale Math NSI
GitHub: Tim-ats-d

Re: Tutoriel NumWorks: Exploiter à son plein potentiel keydo

Message non lude telpe51 » 04 Avr 2020, 12:17

Encore merci @Dogm pour ton tuto. J'ai eu enfin (!) le temps de le tester ça marche super. :bj:
Je propose une variante de ton code qui bouge un carré rouge afin qu'il ne laisse plus de trace (façon "télécran") et qu'il se déplace vraiment.

Code: Tout sélectionner
from ion import *
from kandinsky import *
from time import *

def depl_car(a=10):
  x,y=100,100
  x0,y0=x,y
  while 1:
    if keydown(KEY_LEFT):
      x0=x
      y0=y
      x-=10     
    elif keydown(KEY_RIGHT):
      x0=x
      y0=y
      x+=10
    elif keydown(KEY_UP):
      x0=x
      y0=y
      y-=10
    elif keydown(KEY_DOWN):
      x0=x
      y0=y
      y+=10
    elif keydown(KEY_BACK):
      break
    fill_rect(x0,y0,a,a,(255,255,255))
    fill_rect(x,y,a,a,(255,0,0))
    sleep(0.1)

Il faut appeler depl_car() ou depl_car(a) où a est la taille du carré (10 par défaut).
Je précise qu'il faut appuyer deux fois sur la touche "retour" pour sortir du programme (une fois pour interrompre le programme et une fois pour retourner à la console).
On pourrait encore l'améliorer en passant la couleur en paramètre par exemple ...
Et bien sûr on pourrait le condenser davantage, mais je trouve que ça serait moins lisible.
Avatar de l’utilisateur
telpe51VIP++
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 14.1%
 
Messages: 63
Images: 1
Inscription: 18 Nov 2017, 12:31
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Tutoriel NumWorks: Exploiter à son plein potentiel keydo

Message non lude Dogm » 04 Avr 2020, 15:37

Merci, c'est un plaisir. :)

T'as version est plus propre en effet, merci. :#top#:
Avatar de l’utilisateur
DogmEcrivain
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 44.3%
 
Messages: 117
Images: 7
Inscription: 14 Nov 2019, 18:53
Localisation: Lyon, France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Terminale Math NSI
GitHub: Tim-ats-d

Re: Tutoriel NumWorks: Exploiter à son plein potentiel keydo

Message non lude Bisam » 05 Avr 2020, 14:20

On peut quand même condenser ainsi, non ?
Code: Tout sélectionner
    from ion import *
    from kandinsky import *
    from time import *

    def depl_car(a=10):
      x,y = 100,100
      while 1:
        x0,y0 = x,y
        if keydown(KEY_LEFT):  x -= 10     
        elif keydown(KEY_RIGHT):  x += 10
        elif keydown(KEY_UP):  y -= 10
        elif keydown(KEY_DOWN):  y += 10
        elif keydown(KEY_BACK):
          break
        fill_rect(x0,y0,a,a,(255,255,255))
        fill_rect(x,y,a,a,(255,0,0))
        sleep(0.1)
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.5%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Tutoriel NumWorks: Exploiter à son plein potentiel keydo

Message non lude Fime » 07 Nov 2020, 11:44

Merci pour ce tuto, qui est utile pour des debutants. J'avais vu l'utilisation de nombre à la place des variable de ion du type KEY_UP, du genre :
Code: Tout sélectionner
if keydown(1):
   fonct()
au lieu de:
Code: Tout sélectionner
if keydown(KEY_UP):
   fonct()
Avatar de l’utilisateur
Fime
Niveau 5: MO (Membre Overclocké)
Niveau 5: MO (Membre Overclocké)
Prochain niv.: 0%
 
Messages: 12
Inscription: 05 Nov 2020, 19:35
Localisation: Lyon - France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: INSA Lyon promo 67
GitHub: fime-space


Retourner vers Tutoriaux

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
742 utilisateurs:
>718 invités
>20 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)