µLua DS - Forum officiel | Official forum Index du Forum

µLua DS - Forum officiel | Official forum
Le bon endroit pour en savoir plus sur MicroLua et pour parler de vos projets ! | The right place to learn more about MicroLua and talk about your projects !

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer   ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Navigation dans une table
Aller à la page: 1, 2  >
 
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Demande d'aide
Sujet précédent :: Sujet suivant  
Auteur Message
bew78


Hors ligne

Inscrit le: 12 Avr 2012
Messages: 31
Localisation: /lua/PRGM/mes prgm/...

MessagePosté le: Jeu 12 Avr 2012 - 21:54    Sujet du message: Navigation dans une table Répondre en citant

Bonjour,
 j'ai découvert il y a qq jours le langage lua pour la ds, ayant déjà fait du C, et du C++, je me suis lancé tête baissé dans le code avec l'éditeur de texte de papymouge...
 RESULTAT :


*** ERRORS OCCURED ***
dessinStylet.lua:10: bad argument #2 to 
'drawPoint' (number expected, got nil)
stack traceback:
...
***********************
Press START to continue


Ce que je veux faire :
 fonction AffPoint()
afficher dans une boucle for(i=1, var.tblPointIndex (la longueur de la table)) tous les point enregistré dans la tablevar.tblPoint en récupérant l'abscisse du point avec : var.tblPoint(avec i entre crochets) et l'ordonnée du point avec : var.tblPoint(avec i+1 entre crochets)


 fonction VerifyPoint()
vérifier que le point n'existe pas pour pouvoir ensuite le rajouter dans la table.


J'ai bien compris que le système  var.tblPoint(avec i entre crochets)  ne marche pas, et je vous demande comment résoudre ce pb.


Merci
Bew78


Code source de dessinStylet.lua :
http://www.sendspace.com/file/7ccmwz
_________________
Je vaux 5 860 700 € sur HumainAVendre.com, et vous ?


Revenir en haut
Publicité






MessagePosté le: Jeu 12 Avr 2012 - 21:54    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Jeu 12 Avr 2012 - 22:17    Sujet du message: Navigation dans une table Répondre en citant

D'après ton code (qui est programmer comme un codeur de C Wink ), j'ai pu remarquer que à cause de ta variable var.tblPointIndex qui vaut 1, ta fonction essais de lire dans le tableau var.tblPoint[1] et var.tblPoint[2], alors que ces deux variables n’existent pas encore et son donc égale à nil d'où ta jolie erreur de l'argument 2 de la fonction screen.drawPoint (qui attend un nombre et qui reçoit nil).

Le mieux pour compter le nombre de valeur, en Lua bien sûr c'est d'utiliser le dièse. Ici #var.tblPoint retournera le nombre d'objets dans le tableau var.tblPoint, tu n'as plus qu'a le divisé par deux pour que cela corresponde dans ton code.

J’espère que j'aurai été assez clair. Bonne continuation.
_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
Fantasix
Modérateur

Hors ligne

Inscrit le: 26 Avr 2010
Messages: 1 317
Localisation: SCREEN_UP, en -1, -1

MessagePosté le: Jeu 12 Avr 2012 - 22:18    Sujet du message: Navigation dans une table Répondre en citant

Hum ...

Serait-ce possible d'avoir le code directement dans les balises [code] s'il te plait ?

Pas trop envie d'aller sur sendspace xD

Edit : Rofl, Papy' a encore de la ressource !

Fanta'
_________________


BMA News :

Création du Homebrew Storage en cours ...


Revenir en haut
Visiter le site web du posteur
bew78


Hors ligne

Inscrit le: 12 Avr 2012
Messages: 31
Localisation: /lua/PRGM/mes prgm/...

MessagePosté le: Ven 13 Avr 2012 - 17:00    Sujet du message: Navigation dans une table Répondre en citant

Et voila :
Code:
var = {}
var.cFont = Color.new(0, 0, 0)
var.cPoint = Color.new(31, 31, 31)
var.tblPoint = {}
var.tblPointIndex = 1




var.AffPoint = function()
 for i=1,var.tblPointIndex, 2 do
 screen.drawPoint(SCREEN_UP, var.tblPoint[i], var.tblPoint[i+1], var.cPoint)
 end
end


var.NewPoint = function()
var.tblPoint[var.tblPointIndex]=Stylus.X
var.tblPoint[var.tblPointIndex+1]=Stylus.Y
end


var.VerifyPoint = function()
 for i=1, var.tblPointIndex, 2 do
  if ((var.tblPoint[i]==Stylus.X)and(var.tblPoint[i+1]==Stylus.Y)) then
  return false
  else
  return true
  end
 end
