Un premier outil de développement LUA disponible !

Pour parler de la programmation en générale, partager des algorithmes...

Un premier outil de développement LUA disponible !

Messagepar Admin le 26 Mai 2011, 07:08

Une version (encore très préliminaire) d'un outil de développement LUA est à présent disponible sur le site inspired-lua.org (dans la rubrique téléchargement de ce site).
Cet outil est "une première maquette", et non un outil final.
Mais il permet déjà à ce qui souhaiterait découvrir LUA de commencer à travailler.
Il dispose des deux fonctions essentielles suivantes :
- insertion (une sorte de "copier/coller") du code LUA dans le logiciel ti-nspire.
- codage d'une image, afin de l'insérer dans un script lua.
:)
Lien direct : http://www.inspired-lua.org/downloads/?lang=fr
Direct link : http://www.inspired-lua.org/downloads/?lang=en
Admin
Site Admin
 
Messages: 11
Inscrit le: 21 Juil 2008, 14:12

Re: Un premier outil de développement LUA disponible !

Messagepar Invité le 26 Mai 2011, 08:23

Voici un premier exemple de script LUA, juste pour vous permettre de tester l'outil...

Il s'agit ici seulement d'un script illustrant quelques points de la programmation lua :
  • Gestion des événements, ici la modification d'une variable "externe au script" dans une autre application du classeur.
  • Ecriture d'une fonction récursive
  • Fonctions d'affichage (texte, nombre, graphique) et choix de couleurs
  • Accès aux informations sur la fenêtre (nombre de pixels...)
Il vous suffit de faire un copier/coller du code ci-dessous dans un éditeur de texte,
puis de suivre les instructions...

Code: Tout sélectionner
--------------------------------------------------------------------------------------
-- INITIATION A LUA
--------------------------------------------------------------------------------------
-- UTILISATION D'UNE VARIABLE EXISTANT DEJA DANS UN
-- CLASSEUR TI-NSPIRE
--------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------
-- Comment utiliser ce script ?
--------------------------------------------------------------------------------------   
-- Merci d'excuser l'absence d'accents dans le texte des commentaires
-- Il serait possible d'en utiliser, sous reserve de sauvegarder le fichier
-- obtenu au format UTF8 avant de l'importer dans TI-Nspire Scripting Tools.

-- A. POUR UTILISER CE SRIPT :
-- A1. Vous devez creer un classeur ti-nspire et y definir
--    une variable n, par exemple avec un curseur permettant d'en faire
--    varier la valeur entre 0 et 10
--    ou directement, dans une page de l'application permettant
--    d'effectuer des calculs.
-- A2. Choisissez pour n une valeur comprise entre 0 et 10...

-- A3. Lancer ensuite le TI-Nspire Scripting tools
-- A4. Cliquer sur le premier bouton (ou choisissez tools, Lua Script to Clipboard)
-- A5. Selectionner le fichier contenant ce present document
-- A6. Aller dans le logiciel ti-nspire, et utiliser un Ctrl V pour copier le code lua

-- A7. Faites ensuite varier la valeur de n...

-- B. POUR MODIFIER CE SCIPT :
-- B1. Faites les modifications souhaitees et sauvez le fichier
-- B2. Cliquez sur le second bouton (ou choisissez tools, Reload Script)
-- B3. Allez dans le logiciel TI-Nspire, cliquer sur la fenetre correspondant au code LUA
-- B4. Appuyer sur Ctrl K pour selectionner cette fenetre
-- B5. Appuyer sur Ctrl V pour copier le nouveau script LUA

--------------------------------------------------------------------------------------
-- DEBUT DU CODE LUA
--------------------------------------------------------------------------------------   
-- On indique ici qu'il faut surveiller le contenu de la variable n
var.monitor("n")

--------------------------------------------------------------------------------------
-- FONCTIONS INTERNES A CE SCRIPT
--------------------------------------------------------------------------------------

-- Ici, il s'agit juste de donner un exemple d'une fonction recursive...

