π
<-
Chat plein-écran
[^]

Tutoriel NumWorks: Exploiter à son plein potentiel keydown()

Tutoriel NumWorks: Exploiter à son plein potentiel keydown()

Unread postby Dogm » 18 Feb 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: Select all
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: Select all
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: Select all
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: Select all
def Test():
  x=0
  return x

devient:
Code: Select all
def Test(): x=0; return x


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

Code: Select all
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
Last edited by Dogm on 26 Dec 2020, 16:12, edited 2 times in total.
User avatar
DogmEcrivain
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 44.3%
 
Posts: 117
Images: 7
Joined: 14 Nov 2019, 18:53
Location: Lyon, France
Gender: Male
Calculator(s):
MyCalcs profile
Class: Terminale Math NSI
GitHub: Tim-ats-d

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

Unread postby telpe51 » 18 Feb 2020, 18:57

Super tuto et bien utile pour faire des programmes interactifs !
Merci ! :D
User avatar
telpe51VIP++
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 14.1%
 
Posts: 63
Images: 1
Joined: 18 Nov 2017, 12:31
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: Tutoriel NumWorks: Exploiter à son plein potentiel keydo

Unread postby Dogm » 18 Feb 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
User avatar
DogmEcrivain
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 44.3%
 
Posts: 117
Images: 7
Joined: 14 Nov 2019, 18:53
Location: Lyon, France
Gender: Male
Calculator(s):
MyCalcs profile
Class: Terminale Math NSI
GitHub: Tim-ats-d

Re: Tutoriel NumWorks: Exploiter à son plein potentiel keydo

Unread postby telpe51 » 04 Apr 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: Select all
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.
User avatar
telpe51VIP++
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 14.1%
 
Posts: 63
Images: 1
Joined: 18 Nov 2017, 12:31
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: Tutoriel NumWorks: Exploiter à son plein potentiel keydo

Unread postby Dogm » 04 Apr 2020, 15:37

Merci, c'est un plaisir. :)

T'as version est plus propre en effet, merci. :#top#:
User avatar
DogmEcrivain
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 44.3%
 
Posts: 117
Images: 7
Joined: 14 Nov 2019, 18:53
Location: Lyon, France
Gender: Male
Calculator(s):
MyCalcs profile
Class: Terminale Math NSI
GitHub: Tim-ats-d

Re: Tutoriel NumWorks: Exploiter à son plein potentiel keydo

Unread postby Bisam » 05 Apr 2020, 14:20

On peut quand même condenser ainsi, non ?
Code: Select all
    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)
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5665
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Tutoriel NumWorks: Exploiter à son plein potentiel keydo

Unread postby 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: Select all
if keydown(1):
   fonct()
au lieu de:
Code: Select all
if keydown(KEY_UP):
   fonct()
User avatar
Fime
Niveau 5: MO (Membre Overclocké)
Niveau 5: MO (Membre Overclocké)
Level up: 0%
 
Posts: 12
Joined: 05 Nov 2020, 19:35
Location: Lyon - France
Gender: Male
Calculator(s):
MyCalcs profile
Class: INSA Lyon promo 67
GitHub: fime-space


Return to Tutoriaux

Who is online

Users browsing this forum: No registered users and 12 guests

-
Search
-
Social TI-Planet
-
Featured topics
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
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1537 utilisateurs:
>1511 invités
>21 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)