Programmer avec le langage Linotte
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Programmer avec le langage LinotteConnexion

Besoin d'un conseil sur la programmation en Linotte ?

Le deal à ne pas rater :
Jeux, jouets et Lego : le deuxième à -50% (large sélection)
Voir le deal

descriptionBogue avec le verbe temporiser EmptyBogue avec le verbe temporiser

more_horiz
bonsoir,

Je signale à l'auteur de langage Linote que j'ai découvert un bogue :

[php]
principale :
début
appelle bogue
temporise
"affiche mince" !

bogue :
début
attends 2 secondes
reviens
[/php]

Au boulot !!

descriptionBogue avec le verbe temporiser EmptyRE: Bogue avec le verbe temporiser

more_horiz
Vive le dédoublement de personnalité...

descriptionBogue avec le verbe temporiser EmptyRE: Bogue avec le verbe temporiser

more_horiz
Bonjour,

Le verbe Temporiser semble corrigé dans ton exemple.

En revanche, avec cet exemple :

[php]
Interaction avec le clavier :
information est un graffiti, x vaut 211, y vaut 261
action est un texte
début
Projette information
Tant que vrai, lis
Temporise
"test" !
action vaut touche
Si action est non vide, texte de information vaut action
ferme
[/php]

Le verbe Temporiser ne fonctionne pas.

descriptionBogue avec le verbe temporiser EmptyRE: Bogue avec le verbe temporiser

more_horiz
Il marche bien cet exemple.
Quel est le problème ?

descriptionBogue avec le verbe temporiser EmptyRE: Bogue avec le verbe temporiser

more_horiz
Le verbe Temporiser n'est pas sensé mettre le programme en pause, en attendant qu'une touche soit enfoncée ?

Dans mon exemple, le programme tourne en boucle indéfiniment, même si l'on appui sur aucune touche...

Voici un autre exemple, trouvé dans le tuto Découvrir Linotte 2010, que j'ai passé en 2.0 :

[php]
Globale
information est un graffiti, x vaut 211, y vaut 261

Décor :
début
Projette information
Va vers affichage

Affichage :
action est un texte
début
Temporise
"test" !
action vaut touche
si action est vide, va vers affichage
texte de information vaut action
Va vers affichage
[/php]

A quoi sert le verbe Temporiser ?

descriptionBogue avec le verbe temporiser EmptyRE: Bogue avec le verbe temporiser

more_horiz

Le verbe Temporiser n'est pas sensé mettre le programme en pause, en attendant qu'une touche soit enfoncée ...


et que la souris bouge ...

descriptionBogue avec le verbe temporiser EmptyRE: Bogue avec le verbe temporiser

more_horiz
C'est donc ça que j'oubliais...

Mais si on ne traite pas l'évènement, pourrait-on le désactiver ?

Car, dans mon exemple précédent, si on désactivait les mouvements de la souris, le verbe Temporiser serait encore plus efficace, non ?

Et comment sa fonctionne avec l'IHM ?

[php]
globale
// Fenêtre principale
Fenêtre_principale :: formulaire, titre vaut "Editeur de cartes", hauteur vaut 800, largeur vaut 1400

// Fenêtre nouveau quadrillage
Fenêtre_nouveau_quadrillage :: formulaire, hauteur vaut 140, largeur vaut 300, titre vaut "Nouveau quadrillage", visible vaut "non", x vaut 450, y vaut 255
txt_Fnq1 :: étiquette, texte vaut "Nombre de cases en largeur :", x vaut 10, y vaut 12
txt_Fnq2 :: étiquette, texte vaut "Nombre de cases en hauteur :", x vaut 10, y vaut 32
txt_Fnq3 :: étiquette, texte vaut "Largeur des cases :", x vaut 10, y vaut 52
txt_Fnq4 :: étiquette, texte vaut "Hauteur des cases :", x vaut 10, y vaut 72
choix_case_largeur :: champ, x vaut 200, y vaut 10, taille vaut 3
choix_case_hauteur :: champ, x vaut 200, y vaut 30, taille vaut 3
choix_taille_largeur_case :: champ, x vaut 200, y vaut 50, taille vaut 3
choix_taille_hauteur_case :: champ, x vaut 200, y vaut 70, taille vaut 3
bouton_valider_Fnq :: bouton, texte vaut "Valider", x vaut 70, y vaut 110
bouton_annuler_Fnq :: bouton, texte vaut "Annuler", x vaut 160, y vaut 110

// Menus
menu1 :: menu, texte vaut "Tileset"
menu1s1 :: sousmenu, texte vaut "Nouveau quadrillage"