function factorielle(n)
   if math.floor(n)<n or n<0 then return ("Erreur")
   elseif n==0 then return(1)
   else return(n*factorielle(n-1))
   end
end

--------------------------------------------------------------------------------------
-- GESTION DES DIFFERENTS EVENEMENTS
--------------------------------------------------------------------------------------

-- GESTION DE LA MODIFICATION D'UNE VARIABLE EXTERNE
-- Quand la valeur des variables surveillees par ce script change
-- la fonction suivante est executee :
-- Ici il y a une seule ligne de code :
-- On provoque une reactualisation du contenu la fenetre associee au script.

function on.varChange(varlist)
   platform.window:invalidate()
end

-- La fonction suivante est la fonction d'affichage
-- L'evenement provoquant son execution
-- est declenche par la commande platform.window:invalidate()
-- qui, dans le cas de cet exemple, est executee chaque fois que
-- la variable n change

function on.paint(gc)
   local wh,ww,n
-- nombre de pixels (hauteur et largeur)
   wh=platform.window:height()
   ww=platform.window:width()

-- affichage d'un trait de separation   
   gc:setPen("medium", "smooth")
   gc:drawLine(0, 60, ww, 60)

-- affichage de la taille de la fenetre en bas de l'ecran
-- il s'agit juste d'un exemple !   
   gc:setColorRGB(200, 200, 200)
   x=gc:drawString(wh,10,wh-10,"bottom")
   gc:drawString(ww,x+10,wh-10,"bottom")

-- affichage de n!
   n=var.recall("n")
   if math.floor(n)<n or n<0 then
      gc:setColorRGB(255, 0, 0)
      gc:setFont("sansserif" , "b", 10)
      gc:drawString("n n'est pas un ",10,10,"top")
      gc:drawString("entier naturel ",10,25,"top")
   else
      gc:setColorRGB(0, 0, 255)
      gc:setFont("sansserif" , "b", 20)
      x=gc:drawString(n.."! = ",10,10,"top")
      x=gc:drawString(factorielle(n),x+5,10,"top")
   end   
end

Vous pouvez tester une première "amélioration" de ce script en ajoutant les lignes suivantes, permettant de "piloter" n avec les touches "vers le haut" ou "vers le bas" :
Code: Tout sélectionner
function on.arrowUp()
   var.store("n", var.recall("n")+1)
end

function on.arrowDown()
   var.store("n", var.recall("n")-1)
end
Dernière édition par Invité le 05 Juin 2011, 09:23, édité 1 fois au total.
Invité
 

Re: Un premier outil de développement LUA disponible !

Messagepar Boris le 26 Mai 2011, 20:46

Merci beaucoup Philippe pour toutes ces précisions !
C'est vraiment passionnant.
Boris
 
Messages: 324
Inscrit le: 24 Oct 2008, 06:11

Re: Un premier outil de développement LUA disponible !

Messagepar Invité le 26 Mai 2011, 23:25

Un petit peu dans le même esprit que le précédent (une découverte de LUA pour les "grands débutants"), voici un deuxième script lua.
Celui-ci illustre la possibilité de définir des classes d'objets, et donne d'autres exemples de gestion d'événements, l'utilisation d'une image...
Comme pour l'exemple ci-dessus, cela ne va pas très loin (on peut simplement définir la position d'un carré par un clic de souris ou de modifier la position d'un smiley à l'aide des touches de direction). C'est vraiment juste pour illustrer certains concepts...

Code: Tout sélectionner
--------------------------------------------------------------------------------------
-- INITIATION A LUA
--------------------------------------------------------------------------------------
-- DEFINITION D'UNE CLASSE D'OBJETS
-- PILOTAGE D'UN OBJET UTILISANT LA SOURIS
-- ET LES TOUCHES DIRECTIONNELLES
--------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------
-- Comment utiliser ce Script ?
--------------------------------------------------------------------------------------   
-- Merci d'excuser l'absence d'accents dans le texte des commentaires
-- Il serait possible d'en utiliser, sous reserve de sauvegarder le fichier
-- obtenu au format UTF8 avant de l'importer dans TI-Nspire Scripting Tools.

