π
<-
Chat plein-écran
[^]

Tutoriel NumWorks: Exploiter à son plein potentiel keydown()

Online

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 *
from ion import *

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
 :














































Flèche gauche
KEY_LEFT
Flèche haut
KEY_UP
Flèche bas
KEY_DOWN
Flèche droite
KEY_RIGHT
Touche OK
KEY_OK
Touche maison
KEY_HOME
Touche retour
KEY_BACK
Touche On/Off
KEY_ONOFF
Touche shift
KEY_SHIFT
Touche alpha
KEY_ALPHA
Touche x,n,t
KEY_XNT
Touche var
KEY_VAR
Touche boite à outils
KEY_TOOLBOX
Touche effacer
KEY_BACKSPACE
Touche exponentielle
KEY_EXP
Touche logarithme neperien
KEY_LN
Touche logarithme decimal
KEY_LOG
Touche i imaginaire
KEY_IMAGINARY
Touche virgule
KEY_COMMA
Touche puissance
KEY_POWER
Touche sinus
KEY_SINE
Touche cosinus
KEY_COSINUS
Touche tangente
KEY_TANGENT
Touche pi
KEY_PI
Touche racine carré
KEY_SQRT
Touche carré
KEY_SQUARE
Touche 7
KEY_SEVEN
Touche 8
KEY_EIGHT
Touche 9
KEY_NINE
Touche parenthèse gauche
KEY_LEFTPARENTHESIS
Touche parenthèse droite
KEY_RIGHTPARENTHESIS
Touche 4
KEY_FOUR
Touche 5
KEY_FIVE
Touche 6
KEY_SIX
Touche multiplication
KEY_MULTIPLICATION
Touche division
KEY_DIVISION
Touche 1
KEY_ONE
Touche 2
KEY_TWO
Touche 3
KEY_THREE
Touche plus
KEY_PLUS
Touche moins
KEY_MINUS
Touche 0
KEY_ZERO
Touche point
KEY_DOT
Touche 10 puissance de x
KEY_EE
Touche ans
KEY_ANS
Touche EXE
KEY_EXE


Variations :
Go to top

Une petite variation :

Code: Select all
from kandinsky import *
from ion import * 

while True :
  if keydown(KEY_SHIFT) == False:
    fill_rect(0, 0, 320, 240,(255, 0, 0))
  elif keydown(KEY_BACK) == True:
    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()
à l'
instruction
sleep()
du
module time
.
Ce qui nous donne :

Code: Select all
from kandinsky import *
from time import *
from ion import *

x = 100
y = 100

while 1:
  if keydown(KEY_LEFT) == True:
    x-=10
  elif keydown(KEY_RIGHT) == True:
    x+=10
  elif keydown(KEY_UP) == True:
    y-=10
  elif keydown(KEY_DOWN) == True:
    y+=10
  elif keydown(KEY_BACK) == True:
    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 *
from ion import *

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 06 Mar 2020, 23:28, edited 1 time in total.
Afghanistan Simulator Numworks

36%


Omega does what epsilon't
User avatar
DogmEcrivain
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 62.6%
 
Posts: 93
Images: 7
Joined: 14 Nov 2019, 18:53
Location: Lyon, France
Gender: Male
Calculator(s):
Class: Lycéen 2nde Sciences de l'ingénieur
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: 10.9%
 
Posts: 63
Images: 1
Joined: 18 Nov 2017, 12:31
Gender: Not specified
Calculator(s):

Online

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
Afghanistan Simulator Numworks

36%


Omega does what epsilon't
User avatar
DogmEcrivain
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 62.6%
 
Posts: 93
Images: 7
Joined: 14 Nov 2019, 18:53
Location: Lyon, France
Gender: Male
Calculator(s):
Class: Lycéen 2nde Sciences de l'ingénieur
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: 10.9%
 
Posts: 63
Images: 1
Joined: 18 Nov 2017, 12:31
Gender: Not specified
Calculator(s):

Online

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#:
Afghanistan Simulator Numworks

36%


Omega does what epsilon't
User avatar
DogmEcrivain
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 62.6%
 
Posts: 93
Images: 7
Joined: 14 Nov 2019, 18:53
Location: Lyon, France
Gender: Male
Calculator(s):
Class: Lycéen 2nde Sciences de l'ingénieur
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: 47.8%
 
Posts: 5450
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):


Return to Tutoriaux

Who is online

Users browsing this forum: No registered users and 0 guests

-
Search
-
Featured topics
Omega, le fork étendant les capacités de ta NumWorks, même en mode examen !
Comparaisons des meilleurs prix pour acheter sa calculatrice !
12
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...

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 
-
Stats.
488 utilisateurs:
>477 invités
>5 membres
>6 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)