// Toile
fond :: toile, x vaut 0, y vaut 35, hauteur vaut 740, largeur vaut 1400, couleur vaut "blanc", pointeur vaut "flèche"
xtoile :: xtoile, x vaut 0, y vaut 35
bordure_gauche :: rectangle, x vaut 0, y vaut 0, position vaut 1, hauteur vaut hauteur de fond, largeur vaut 150, plein vaut "oui", couleur vaut "blanc"

Fenêtre_principale :
début
// Construction des fenêtres

Ajoute txt_Fnq1 & txt_Fnq2 & txt_Fnq3 & txt_Fnq4 & choix_case_largeur & choix_case_hauteur & choix_taille_largeur_case & choix_taille_hauteur_case & bouton_valider_Fnq & bouton_annuler_Fnq dans Fenêtre_nouveau_quadrillage
Fais réagir Fenêtre_nouveau_quadrillage à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Fais réagir bouton_annuler_Fnq à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage

// Début du programme

Ajoute xtoile dans Fenêtre_principale
visible de Fenêtre_principale vaut "oui"
Ajoute menu1 dans Fenêtre_principale
Ajoute menu1s1 dans menu1
Fais réagir Fenêtre_principale à "clic souris" pour Fermer_fenêtre_principale
Fais réagir menu1s1 à "clic souris" pour Fenêtre_nouveau_quadrillage

Tant que 1 != 2, lis
Temporise
ferme

Fenêtre_nouveau_quadrillage :
début
visible de Fenêtre_nouveau_quadrillage vaut "oui"

Fermer_fenêtre_principale :
*f :: formulaire
début
Efface toile
Termine

Fermer_fenêtre_nouveau_quadrillage :
début
visible de Fenêtre_nouveau_quadrillage vaut "non"
Reviens
[/php]

Le verbe Temporiser permet de maintenir l'affichage de la fenêtre principale, n'est-ce pas ?

Mais est-ce que c'est le verbe Temporiser qui repère ces évènements :

[php]
Fais réagir Fenêtre_nouveau_quadrillage à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Fais réagir bouton_annuler_Fnq à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
[/php]

Où ces évènements sont-ils gérés indépendamment ?

Car dans ce cas, on pourrais également désactiver les mouvements de la souris.

[php]
Tant que 1 != 2, lis
Temporise
ferme
[/php]

Ainsi, ça éviterais que cette boucle soit active en permanence et le programme serait "réellement" en pause.

descriptionBogue avec le verbe temporiser EmptyRE: Bogue avec le verbe temporiser

more_horiz
Les mouvements de la souris sont détectés sur la toile.

Le code avec le verbe temporise et la boucle infinie empeche juste ton livre de terminer.

Tu pourrais mettre :

Code:


Tant que 1 != 2, lis
attends 5 secondes
ferme


ou pire :

Code:


Tant que 1 != 2, lis
ferme


La notion d'évènements et l'utilisation du verbe temporiser sont indépendantes.

descriptionBogue avec le verbe temporiser EmptyRE: Bogue avec le verbe temporiser

more_horiz
Ainsi, l'intérêt d'ajouter le verbe Temporiser dans cette boucle :

[php]
Tant que 1 != 2, lis
ferme
[/php]

Est bien d'éviter qu'elle ne fasse des tours inutilement, non ?
Ainsi, tant qu'une touche n'est pas enfoncée ou que la souris n'est pas déplacée, la boucle reste figée :

[php]
Tant que 1 != 2, lis
Temporise
ferme
[/php]

Mais justement, si dans notre programme on ne traite pas le déplacement de la souris :
alors si on pouvait dire au verbe Temporiser de ne pas se débloquer dès que la toile repère un mouvement de souris, cela rendrait le verbe Temporiser encore plus efficace et utile, non ?

descriptionBogue avec le verbe temporiser EmptyRE: Bogue avec le verbe temporiser

more_horiz
Oui, ce que tu dis est juste.
L'idéal serait d'avoir un verbe "attendre indéfiniment" et ça serait plus simple à comprendre ?

descriptionBogue avec le verbe temporiser EmptyRE: Bogue avec le verbe temporiser

more_horiz
Dans mon idée, ce serait plus :

Temporiser : met le programme en pause sans prendre en compte aucuns évènements.

Attendre souris : met le programme en pause et se débloque lorsqu'un déplacement de la souris est repéré.

Attendre clavier : met le programme en pause et se débloque lorsqu’une touche est enfoncée.

Attendre souris et clavier : met le programme en pause et se débloque lorsqu'un déplacement de la souris est repéré ou lorsqu'une touche est enfoncée.

descriptionBogue avec le verbe temporiser EmptyRe: Bogue avec le verbe temporiser

more_horiz
privacy_tip Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
power_settings_newSe connecter pour répondre