Page 1 sur 1

Aide programmation Lua

Message non luPosté: 13 Jan 2015, 20:57
de Thuthur78
Bonjour à tous je suis nouveau sur les forum de Ti Planet et aussi en programmation en Lua. Je ne métrise pas de langages mais j'ai envi d'apprendre. En ce moment je souhaite créer un programme pour les sciences de l'ingénieur sur les amplificateurs opérationnels, non pas que je n'ai pas envi d'apprendre mon cours (meme si ca me servira au controle) mais surtout pour apprendre à coder. J'ai beau chercher sur internet des tutoriels pour apprendre mais pour le Lua ils sont très difficiles à trouver et je ne trouve pas la plupart du temps ce que je cherche.

Sur ce programme j'ai deja réalisé une bonne partie du codage mais en parties séparées, j'aurais besoin de votre aide pour améliorer le code (vous penserez surement que le code est dégueu mais bon je débute) et m'aider à tous relier

1ere partie l'accueil + le menu et l'affichage des différents montages d'ampli
Code: Tout sélectionner
platform.apilevel = '1.0'     
screen = platform.window
W = screen:width()
H = screen:height()

function on.paint(gc)  --j'affiche l'accueil
   local titre = image.new("   ") --j'ai viré les images car trop de caractères (j'utilise le Ti-Nspire Scrpting Tool si vous avez une autre solution je suis preneur)
   local imw = titre:width()
   local imh = titre:height()
   gc:drawImage(titre, (W - imw)/2, (H - imh)/2)
   gc:setColorRGB(255, 255, 255)
   gc:setFont("sansserif", "b", 20)
        local sh2 = gc:getStringHeight("SI")
        gc:drawString("SI", 5, 15+sh2/2)
        gc:setFont("sansserif", "b", 15)
        local sh1 = gc:getStringHeight("sciences de l'ingénieur")
        gc:drawString("sciences de l'ingénieur", 5, 15+sh2/2+sh1/2)
end

function affichage(menuparent,option)  --le menu
if option=="Comparateur" then
  AOPco()
elseif option=="Ampli inverseur" then
  AOPin()
elseif option=="Ampli non-inverseur" then
  AOPnin()
elseif option=="Suiveur" then
  AOPsu()
elseif option=="Trigger" then
  AOPtr()
end
screen:invalidate()
end

Menu = {
{"AOP",
  {"Comparateur",affichage},
  {"Ampli inverseur",affichage},
  {"Ampli non-inverseur",affichage},
  {"Suiveur",affichage},
  {"Trigger",affichage}
}
}

toolpalette.register(Menu)

function AOPco()  --on affiche le comparateur
   function on.paint(gc)
      local imgco = image.new("  ")  -pareil ici
      local imw1 = imgco:width()
      local imh1 = imgco:height()
      gc:setColorRGB(150, 150, 150)
      gc:fillRect(0, 0, W, H)
      gc:drawImage(imgco, (W-imw1)/2, 15)
   end
end

function AOPin()
   function on.paint(gc)
      local imgin = image.new("   ")
      local imw2 = imgin:width()
      local imh2 = imgin:height()
      gc:setColorRGB(150, 150, 150)
      gc:fillRect(0, 0, W, H)
      gc:drawImage(imgin, (W-imw2)/2, 15)
   end
end

function AOPnin()
   function on.paint(gc)
      local imgnin = image.new("  ")
      local imw3 = imgnin:width()
      local imh3 = imgnin:height()
      gc:setColorRGB(150, 150, 150)
      gc:fillRect(0, 0, W, H)
      gc:drawImage(imgnin, (W-imw3)/2, 15)
   end
end

function AOPsu()
   function on.paint(gc)
      local imgsu = image.new("  ")
      local imw4 = imgsu:width()
      local imh4 = imgsu:height()
      gc:setColorRGB(150, 150, 150)
      gc:fillRect(0, 0, W, H)
      gc:drawImage(imgsu, (W-im4)/2, 15)
   end
end