end


while (not Keys.held.Select) do
Controls.read()


screen.drawFillRect(SCREEN_UP, 0, 0, 256, 192, var.cFont)
screen.print(SCREEN_DOWN, 20, 5, "Touchez l'écran tactile", var.cFont)


 if (Stylus.held) then
  if (var.VerifyPoint()) then
  var.NewPoint()
  end
 end


 if (Keys.held.Start) then
 var.tblPoint = {}
 var.tblPointIndex = 1
 end


var.AffPoint()
render()
end


var = nil




J'avais pas vu les balises.....


 @papymouge :
Citation:
 Le mieux pour compter le nombre de valeur, en Lua bien sûr c'est d'utiliser le dièse. Ici #var.tblPoint retournera le nombre d'objets dans le tableau var.tblPoint, tu n'as plus qu'a le divisé par deux pour que cela corresponde dans ton code. 
pourrai-tu me donner un code pour var.AffPoint() par exemple ?


Merci
Bew78
_________________
Je vaux 5 860 700 € sur HumainAVendre.com, et vous ?


Revenir en haut
Fantasix
Modérateur

Hors ligne

Inscrit le: 26 Avr 2010
Messages: 1 317
Localisation: SCREEN_UP, en -1, -1

MessagePosté le: Ven 13 Avr 2012 - 17:15    Sujet du message: Navigation dans une table Répondre en citant

Il y a une raison particulière pour laquelle du va de 2 en 2 dans tes boucles ?

Nan parce que si c'est pour les valeurs X et Y, j'te conseille de mettre directement des tableaux dans le tableau var.tblPoint, ce qui donnerait :

Code:
var = {}
var.tableauPoint = {}

newPoint = function(p_x, p_y)
   
   table.insert(var.tableauPoint, {x = p_x, y = p_y})
   
end

afficherPoints = function()
   
   for i=1, #var.tableauPoint do
      screen.drawPoint(SCREEN_UP, var.tableauPoint[i].x, var.tableauPoint[i].y, Color.new(31, 0, 0))
   end
   
end

afficherPoints2 = function()
   
   for cle, valeur in pairs(var.tableauPoint) do
      screen.drawPoint(SCREEN_UP, valeur.x, valeur.y, Color.new(31, 0, 0))
   end
   
end

A noter que c'est pas du tout conforme à ton code de base, mais juste pour que tu comprenne le fonctionnement !

J't'ai mis là deux façon de parcourir le tableau : une simple avec un itérateur, et une autre semblable à un foreach.

Fanta'
_________________


BMA News :

Création du Homebrew Storage en cours ...


Revenir en haut
Visiter le site web du posteur
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Ven 13 Avr 2012 - 17:22    Sujet du message: Navigation dans une table Répondre en citant

 Voici un exemple:
Code:

var.AffPoint = function()
   for i=1,#var.tblPoint, 2 do
      screen.drawPoint(SCREEN_UP, var.tblPoint[i], var.tblPoint[i+1], var.cPoint)
   end
end