-- A. POUR UTILISER CE SRIPT :
-- A1. Vous devez creer un classeur ti-nspire.
-- A2. Lancer ensuite le TI-Nspire Scripting tools
-- A3. Cliquer sur le premier bouton (ou choisissez tools, Lua Script to Clipboard)
-- A4. Selectionner le fichier contenant ce present document
-- A5. Aller dans le logiciel ti-nspire, et utiliser un Ctrl V pour copier le code lua

-- B. POUR MODIFIER CE SCIPT :
-- B1. Faites les modifications souhaitees et sauvez le fichier
-- B2. Cliquez sur le second bouton (ou choisissez tools, Reload Script)
-- B3. Allez dans le logiciel TI-Nspire, cliquer sur la fenetre correspondant au code LUA
-- B4. Appuyer sur Ctrl K pour selectionner cette fenetre
-- B5. Appuyer sur Ctrl V pour copier le nouveau Script LUA

--------------------------------------------------------------------------------------
-- DEBUT DU CODE LUA
--------------------------------------------------------------------------------------   

--------------------------------------------------------------------------------------
-- DEFINITION DE VARIABLES GLOBALES
--------------------------------------------------------------------------------------
xmin=20
ymin=30
xmax=250
ymax=200


--------------------------------------------------------------------------------------
-- DEFINITION D'UNE CLASSE D'OBJETS
--------------------------------------------------------------------------------------

-- On definit ici une classe d'objets pouvant
-- etre affiches a une postion donnee de l'ecran
--
-- Ces formes possedent 3 attributs : image associee, xpos, ypos
-- et on peut leur appliquer 4 methodes :
-- initialisation,
-- affichage,
-- deplacement absolu,
-- deplacement relatif.

Forme = class()   

-- La premiere fonction permet d'initialiser un objet

function Forme:init(x,y,image)
   self.xpos = x
   self.ypos = y
   self.pic =image
   platform.window:invalidate()
end

-- la fonction suivante indique comment dessiner la forme a l'ecran
-- On se place a la position indiquee par
-- les attributes xpos et ypost et on affiche
-- l'image correspondante

function Forme:paint(gc)
   gc:drawImage(self.pic, self.xpos,self.ypos)
end

-- la fonction suivante permet de repositionner l'objet
-- en indiquant les nouvelle coordonnees

function Forme:setxy(newx, newy)
   if newx>xmin and newx<xmax and newy>ymin and newy<ymax then
     self.xpos = newx
     self.ypos = newy
     platform.window:invalidate()
   end
end

-- la fonction suivante permet de repositionner l'objet
-- en indiquant le deplacement a effectuer

function Forme:move(dx, dy)
local newx,newy
   self:setxy(self.xpos + dx,self.ypos + dy)
end

-- Definition de deux objets membres de cette classe :
-- La definition de l'image a ete faite par copier coller
-- depuis l'outil TI-Nspire Scripting Tools