function AOPtr()
   function on.paint(gc)
      local imgtr = image.new(
      local imw5 = imgtr:width()
      local imh5 = imgtr:height()
      gc:setColorRGB(150, 150, 150)
      gc:fillRect(0, 0, W, H)
      gc:drawImage(imgtr, (W-im5)/2, 15)
   end
end


2eme partie est pour écrire un résultat
Code: Tout sélectionner
screen = platform.window
input = "?"  --on défini input

function on.paint(gc) --on défini le crayon puis on crée un string avec input
   gc:setPen("medium", "smooth")
   gc:setColorRGB(0, 0, 255)
   gc:drawString("R1 = "..input.." R", 8, 10, "top")
end

function on.charIn(touche) --je lis la touche sur laquelle j'appui
   if input == "?" then
      input = touche   --c'est pour enlever le ? au début, pour toute modif ceci n'est pas nécessaire tout comme celle qui redéfinie input = ? a la fin
      screen:invalidate()
   else
      if touche == "k" then -- si la touche est k on multipli par 1000
         input = input.."000"
      elseif touche == "M" then -- si la touche est M on multipli par 1000000
         input = input.."000000"
      else
         input = input..touche  --sinon on allonge la string avec la touche sur laquelle on vient d'appuyer
      end
      screen:invalidate() --on raffraichi l'écran
   end
end

function on.backspaceKey()  --si on appui sur dell on efface
   input = string.usub(input, 0, -2)
   screen:invalidate()
   if input == "" then -- si input est vide il vaut "?"
      input = "?"
      screen:invalidate()
   end
end


3eme partie pour sélectionner la zone dans laquelle on va écrire
Code: Tout sélectionner
screen = platform.window
valeur = 1  --valeur equivaut au numero du rectangle
noir = {0, 0, 0}
bleu = {240, 176, 1}
c1, c2, c3 = unpack(bleu), unpack(noir), unpack(noir)  --juste pour définir les couleurs au debut sinon il crash

function on.paint(gc)  --on dessine trois rectangle
   gc:setPen("medium", "smooth")
   gc:setColorRGB(c3)
   gc:drawRect(15, 20, 70, 30)
   gc:setColorRGB(c2)
   gc:drawRect(15, 50, 70, 30)
   gc:setColorRGB(c1)
   gc:drawRect(15, 80, 70, 30)
   gc:setColorRGB(unpack(noir))
   gc:drawString("valeur = "..valeur, 250, 35)  --j'écris la valeur du rectangle dans un coin pour moi (sera enlevé dans version finale)
end

function on.arrowKey(fleche)  --je controle la selection avec les fleches
   if fleche == "up" then
      valeur = valeur+1
      if valeur > 3 then
         valeur = valeur-1  --le numero du rectangle ne peut pas dépasser 3
      end
      screen:invalidate()
      selection()
   elseif fleche == "down" then
      valeur = valeur-1
      if valeur < 1 then  --le numero ne peut pas aller en dessous de 1
         valer = valeur+1
      end
      screen:invalidate()
      selection()
   end
end

function selection()  --a chaque valeur on defini les couleurs de chaque rectangle celui selectionné sera en bleu
   if valeur == 1 then
      c1, c2, c3 = unpack(bleu), unpack(noir), unpack(noir)
   elseif valeur == 2 then
      c1, c2, c3 = unpack(noir), unpack(bleu), unpack(noir)
   elseif valeur == 3 then
      c1, c2, c3 = unpack(noir), unpack(noir), unpack(bleu)
   end
end


je vous remerci d'avance pour votre aide et si vous voulez lorsque je l'aurai fini je pourrais le mettre a disposition de tout le monde.

Re: Aide programmation Lua

Message non luPosté: 23 Jan 2017, 10:01
de issolah75
salut ,

j'aimerais savoir si tu as réussie a résoudre la programmation car je suis intéressé par ton programme

merci de me contacté par mail : ismael.Allouche@gmail.com

Re: Aide programmation Lua

Message non luPosté: 23 Jan 2017, 13:23
de Ti64CLi++
Si tu as envie d'apprendre le Lua, pour te faire tes propres programmes, un tuto très complet et très bien est disponible sur developpez : http://wxlua.developpez.com/tutoriels/lua/general/cours-complet/

Re: Aide programmation Lua

Message non luPosté: 23 Jan 2017, 13:29
de Adriweb
Aussi, cf. viewtopic.php?p=205689#p205689 pour des choses spécial Nspire