De cette façon, tu n'as plus besoin d'utilisé la variable var.tblPointIndex. (J'ai remplacer var.tblPointIndex par #var.tblPoint)
Et de cette manière, si le tableau de points et vide ben le 'for' n'est pas parcouru une seule fois.
Et si tu n'utilise plus la variable var.tblPointIndex, la fonction newPoint deviendrais :  
Code:


var.NewPoint = function()
   table.insert(var.tblPoint, Stylus.X)
   table.insert(var.tblPoint, Stylus.Y)
end


Avec le Lua, tu peut même pousser plus loin en utilisant le tableau var.tblPoint comme un tableau de structure 'Point' où tu aurais pour chaque ligne de ton tableau la coordonné X et Y d'un point.
Cela se fait super simplement, dans ce cas, ces deux fonction deviendraient:
 
Code:

var.AffPoint = function()
 for i=1,#var.tblPoint do
 screen.drawPoint(SCREEN_UP, var.tblPoint[i].X, var.tblPoint[i].Y, var.cPoint)
 -- on pourrait l'ecrire de la sorte aussi :
 -- screen.drawPoint(SCREEN_UP, var.tblPoint[i][X], var.tblPoint[i][Y], var.cPoint)
 end
end


var.NewPoint = function()
   local buff = {}
   buff.X = Stylus.X
   buff.Y = Stylus.Y
   table.insert(var.tblPoint, buff)
end 


Tu vas vite voir la puissance de Lua dans la gestion des tableaux par rapport au C/C++ Very Happy
_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
thermo_nono
Modérateur

Hors ligne

Inscrit le: 31 Déc 2008
Messages: 2 415
Localisation: La Géhenne

MessagePosté le: Ven 13 Avr 2012 - 17:29    Sujet du message: Navigation dans une table Répondre en citant

Papy, je n'ai pas fais de test, mais ne devrait-on pas plutôt mettre " for i=1,#var.tblPoint - 1, 2 do ", car dans la boucle il y a un "var.tblPoint[i+1]" qui risque de dépasser.
_________________
“Qui reçoit une idée de moi reçoit de la connaissance sans diminuer la mienne, comme celui qui allume sa chandelle à la mienne reçoit la lumière sans me plonger dans l’obscurité.” - Thomas Jefferson


Revenir en haut
Visiter le site web du posteur MSN
bew78


Hors ligne

Inscrit le: 12 Avr 2012
Messages: 31
Localisation: /lua/PRGM/mes prgm/...

MessagePosté le: Ven 13 Avr 2012 - 17:35    Sujet du message: Navigation dans une table Répondre en citant

Merci de ces réponses complète.


@papymouge :
tes fonctions sont tres interressante
juste : comment marche le 'table.insert()'


@Fantasix
Que veux dire : 
Code:
 for cle, valeur in pairs(var.tableauPoint) do 


Merci
Bew78


PS : je viens de faire ma présentation si vous voulez allez jetez un coup d'oeil.
_________________
Je vaux 5 860 700 € sur HumainAVendre.com, et vous ?


Revenir en haut
Fantasix
Modérateur

Hors ligne

Inscrit le: 26 Avr 2010
Messages: 1 317
Localisation: SCREEN_UP, en -1, -1

MessagePosté le: Ven 13 Avr 2012 - 17:44    Sujet du message: Navigation dans une table Répondre en citant

Code:
for cle, valeur in pairs(var.tableauPoint) do

Admettons que tu ai ceci :

Code:
tableau = {}
tableau[1] = "Un !"
tableau[5] = 189
tableau["test"] = "C'est un test"

for k, v in pairs(tableau) do
    print(k.." -> "..v)
end


Affichera :
1 -> Un !
5 -> 189
test -> C'est un test

Le "k" est la "clé" du tableau, son index si tu veux.

Le "v" est sa valeur, donc la valeur qui est attachée à cet index dans le tableau.

J'te conseille d'aller dans la partie des tuto' pour voir celui sur les tableaux.

Fanta'
_________________


BMA News :

Création du Homebrew Storage en cours ...


Revenir en haut
Visiter le site web du posteur
bew78


Hors ligne

Inscrit le: 12 Avr 2012
Messages: 31
Localisation: /lua/PRGM/mes prgm/...

MessagePosté le: Ven 13 Avr 2012 - 17:46    Sujet du message: Navigation dans une table Répondre en citant

ah ouais, pratique...
_________________
Je vaux 5 860 700 € sur HumainAVendre.com, et vous ?


Revenir en haut
bew78


Hors ligne

Inscrit le: 12 Avr 2012
Messages: 31
Localisation: /lua/PRGM/mes prgm/...

MessagePosté le: Ven 13 Avr 2012 - 18:11    Sujet du message: Navigation dans une table Répondre en citant

Je viens de parcourir ce tutos : http://lua-users.org/wiki/TablesTutorial Je pense que ça va m'aider...
_________________
Je vaux 5 860 700 € sur HumainAVendre.com, et vous ?


Revenir en haut
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Ven 13 Avr 2012 - 20:32    Sujet du message: Navigation dans une table Répondre en citant

alors, pour le table.insert, le fonctionnement n'est pas dur.
il ajoute à la fin par defaut, après on peut lui donner un troisiéme argument qui sera la position de départ pour l'insertion.
_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Ven 13 Avr 2012 - 23:11    Sujet du message: Navigation dans une table Répondre en citant

Le site que tu as trouvé est une bonne référence pour apprendre le Lua, ensuite tu peux t'aider de la doc sur lua.org directement ^^

Les fonctions pairs et ipairs sont des fonctions d'itération de tables, Fanta a bien expliqué leur fonctionnement.
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
bew78


Hors ligne

Inscrit le: 12 Avr 2012
Messages: 31
Localisation: /lua/PRGM/mes prgm/...

MessagePosté le: Sam 14 Avr 2012 - 12:55    Sujet du message: Navigation dans une table Répondre en citant

merci bcp de votre aide, j'ai quasiment terminé le prgm, faut juste que je fasse des fonctions de sauvegarde pour sauver son dessin(donc la table) dans des fichiers en .img.

J'ai donc améliorer le prgm ce matin en ajoutant les fonctionnalités suivantes :
 - il y a des lignes entre les points, et on peut choisir de mettre une ligne ou pas
 - on peut inverser les écrans (pas très dur...)
 - on peut effacer le dessin (la table)
 - on peut effacer le dernier point/ligne
Il y a surement d'autre fonctionnalités simple à rajouter

C'est assez simple, mais je trouve qu'on pourrai faire un mini-tuto pour les débutants lorsque j'aurai terminé mon prgm....

Sur ce  @+
Bew78

ps: je vous met le code complet du prog et le lien de sendspace dans mon prochain msg
_________________
Je vaux 5 860 700 € sur HumainAVendre.com, et vous ?


Revenir en haut
bew78


Hors ligne

Inscrit le: 12 Avr 2012
Messages: 31
Localisation: /lua/PRGM/mes prgm/...

MessagePosté le: Sam 14 Avr 2012 - 12:59    Sujet du message: Navigation dans une table Répondre en citant

Voila le code et le lien :

Lien : http://www.sendspace.com/file/n54c09

Code :

Code:
var = {}
var.cNoir = Color.new(0, 0, 0)
var.cBlanc = Color.new(31, 31, 31)
var.tblPoint = {}
var.tblPointIndex = 1
var.nbPt = 0
var.aff = 1
var.affLigne = false

var.AffPoints = function()
local preced = {}
 if var.nbPt >= 1 then
 preced.X = var.tblPoint[1].X
 preced.Y = var.tblPoint[1].Y
 end

 for i=2,#var.tblPoint do
 screen.drawPoint(SCREEN_UP, var.tblPoint[i].X, var.tblPoint[i].Y, var.cBlanc)
  if var.tblPoint[i].connect then
  screen.drawLine(SCREEN_UP, preced.X, preced.Y, var.tblPoint[i].X, var.tblPoint[i].Y, var.cBlanc)
  end
 preced.X = var.tblPoint[i].X
 preced.Y =var.tblPoint[i].Y
 end
end

var.NewPoint = function()
-- if (var.VerifyPoint()) then
 local buff = {}
 buff.X = Stylus.X
 buff.Y = Stylus.Y
  if var.affLigne then
  buff.connect = true
  else
  buff.connect = false
  var.affLigne = true
  end
 table.insert(var.tblPoint, buff)
 var.nbPt = var.nbPt + 1
-- end
end

var.VerifyPoint = function()
 for i=1, #var.tblPoint do
  if ((var.tblPoint[i].X == Stylus.X)and(var.tblPoint[i].Y == Stylus.Y)) then
  return false
  end
 end
return true
end

var.Del = function()
table.remove(var.tblPoint, #var.tblPoint)
var.nbPt = var.nbPt - 1
end

while (not Keys.held.Select) do
Controls.read()

screen.drawFillRect(SCREEN_UP, 0, 0, 256, 192, var.cNoir)
screen.print(SCREEN_DOWN, 20, 5, "Touchez l'écran tactile", var.cBlanc)
screen.print(SCREEN_DOWN, 20, 15, "Select : Quitter", var.cBlanc)
screen.print(SCREEN_DOWN, 20, 25, "Start : Reset", var.cBlanc)
screen.print(SCREEN_DOWN, 20, 35, "L ou R : Inverser les écrans", var.cBlanc)
screen.print(SCREEN_DOWN, 20, 45, "A : Nouvelle ligne", var.cBlanc)
screen.print(SCREEN_DOWN, 20, 55, "Y : Effacer dernier point/ligne", var.cBlanc)
screen.print(SCREEN_DOWN, 20, 65, "Nombre de point(s) : "..var.nbPt, var.cBlanc)

 if Stylus.held then
 var.NewPoint()
 end

 if Keys.newPress.A then
 var.affLigne = false
 end

 if Keys.newPress.Y then
 var.Del()
 end

 if Keys.newPress.Start then
 var.tblPoint = nil
 var.tblPoint = {}
 var.nbPt = 0
 end

 if Keys.newPress.L or Keys.newPress.R then
 screen.switch()
 var.aff = -var.aff
 end

var.AffPoints()
render()
end

if var.aff == -1 then
screen.switch()
end

var = nil











_________________
Je vaux 5 860 700 € sur HumainAVendre.com, et vous ?


Dernière édition par bew78 le Lun 30 Avr 2012 - 18:26; édité 1 fois
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 03:45    Sujet du message: Navigation dans une table

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Demande d'aide Toutes les heures sont au format GMT + 1 Heure
Aller à la page: 1, 2  >
Page 1 sur 2

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com