carre_rouge = image.new("\010\000\000\000\010\000\000\000\000\000\000\000\020\000\000\000\016\000\001\000\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252\227\252")
smiley= image.new("\016\000\000\000\018\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\156\243\156\243\156\243\189\247\213\222\235\193\136\181g\181\135\181g\181\137\185O\202\189\247\156\243\156\243\156\243\156\243\156\243{\239O\206\168\222F\243D\243d\247d\247#\243\004\235E\214\170\1858\231\156\243\156\243\156\243\213\222m\210\231\230d\247\132\251\195\255\131\255\131\255\131\255C\251\003\247\132\226\233\193r\210z\239\156\243\204\189\198\226\132\247\166\218\007\198\198\226\195\255\131\255#\243\231\197\007\198\002\251\131\230\135\185\246\222\212\218g\210D\243\166\218\166\218\197\226D\239\131\255\131\255C\247\165\218d\222\006\206\194\242\196\205O\206\170\185\005\239\131\255\197\226D\239\131\255\131\255\131\255\131\255C\251\034\255\002\255E\218\226\250b\234\167\193G\173C\247\131\255\131\255\130\218\001\198\162\222\131\255c\251\002\243\161\197\161\197\226\250\226\250\162\246\133\193f\181#\243C\251\131\255\194\193\194\156\002\202C\251\034\255\162\234\194\156\194\156\193\250\193\254\193\254\133\193g\181\003\247c\251\034\255\196\230e\218\196\234\034\255\034\255\226\242%\218%\218\226\250\226\250\161\254\133\193&\169\226\242\034\255\034\255\034\255\034\255\034\255\002\255\002\255\193\254\193\254\226\250\161\254\161\254\161\254d\189G\173\163\234\002\255\226\242\194\242\163\234\162\242\162\242\162\242\130\238\130\242B\242\130\242\162\246B\242\133\193\014\198E\214\194\242f\181\198\156\231\156\231\156\231\156\231\156\231\156\231\156\198\156\231\156B\242\227\213\235\197Y\235\136\185\130\238\193\254\132\189s\206\222\251\222\251\222\251\222\251{\239\198\156\130\242\129\254d\189\179\214\156\243\237\193\196\205\162\242\162\242\198\201)\165)\165)\165)\165H\173B\242\129\254\227\213\169\193\023\227\156\243z\239\137\185\034\226\162\246\130\242B\234\034\230\034\230B\234\034\234\129\254\130\242D\181\213\222\156\243\156\243\156\243\023\227\201\197\002\222\162\246\161\254\129\254\161\254\129\254\129\250\034\234d\189\147\214\156\243\156\243\156\243\156\243\156\243\246\222\011\206\196\205\002\222B\238\034\238\034\230\196\209\165\197\147\214{\239\156\243\156\243\156\243\189\247\156\243\156\243\023\227p\210\011\206\198\205\198\205\232\205O\210\147\214\156\243\156\243\156\243\156\243")
forme1=Forme (xmin+20,ymin+20,smiley)
forme2=Forme (xmax-30,ymax-30,carre_rouge)

--------------------------------------------------------------------------------------
-- GESTION DES DIFFERENTS EVENEMENTS
--------------------------------------------------------------------------------------

-- La fonction suivante est la fonction d'affichage
-- L'evenement provoquant son execution
-- est declenche par la commande
-- platform.window:invalidate()

function on.paint(gc)
   gc:setColorRGB(231, 231, 231)
   gc:fillRect(xmin, ymin, xmax-xmin+15, ymax-ymin+15)
   forme1:paint(gc)
   forme2:paint(gc)
   gc:setColorRGB(0, 0, 255)
   gc:setFont("sansserif" , "b", 11)
   x=gc:drawString("(" .. forme1.xpos..", ".. forme1.ypos .. ")",50,0,"top")

end

-- GESTION  DE L'APPUI SUR LES 4 TOUCHES DE DIRECTION
-- permet de deplacer forme1

function on.arrowLeft()
   forme1:move(-5, 0)
end

function on.arrowRight()
   forme1:move(5, 0)
end

function on.arrowUp()
   forme1:move(0, -5)
end

function on.arrowDown()
   forme1:move(0, 5)
end

-- GESTION  DU CLIC GAUCHE
-- Permet de choisir l'emplacement de forme2
function on.mouseDown(wx, wy)
   forme2:setxy(wx,wy)
end

Dernière édition par Invité le 05 Juin 2011, 09:24, édité 4 fois au total.
Invité
 

Re: Un premier outil de développement LUA disponible !

Messagepar jlbalas le 27 Mai 2011, 06:18

Merci beaucoup, on va s'y mettre rapidement
Boris à raison c'est vraiment très intéressant et parfaitement lisible
:D
Avatar de l’utilisateur
jlbalas
 
