Erreur de débutant | |
alain91 | 18-Sep-2008/15:09:46+2:00 |
Bonjour, Je débute en REBOl et j'ai voulu modifier un script des carrés qui glissent: script de base: rebol [] view center-face layout [ origin 0x0 space 0x0 across style p button 60x60 [ if not find [0x60 60x0 0x-60 -60x0] face/offset - empty/offset [exit] temp: face/offset face/offset: empty/offset empty/offset: temp ] p "E" p "G" p "A" p "O" return p "B" p "F" p "D" p "K" return p "C" p "H" p "I" p "L" return p "N" p "M" p "J" empty: p 200.200.200 edge [size: 0] ] J'ai voulu modifier le code pour mettre en place une boucle. Ce qui donne : rebol [] lettres: ["A" "B" "C" ... "O"] view center-face layout [ origin 0x0 space 0x0 across style p button 60x60 [ if not find [0x60 60x0 0x-60 -60x0] face/offset - empty/offset [exit] temp: face/offset face/offset: empty/offset empty/offset: temp ] foreach lettre lettres [p lettre] empty: p 200.200.200 edge [size: 0] ] l'interpréteur me retourne p has no value near p lettre Je n'arrive pas à trouver ce qui cloche. Quelqu'un aurait-il une solution ? | |
Didec | 18-Sep-2008/16:23:55+2:00 |
Un des gros avantages de Rebol c'est d'utiliser des dialectes. Il y en a plein dans le langage lui même. Parse, Layout, Secure et bien d'autres fonctions Rebol interprète le block de données qui suit comme un dialecte. Une erreur classique est de confondre dans le source du programme ce qui est un dialecte et ce qui est du code Rebol. Voici ton programme avec la partie Rebol et la partie VID mis en valeur, du point de vue de l'interpréteur : Légende : code Rebol - code VID ----------------------- Lettres: ["A" "B" "C" ... "O"] view center-face layout [ origin 0x0 space 0x0 across style p button 60x60 [ if not find [0x60 60x0 0x-60 -60x0] face/offset - empty/offset [exit] temp: face/offset face/offset: empty/offset empty/offset: temp ] foreach lettre lettres [p lettre] empty: p 200.200.200 edge [size: 0] ] | |
Didec | 18-Sep-2008/16:26:23+2:00 |
Pardon, le même avec des retraits, j'espère : Légende : code Rebol - code VID ----------------------- Lettres: ["A" "B" "C" ... "O"] view center-face layout [ origin 0x0 space 0x0 across style p button 60x60 [ if not find [0x60 60x0 0x-60 -60x0] face/offset - empty/offset [exit] temp: face/offset face/offset: empty/offset empty/offset: temp ] foreach lettre lettres [p lettre] empty: p 200.200.200 edge [size: 0] ] | |
alain91 | 18-Sep-2008/18:02:35+2:00 |
Merci pour ces précisions rapides et utiles. Cependant dois-je comprendre que je ne peux pas insérer du code REBOL dans le code VID comme je le souhaitais? | |
guest2 | 18-Sep-2008/20:37+2:00 |
Si heureusement, on peut insérer du code rebol dans un block VID. Ton problème n'est pas là, ton problème c'est que le code que tu as inséré n'a aucune chance de produire le résultat escompté. J'imgine que tu veux que: >>foreach lettre lettres [p lettre] produise en sortie un block du genre: >>[ p "A" p "B" p "C" return p "X" p "Z" ...] Tu es très loin du compte. Allez cherche un peu c'est pas si compliqué. | |
alain91 | 18-Sep-2008/21:40:24+2:00 |
Merci pour cet encouragement qui m'incite à poursuivre ma recherche. | |
alain91 | 20-Sep-2008/17:30:25+2:00 |
Victoire, j'ai trouvé la solution suivante qui me permet de faire une distribution aléatoire des lettres avant affichage. Merci pour la piste sur la distinction entre dialecte VID et code REBOL. rebol [] lettres: ["A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O"] lettres: random lettres t: [] while [not tail? lettres] [ i: index? lettres lettre: first lettres lettres: next lettres t: compose [(t) p (lettre)] if (0 = remainder i 4) [ t: compose [(t) return] ] ] fin: [empty: p 200.200.200 edge [size: 0]] tpl: [ origin 0x0 space 0x0 across style p button 60x60 [ if not find [0x60 60x0 0x-60 -60x0] face/offset - empty/offset [exit] temp: face/offset face/offset: empty/offset empty/offset: temp ] ] t1: compose [(tpl) (t) (fin)] view center-face: layout t1 | |
Didec | 23-Sep-2008/12:43:03+2:00 |
Je vois avec plaisir que tu y es arrivé, presque sans notre aide. Bravo !! Je me permet de te proposer une version un peu optimisée afin de te montrer une autre façon de faire la même chose et donc de perfectionner tes connaissances du langage. rebol [] lettres: random ["A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O"] lay: [ origin 0x0 space 0x0 across style p button 60x60 [ if not find [0x60 60x0 0x-60 -60x0] face/offset - empty/offset [exit] temp: face/offset face/offset: empty/offset empty/offset: temp ] ] i: 0 foreach l lettres [ i: i + 1 repend lay ['p l] if 0 = remainder i 4 [append lay 'return] ] append lay [empty: p 200.200.200 edge [size: 0]] view center-face layout lay | |
Didec | 23-Sep-2008/14:31:53+2:00 |
Aller pour le plaisir, la même en image :rebol [] ; Image du puzzle img: load http://salon-auto.web-sy.fr/2004/ferrari_f430_rouge.jpg ; Taille d'une pièce but-size: img/size / 4 ; Creation des pieces pieces: [] for i 0 14 1 [ ; j'avoue que cette ligne n'est pas des plus lisibles, ça fait partie du plaisir de l'apprentissage que de la comprendre append pieces copy/part at img as-pair but-size/x * remainder i 4 but-size/y * to-integer i / 4 but-size ] ; On mélange pieces: random pieces ; le reste du code est quasi le même que celui du puzzle avec les lettres sauf... lay: [ origin 0x0 space 0x0 across ;... ici où ou réduit la taille du bord du bouton style p button but-size edge [size: 1x1] [ ;... et là ou il faut tenir compte de la taille variable du bouton selon la taille de l'image if not find reduce [0x1 * but-size 1x0 * but-size 0x-1 * but-size -1x0 * but-size] face/offset - empty/offset [exit] temp: face/offset face/offset: empty/offset empty/offset: temp ] ] i: 0 foreach l pieces [ i: i + 1 repend lay ['p l] if 0 = remainder i 4 [append lay 'return] ] append lay [empty: p 200.200.200 edge [size: 0]] view center-face layout lay Merci pour l'entracte | |
alain91 | 23-Sep-2008/14:37:44+2:00 |
C'est moi qui vous remercie pour ces encouragements efficaces, accompagnés d'une pointe d'humour appréciée. | |
Login required to Post. |