Messages: 124
Inscrit le: 06 Août 2008, 19:16

Re: Un premier outil de développement LUA disponible !

Messagepar Invité le 27 Mai 2011, 07:06

Je viens de modifier légèrement le second exemple pour permettre le pilotage de deux objets différents, héritant tous les deux des propriétés définies par la classe Forme (c'est l'un des avantages les plus immédiatement compréhensible de la "programmation orientée objet".
Il serait ensuite facile d'ajouter d'autres fonctionnalités à ce script...
Pièces jointes
exemple.gif
exemple.gif (2.42 Kio) Consulté 5482 fois
Invité
 

Re: Un premier outil de développement LUA disponible !

Messagepar Christian le 27 Mai 2011, 18:09

Merci Philippe, ce sont des exemples tout à fait accessibles pour quelqu'un comme moi qui ne connaît pas LUA.
Amicalement,
Christian
Avatar de l’utilisateur
Christian
 
Messages: 340
Inscrit le: 22 Août 2008, 13:42

Re: Un premier outil de développement LUA disponible !

Messagepar Boris le 27 Mai 2011, 22:17

Oui ça permet de bien démarrer. C'est un très bon tuto ^^
Boris
 
Messages: 324
Inscrit le: 24 Oct 2008, 06:11

Re: Un premier outil de développement LUA disponible !

Messagepar Invité le 27 Mai 2011, 22:28

N'oubliez pas : dans l'état actuel des choses, la présence de caractères accentués dans les commentaires d'un script lua peut provoquer la fermeture brutale du logiciel ti-nspire au moment du Crll+V.
Edit: Pour éviter ce problème, il suffit de sauvegarder le script au format UTF8.
Dernière édition par Invité le 05 Juin 2011, 09:26, édité 1 fois au total.
Invité
 

Re: Un premier outil de développement LUA disponible !

Messagepar Invité le 28 Mai 2011, 09:21

Juste un dernier exemple, montrant comment obtenir une construction un peu complexe (un flocon de Koch) et utiliser un timer pour lancer une animation.
Code: Tout sélectionner
--------------------------------------------------------------------------------------
-- INITIATION A LUA
--------------------------------------------------------------------------------------
-- CONSTRUCTIONS GRAPHIQUES
-- FONCTIONS RECURSIVES
-- UTILISATION D'UN TIMER
--------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------
-- Comment utiliser ce Script ?
--------------------------------------------------------------------------------------   
-- Merci d'excuser l'absence d'accents dans le texte des commentaires
-- Il serait possible d'en utiliser, sous reserve de sauvegarder le fichier
-- obtenu au format UTF8 avant de l'importer dans TI-Nspire Scripting Tools
-- A. POUR UTILISER CE SRIPT :
-- A1. Vous devez creer un classeur ti-nspire.
-- A2. Lancer ensuite le TI-Nspire Scripting tools
-- A3. Cliquer sur le premier bouton (ou choisissez tools, Lua Script to Clipboard)
-- A4. Selectionner le fichier contenant ce present document
-- A5. Aller dans le logiciel ti-nspire, et utiliser un Ctrl V pour copier le code lua

-- B. POUR MODIFIER CE SCIPT :
-- B1. Faites les modifications souhaitees et sauvez le fichier
-- B2. Cliquez sur le second bouton (ou choisissez tools, Reload Script)
-- B3. Allez dans le logiciel TI-Nspire, cliquer sur la fenetre correspondant au code LUA
-- B4. Appuyer sur Ctrl K pour selectionner cette fenetre
-- B5. Appuyer sur Ctrl V pour copier le nouveau Script LUA

--------------------------------------------------------------------------------------
-- DEBUT DU CODE LUA
--------------------------------------------------------------------------------------   

-- Variables globales utilisees par ce script

n=1                 -- le nombre d'iterations souhaitees   
nmax=6           -- nombre d'iterations maxi
duree=1          -- temporisation timer


function segment_koch(gc,x1,y1,x2,y2,n)
   local xa,ya,xb,yb,xu,yu,xc,yc
   if n == 0 then
      -- pour n=0, il suffit de tracer le segment
      gc:drawLine(x1, wh-y1, x2, wh-y2)
   else
     -- dans le cas contraire, on partage le segment en 3...
      xa = (2*x1+x2)/3;
      ya = (2*y1+y2)/3;
      xb = (x1+2*x2)/3;
      yb = (y1+2*y2)/3;
      -- on calcule les coordonnees du sommet du triangle
      xu = (xb-xa);
      yu = (yb-ya);
      xv = xu/2 - (13*yu)/15;
      yv = (13*xu)/15 + yu/2;
      xc = xa+xv;
      yc=ya+yv;

      -- il reste a effectuer quatre appels recursifs de la fonction
      segment_koch(gc,x1,y1,xa,ya,n-1)                     
      segment_koch(gc,xa,ya,xc,yc,n-1)                     
      segment_koch(gc,xc,yc,xb,yb,n-1)
      segment_koch(gc,xb,yb,x2,y2,n-1)   
   end
end

function flocon_koch (gc, x0, y0, cote, n)
local x1,y1,x2,y2;
   x1=x0+cote;
   y1=y0;
   x2=x0+cote/2;
   y2=y0+(13*cote)/15;
   segment_koch(gc,x1,y1,x0,y0,n);                     
   segment_koch(gc,x2,y2,x1,y1,n);                     
   segment_koch(gc,x0,y0,x2,y2,n);                     
end;
   
--------------------------------------------------------------------------------------
-- GESTION DES DIFFERENTS EVENEMENTS
--------------------------------------------------------------------------------------

-- La fonction suivante est la fonction d'affichage
-- L'evenement provoquant son execution
-- est declenche par la commande
-- platform.window:invalidate()

function on.paint(gc)
      wh=platform.window:height()
      ww=platform.window:width()
      gc:setColorRGB(100, 0, 20)
      flocon_koch (gc, 10,wh/4,wh*4/5, n)

      -- affichage de la valeur de n
      gc:setColorRGB(0, 0, 255)
      gc:setFont("sansserif" , "b", 25)
      gc:drawString(n ,ww-50,wh-50,"top")

end


-- Les touches "vers la droite" ou "vers le haut" permettent d'augmenter la valeur de n
-- Les touches "vers la gauche" ou "vers le bas" permettent de diminuer la valeur de n

function on.arrowLeft()
   if n>1 then n=n-1 end
   platform.window:invalidate()
end

function on.arrowDown()
   if n>1 then n=n-1 end
   platform.window:invalidate()
end

function on.arrowRight()
   if n<nmax then n=n+1 end
   platform.window:invalidate()
end

function on.arrowUp()
   if n<nmax then n=n+1 end
   platform.window:invalidate()
end

-- L'appui sur la touche "a" ou "A" lance une animation de la construction
-- L'appui sur la touche "s" ou "S" stoppe l'animation

function on.charIn(char)
   if char=="a" or char=="A" then
      n=1
      timer.start(duree)
   elseif char=="s" or char=="S" then
      timer.stop()
   end
end   

-- L'appui sur la touche "ESC" stoppe egalement l'animation

function on.escapeKey()
   timer.stop()
end

-- On indique ici ce que l'on doit faire quand la duree definie
-- pour le timer est ecoulee :
-- on met a jour la valeur de n et on provoque la reconstruction
-- du flocon.

function on.timer()
   if n<nmax then
      n=n+1
   else
      n=1
   end
   platform.window:invalidate()
end


flocon_koch.gif
flocon_koch.gif (5.65 Kio) Consulté 5359 fois

N.B. : la taille du flocon s'adapte automatiquement à la taille de la fenêtre disponible.
Dernière édition par Invité le 05 Juin 2011, 09:27, édité 1 fois au total.
Invité
 

Suivant

Retourner vers Discussions générales sur le développement



Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invités

cron

© Copyright 2008 - Tous droits réservés.