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 du moment : -23%
(Black Friday) Apple watch Apple SE GPS 44mm ...
Voir le deal
199 €

descriptionBogue à  la fermeture d'une fenêtre EmptyBogue à la fermeture d'une fenêtre

more_horiz
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Je suis victime d'un bogue très gênant.
Je programme un éditeur de niveaux pour le bombernotte.
Voici comment sa fonctionne :
L'utilisateur créer un quadrillage grâce à ma fenêtre : Fenêtre_nouveau_quadrillage.
Il indique ensuite le chemin d'accès de ses images (tiles) grâce à la fenêtre : Fenêtre_tiles.
Les images sont alors chargées sur la toile.

Les chemins d'accès sont ajoutés dans un casier.
Ainsi, si l'utilisateur veut importer de nouvelles images, les nouveaux chemins d'accès s'ajoutent à la suite dans le casier.
Les images s'affichent alors à la suite des autres sur la toile.

Ceci fonctionne très bien, à un détail près :
je ne peut pas fermer la fenêtre "Fenêtre_tiles" !
Si l'utilisateur sélectionne des images, ferme la fenêtre et la ré-ouvre pour choisir d'autres images alors mon programme plante.(Il fait des aller-retours incompréhensibles entre mon paragraphe "Récupération_tiles" et "Affichage_tiles")

Voici mon code :

Code:


Grands rôles :

("Fenêtre principale")
Fenêtre_principale est un formulaire, hauteur vaut 50, largeur vaut 360, titre vaut "Editeur de cartes"

("Fenêtre nouveau quadrillage")
Fenêtre_nouveau_quadrillage est un formulaire, hauteur vaut 120, largeur vaut 300, titre vaut "Nouveau quadrillage", visible vaut "non", x vaut 450, y vaut 255
txt_Fnq1 est une étiquette, texte vaut "Nombre de cases en largeur :
", x vaut 10, y vaut 10
txt_Fnq2 est une étiquette, texte vaut "Nombre de cases en hauteur :
", x vaut 10, y vaut 30
txt_Fnq3 est une étiquette, texte vaut "Taille des cases :
", x vaut 10, y vaut 50
choix_case_largeur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 10
choix_case_hauteur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 30
choix_taille_case est un sélecteur, valeurs vaut "", x vaut 200, y vaut 50
bouton_valider_Fnq est un bouton, texte vaut "Valider", x vaut 70, y vaut 90
bouton_annuler_Fnq est un bouton, texte vaut "Annuler", x vaut 160, y vaut 90

("Fenêtre_tiles")
Fenêtre_tiles est un formulaire, hauteur vaut 300, largeur vaut 330, titre vaut "Charger des tiles", visible vaut "non", x vaut 450, y vaut 255
txt_Ft1 est une étiquette, texte vaut "Entrez le chemin complet des tiles à charger :
", x vaut 10, y vaut 10
chemin1 est un champ, taille vaut 37, texte vaut "", x vaut 10, y vaut 40
chemin2 est un champ, taille vaut 37, texte vaut "", x vaut 10, y vaut 80
chemin3 est un champ, taille vaut 37, texte vaut "", x vaut 10, y vaut 120
chemin4 est un champ, taille vaut 37, texte vaut "", x vaut 10, y vaut 160
chemin5 est un champ, taille vaut 37, texte vaut "", x vaut 10, y vaut 200
txt_Ft2 est une étiquette, texte vaut "", x vaut 10, y vaut 230
bouton_valider_Ft est un bouton, texte vaut "Valider", x vaut 85, y vaut 260
bouton_annuler_Ft est un bouton, texte vaut "Annuler", x vaut 175, y vaut 260
casier_champs est un casier de texte

("Menus")
menu1 est un menu, texte vaut "Fichier"
menu1s1 est un sousmenu, texte vaut "Créer un nouveau quadrillage"
menu1s2 est un sousmenu, texte vaut "Importer des tiles"
menu1s3 est un sousmenu, texte vaut "Quitter"

("Quadrillage")
taille_case est un nombre <
- 0
nombre_case_largeur est un nombre <
- 0
nombre_case_hauteur est un nombre <
- 0
nombre_case est un nombre <
- 0
nombre_case_hauteur_effectif est un nombre <
- 0
nombre_case_largeur_effectif est un nombre <
- 0

("Toile")
fond est une toile , hauteur vaut 800 , largeur vaut 800, couleur vaut "blanc"
bordure_haute est un nombre <
- 25
bordure_gauche est un rectangle, x = 0, y = bordure_haute, position vaut 1, hauteur vaut (hauteur de fond - (bordure_haute*2)), largeur vaut 150

("Acteurs quadrillages")
case est un texte
grille est un casier de rectangle
contour_case est un texte
grille2 est un casier de rectangle
contour_case2 est un texte
grille3 est un casier de rectangle
nombre_case2 est un nombre
casier_tiles est un casier de graphique

Fenêtre_principale :

Rôles :

Actions :

Tu projettes Fenêtre_principale
Tu ajoutes menu1 dans Fenêtre_principale
Tu ajoutes menu1s1 & menu1s2 & menu1s3 dans menu1
Tu fais réagir Fenêtre_principale à "clic souris" pour Fermer_fenêtre_principale
Tu fais réagir menu1s1 à "clic souris" pour Fenêtre_nouveau_quadrillage
Tu fais réagir menu1s2 à "clic souris" pour Fenêtre_tiles
Tu fais réagir menu1s3 à "clic souris" pour Fermer_fenêtre_principale

tant que 1 est différent de 2, lis
temporise
ferme

Fenêtre_nouveau_quadrillage :

Rôles :

§ i est un nombre
Actions :

visible de Fenêtre_nouveau_quadrillage vaut "oui"
Tu ajoutes txt_Fnq1 & txt_Fnq2 & txt_Fnq3 & choix_case_largeur & choix_case_hauteur & choix_taille_case & bouton_valider_Fnq & bouton_annuler_Fnq dans Fenêtre_nouveau_quadrillage

Pour i de 1 à 100, lis
Tu ajoutes i +"|" dans valeurs@choix_case_largeur
Tu ajoutes i +"|" dans valeurs@choix_case_hauteur
Tu ajoutes i +"|" dans valeurs@choix_taille_case
Tu fermes

Tu fais réagir Fenêtre_nouveau_quadrillage à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_annuler_Fnq à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_valider_Fnq à "clic souris" pour Générer_quadrillage

Fenêtre_tiles :

Rôles :

Actions :

visible de Fenêtre_tiles vaut "oui"
Tu ajoutes txt_Ft1 & chemin1 & chemin2 & chemin3 & chemin4 & chemin5 & txt_Ft2 & bouton_valider_Ft & bouton_annuler_Ft dans Fenêtre_tiles

texte de chemin1 = ""
texte de chemin2 = ""
texte de chemin3 = ""
texte de chemin4 = ""
texte de chemin5 = ""

Tu fais réagir Fenêtre_tiles à "clic souris" pour Fermer_fenêtre_tiles
Tu fais réagir bouton_annuler_Ft à "clic souris" pour Fermer_fenêtre_tiles
Tu fais réagir bouton_valider_Ft à "clic souris" pour Récupération_tiles

Fermer_fenêtre_nouveau_quadrillage :

Rôles :

Actions :

visible de Fenêtre_nouveau_quadrillage vaut "non"
Tu reviens

Fermer_fenêtre_tiles :

Rôles :

Actions :

visible de Fenêtre_tiles vaut "non"
Tu reviens

Fermer_fenêtre_principale :

Rôles :

Actions :

Efface la toile
Tu termines

Générer_quadrillage :

Rôles :

§ valeur1 est un texte
§ valeur2 est un texte
§ valeur3 est un texte
Actions :

valeur1 = valeur@choix_case_largeur
Tu convertis valeur1 en nombre_case_largeur
valeur2 = valeur@choix_case_hauteur
Tu convertis valeur2 en nombre_case_hauteur
valeur3 = valeur@choix_taille_case
Tu convertis valeur3 en taille_case

nombre_case_hauteur_effectif = entier ((hauteur de fond - (bordure_haute*2)) / taille_case)
nombre_case_largeur_effectif = entier ((largeur de fond - largeur de bordure_gauche) / taille_case)
visible de Fenêtre_nouveau_quadrillage vaut "non"

Tu vas vers affichage_toile


Récupération_tiles :

Rôles :

Actions :

Si nombre_case == 0 alors lis
texte de txt_Ft2 vaut "Vous devez avoir créer un quadrillage avant d'importer des tiles"
x de txt_Ft2 vaut 10
Reviens
ferme
Si texte de chemin1 est vide alors lis
texte de txt_Ft2 vaut "Veuillez remplir le premier champ"
x de txt_Ft2 vaut 85
Reviens
ferme

Tu ajoutes texte de chemin1 dans casier_champs
Si texte de chemin2 est non vide alors tu ajoutes texte de chemin2 dans casier_champs
Si texte de chemin3 est non vide alors tu ajoutes texte de chemin3 dans casier_champs
Si texte de chemin4 est non vide alors tu ajoutes texte de chemin4 dans casier_champs
Si texte de chemin5 est non vide alors tu ajoutes texte de chemin5 dans casier_champs

Tu vas vers Affichage_tiles

Affichage_toile :

Rôles :

Actions :

Si nombre_case_hauteur_effectif >
nombre_case_hauteur alors nombre_case_hauteur_effectif = nombre_case_hauteur
Si nombre_case_largeur_effectif >
nombre_case_largeur alors nombre_case_largeur_effectif = nombre_case_largeur
nombre_case = nombre_case_hauteur_effectif*nombre_case_largeur_effectif

Efface la toile
Projette le fond & bordure_gauche
Va vers Affichage_quadrillage

Affichage_quadrillage :

Rôles :

i est un nombre
j est un nombre

xx est un nombre <
- (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case))/2) + largeur de bordure_gauche
yy est un nombre <
- (((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute

§ ligne_complète est un nombre

Actions :

("ici on dessine des cases pleines")
pour i de 1 à nombre_case_hauteur_effectif, lis
pour j de 1 à nombre_case_largeur_effectif, lis
tu concatènes i + "_" + j dans case
Crée case un acteur rectangle
x de création vaut xx
y de création vaut yy
hauteur de création vaut taille_case
largeur de création vaut taille_case
couleur de création vaut "rouge"
plein de création vaut "oui"
position de création vaut 1
ajoute création dans grille
Projette création
yy = yy + taille_case
si yy est plus grand que ((((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute + (nombre_case_hauteur_effectif * taille_case)) - taille_case alors lis
yy = (((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute
xx = xx + taille_case
ferme
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_case) + ((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case)) alors lis
xx !
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case))/2) + largeur de bordure_gauche
ferme
ferme
ferme

xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case))/2) + largeur de bordure_gauche
yy = (((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute

("ici on dessine le contour des cases")
pour i de 1 à nombre_case_hauteur_effectif, lis
pour j de 1 à nombre_case_largeur_effectif, lis
tu concatènes "contour_case_" + i + ".
" + j dans contour_case
Crée contour_case un acteur rectangle
x de création vaut xx
y de création vaut yy
hauteur de création vaut taille_case
largeur de création vaut taille_case
couleur de création vaut "noir"
position de création vaut 2
ajoute création dans grille2
Projette création
yy = yy + taille_case
si yy est plus grand que ((((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute + (nombre_case_hauteur_effectif * taille_case)) - taille_case alors lis
yy = (((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute
xx = xx + taille_case
ferme
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_case) + ((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case)) alors lis
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case))/2) + largeur de bordure_gauche
ferme
ferme
ferme

("ici on dessine le mini quadrillage de la bordure gauche")
xx = x de bordure_gauche + 1
yy = y de bordure_gauche + 1

ligne_complète = entier (((x de bordure_gauche + 1) + (largeur de bordure_gauche - 1)) / taille_case)
nombre_case2 = (entier (10 / ligne_complète) * ligne_complète)
Si nombre_case2 <
10 alors nombre_case2 = nombre_case2 * 2

pour i de 1 à nombre_case2, lis
tu concatènes "contour_case_" + i dans contour_case2
Crée contour_case2 un acteur rectangle
x de création vaut xx
y de création vaut yy
hauteur de création vaut taille_case
largeur de création vaut taille_case
couleur de création vaut "noir"
position de création vaut 2
ajoute création dans grille3
Projette création
xx = xx + taille_case
si xx est plus grand que (x de bordure_gauche + 1) + (largeur de bordure_gauche - 1) - taille_case alors lis
xx = x de bordure_gauche + 1
yy = yy + taille_case
ferme
si yy est plus grand que (y de bordure_gauche + 1) + (hauteur de bordure_gauche - 1) - taille_case alors lis
yy = y de bordure_gauche + 1
ferme
ferme

Tant que vrai, lis
Temporise
Ferme

Affichage_tiles :

Rôles :

§ i est un nombre
nombre_tiles_init est un nombre
nombre_tiles est un nombre
§ tile est un texte
xx est un nombre <
- x de bordure_gauche + 1
yy est un nombre <
- y de bordure_gauche + 1
xxx est un nombre
yyy est un nombre
Actions :

Mesure casier_champs dans nombre_tiles

pour i de nombre_tiles_init à nombre_tiles - 1, lis
Tu concatènes "tile_" + i dans tile
Crée tile un acteur graphique
image de création vaut (casier_champs{i})
Si nombre_tiles_init != 0 alors lis
xx = xxx
yy = yyy
ferme
x de création vaut xx
y de création vaut yy
position de création vaut 3
Tu ajoutes création dans casier_tiles
Projette création
xx = xx + taille_case
si xx est plus grand que (x de bordure_gauche + 1) + (largeur de bordure_gauche - 1) - taille_case alors lis
xx = x de bordure_gauche + 1
yy = yy + taille_case
ferme
xxx = xx
yyy = yy
ferme

nombre_tiles_init = nombre_tiles



(Il manque une fonction "sélectionner tout" dans l'interprète linotte tiens :;
): )

C'est très gênant car ça limite le nombre d'images que l'on peut importer.
(A moins de faire une fenêtre immense pour le choix des images <img src=" title="Sad" />)

descriptionBogue à  la fermeture d'une fenêtre EmptyRE: Bogue à la fermeture d'une fenêtre

more_horiz
Je soupçonne un gestion des événements, grand coupable de tes malheurs.
ça me rappelle un post de momo112. mais je ne le retrouve pas....

descriptionBogue à  la fermeture d'une fenêtre EmptyRE: Bogue à la fermeture d'une fenêtre

more_horiz
Je m'en souvient, c'était dans une version de noteradio de la branche 2.x, j'avais du créer des passerelles pour qu'il n’initialise pas les évènement plusieurs fois car sinon il appelait plusieurs fois les paragraphes, mais je n'ai pas encore regardé l'exemple de Wam donc je ne peux pas dire si c'est ça.

-----
Edit :
Il semblerai que ça soit le même problème, il faut que tu vérifie que l'utilisateur ne passe pas deux fois par l'initialisation des évènements.
Le problème viendrai de l'initialisation des évènement des paragraphes : Fenêtre_nouveau_quadrillage et Fenêtre_tiles qui peuvent être activé de nombreuses fois à partir de la fenêtre principale.
Pour ça au moins deux possibilités s'offrent à toi :

- Initialiser tous tes évènement d'un coup au début de ton livre et bien vérifier qu'ils sont dans un endroit qui ne sera lu qu'une seule fois par l'interpréteur (je fais ça avec Plumes Mêlées) (tu peux les mettre avec les autres avant ta boucle infinie dans le premier paragraphe).
- Utiliser un système de passerelle qui permet d'initialiser les évènement que si nécessaires une seule fois en vérifiant le passage avec un drapeau ou une autre variable (je fais ça dans noteradio 2, dans les versions 3 aussi mais en un peux différent)

-----
Edit 2 :
Encore une fois je milite l'utilisation de cette instruction :
Tu explores "coloriser com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"

Pour bien programmer les interfaces et pour que tout le monde l'ai de la même façon, tu peux bien sur choisir un autre thème (dans l'exemple du décorateur.liv) mais tous les thèmes n'ont pas les mêmes éléments (différentes tailles, absence des menus dans le thème GTK), le thème nimbus est selon moi le plus complet tout en gardant une interface agréable.

descriptionBogue à  la fermeture d'une fenêtre EmptyRE: Bogue à la fermeture d'une fenêtre

more_horiz
Bonsoir Momo,

Ta méthode ne semble pas fonctionner avec des boutons. Elle est utilisable uniquement avec des éléments de la toile.

Pour ceci :
Tu explores "coloriser com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"

Je ne l'utilise pas car il change également l'apparence de l'atelier et je le trouve moins lisible.

descriptionBogue à  la fermeture d'une fenêtre EmptyRE: Bogue à la fermeture d'une fenêtre

more_horiz
normalement ça fonctionne aussi avec les boutons, mais je ne sais pas pourquoi là l'interpréteur ne tient pas compte des évènements une fois bougés, là ça sort de mes compétences désolé <img src=" title="Sad" />

descriptionBogue à  la fermeture d'une fenêtre EmptyRE: Bogue à la fermeture d'une fenêtre

more_horiz
Je pense avoir trouvé le problème de ma solution, essaie si avec ce code le problème est résolue :

Code:

Grands rôles :

("Fenêtre principale")
Fenêtre_principale est un formulaire, hauteur vaut 50, largeur vaut 360, titre vaut "Editeur de cartes"

("Fenêtre nouveau quadrillage")
Fenêtre_nouveau_quadrillage est un formulaire, hauteur vaut 120, largeur vaut 300, titre vaut "Nouveau quadrillage", visible vaut "non", x vaut 450, y vaut 255
txt_Fnq1 est une étiquette, texte vaut "Nombre de cases en largeur :
", x vaut 10, y vaut 10
txt_Fnq2 est une étiquette, texte vaut "Nombre de cases en hauteur :
", x vaut 10, y vaut 30
txt_Fnq3 est une étiquette, texte vaut "Taille des cases :
", x vaut 10, y vaut 50
choix_case_largeur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 10
choix_case_hauteur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 30
choix_taille_case est un sélecteur, valeurs vaut "", x vaut 200, y vaut 50
bouton_valider_Fnq est un bouton, texte vaut "Valider", x vaut 70, y vaut 90
bouton_annuler_Fnq est un bouton, texte vaut "Annuler", x vaut 160, y vaut 90

("Fenêtre_tiles")
Fenêtre_tiles est un formulaire, hauteur vaut 300, largeur vaut 330, titre vaut "Charger des tiles", visible vaut "non", x vaut 450, y vaut 255
txt_Ft1 est une étiquette, texte vaut "Entrez le chemin complet des tiles à charger :
", x vaut 10, y vaut 10
chemin1 est un champ, taille vaut 37, texte vaut "", x vaut 10, y vaut 40
chemin2 est un champ, taille vaut 37, texte vaut "", x vaut 10, y vaut 80
chemin3 est un champ, taille vaut 37, texte vaut "", x vaut 10, y vaut 120
chemin4 est un champ, taille vaut 37, texte vaut "", x vaut 10, y vaut 160
chemin5 est un champ, taille vaut 37, texte vaut "", x vaut 10, y vaut 200
txt_Ft2 est une étiquette, texte vaut "", x vaut 10, y vaut 230
bouton_valider_Ft est un bouton, texte vaut "Valider", x vaut 85, y vaut 260
bouton_annuler_Ft est un bouton, texte vaut "Annuler", x vaut 175, y vaut 260
casier_champs est un casier de texte

("Menus")
menu1 est un menu, texte vaut "Fichier"
menu1s1 est un sousmenu, texte vaut "Créer un nouveau quadrillage"
menu1s2 est un sousmenu, texte vaut "Importer des tiles"
menu1s3 est un sousmenu, texte vaut "Quitter"

("Quadrillage")
taille_case est un nombre <
- 0
nombre_case_largeur est un nombre <
- 0
nombre_case_hauteur est un nombre <
- 0
nombre_case est un nombre <
- 0
nombre_case_hauteur_effectif est un nombre <
- 0
nombre_case_largeur_effectif est un nombre <
- 0

("Toile")
fond est une toile , hauteur vaut 800 , largeur vaut 800, couleur vaut "blanc"
bordure_haute est un nombre <
- 25
bordure_gauche est un rectangle, x = 0, y = bordure_haute, position vaut 1, hauteur vaut (hauteur de fond - (bordure_haute*2)), largeur vaut 150

("Acteurs quadrillages")
case est un texte
grille est un casier de rectangle
contour_case est un texte
grille2 est un casier de rectangle
contour_case2 est un texte
grille3 est un casier de rectangle
nombre_case2 est un nombre
casier_tiles est un casier de graphique

Fenêtre_principale :

Rôles :

Actions :

Tu projettes Fenêtre_principale
Tu ajoutes menu1 dans Fenêtre_principale
Tu ajoutes menu1s1 & menu1s2 & menu1s3 dans menu1
Tu fais réagir Fenêtre_principale à "clic souris" pour Fermer_fenêtre_principale
Tu fais réagir menu1s1 à "clic souris" pour Fenêtre_nouveau_quadrillage
Tu fais réagir menu1s2 à "clic souris" pour Fenêtre_tiles
Tu fais réagir menu1s3 à "clic souris" pour Fermer_fenêtre_principale

Tu ajoutes txt_Ft1 & chemin1 & chemin2 & chemin3 & chemin4 & chemin5 & txt_Ft2 & bouton_valider_Ft & bouton_annuler_Ft dans Fenêtre_tiles
Tu fais réagir Fenêtre_tiles à "clic souris" pour Fermer_fenêtre_tiles
Tu fais réagir bouton_annuler_Ft à "clic souris" pour Fermer_fenêtre_tiles
Tu fais réagir bouton_valider_Ft à "clic souris" pour Récupération_tiles
Tu ajoutes txt_Fnq1 & txt_Fnq2 & txt_Fnq3 & choix_case_largeur & choix_case_hauteur & choix_taille_case & bouton_valider_Fnq & bouton_annuler_Fnq dans Fenêtre_nouveau_quadrillage
Tu fais réagir Fenêtre_nouveau_quadrillage à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_annuler_Fnq à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_valider_Fnq à "clic souris" pour Générer_quadrillage
visible@Fenêtre_nouveau_quadrillage vaut "oui"
visible@Fenêtre_tiles vaut "oui"
visible@Fenêtre_nouveau_quadrillage vaut "non"
visible@Fenêtre_tiles vaut "non"
tant que 1 est différent de 2, lis
temporise
ferme

Fenêtre_nouveau_quadrillage :

Rôles :

§ i est un nombre
Actions :

visible de Fenêtre_nouveau_quadrillage vaut "oui"

Pour i de 1 à 100, lis
Tu ajoutes i +"|" dans valeurs@choix_case_largeur
Tu ajoutes i +"|" dans valeurs@choix_case_hauteur
Tu ajoutes i +"|" dans valeurs@choix_taille_case
Tu fermes
Tu reviens

Fenêtre_tiles :

Rôles :

Actions :

visible de Fenêtre_tiles vaut "oui"

texte de chemin1 = ""
texte de chemin2 = ""
texte de chemin3 = ""
texte de chemin4 = ""
texte de chemin5 = ""
tu reviens

Fermer_fenêtre_nouveau_quadrillage :

Rôles :

Actions :

visible de Fenêtre_nouveau_quadrillage vaut "non"
Tu reviens

Fermer_fenêtre_tiles :

Rôles :

Actions :

visible de Fenêtre_tiles vaut "non"
Tu reviens

Fermer_fenêtre_principale :

Rôles :

Actions :

Efface la toile
Tu termines

Générer_quadrillage :

Rôles :

§ valeur1 est un texte
§ valeur2 est un texte
§ valeur3 est un texte
Actions :

valeur1 = valeur@choix_case_largeur
Tu convertis valeur1 en nombre_case_largeur
valeur2 = valeur@choix_case_hauteur
Tu convertis valeur2 en nombre_case_hauteur
valeur3 = valeur@choix_taille_case
Tu convertis valeur3 en taille_case

nombre_case_hauteur_effectif = entier ((hauteur de fond - (bordure_haute*2)) / taille_case)
nombre_case_largeur_effectif = entier ((largeur de fond - largeur de bordure_gauche) / taille_case)
visible de Fenêtre_nouveau_quadrillage vaut "non"

Tu vas vers affichage_toile


Récupération_tiles :

Rôles :

Actions :

Si nombre_case == 0 alors lis
texte de txt_Ft2 vaut "Vous devez avoir créer un quadrillage avant d'importer des tiles"
x de txt_Ft2 vaut 10
Reviens
ferme
Si texte de chemin1 est vide alors lis
texte de txt_Ft2 vaut "Veuillez remplir le premier champ"
x de txt_Ft2 vaut 85
Reviens
ferme

Tu ajoutes texte de chemin1 dans casier_champs
Si texte de chemin2 est non vide alors tu ajoutes texte de chemin2 dans casier_champs
Si texte de chemin3 est non vide alors tu ajoutes texte de chemin3 dans casier_champs
Si texte de chemin4 est non vide alors tu ajoutes texte de chemin4 dans casier_champs
Si texte de chemin5 est non vide alors tu ajoutes texte de chemin5 dans casier_champs

Tu vas vers Affichage_tiles

Affichage_toile :

Rôles :

Actions :

Si nombre_case_hauteur_effectif >
nombre_case_hauteur alors nombre_case_hauteur_effectif = nombre_case_hauteur
Si nombre_case_largeur_effectif >
nombre_case_largeur alors nombre_case_largeur_effectif = nombre_case_largeur
nombre_case = nombre_case_hauteur_effectif*nombre_case_largeur_effectif

Efface la toile
Projette le fond & bordure_gauche
Va vers Affichage_quadrillage

Affichage_quadrillage :

Rôles :

i est un nombre
j est un nombre

xx est un nombre <
- (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case))/2) + largeur de bordure_gauche
yy est un nombre <
- (((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute

§ ligne_complète est un nombre

Actions :

("ici on dessine des cases pleines")
pour i de 1 à nombre_case_hauteur_effectif, lis
pour j de 1 à nombre_case_largeur_effectif, lis
tu concatènes i + "_" + j dans case
Crée case un acteur rectangle
x de création vaut xx
y de création vaut yy
hauteur de création vaut taille_case
largeur de création vaut taille_case
couleur de création vaut "rouge"
plein de création vaut "oui"
position de création vaut 1
ajoute création dans grille
Projette création
yy = yy + taille_case
si yy est plus grand que ((((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute + (nombre_case_hauteur_effectif * taille_case)) - taille_case alors lis
yy = (((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute
xx = xx + taille_case
ferme
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_case) + ((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case)) alors lis
xx !
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case))/2) + largeur de bordure_gauche
ferme
ferme
ferme

xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case))/2) + largeur de bordure_gauche
yy = (((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute

("ici on dessine le contour des cases")
pour i de 1 à nombre_case_hauteur_effectif, lis
pour j de 1 à nombre_case_largeur_effectif, lis
tu concatènes "contour_case_" + i + ".
" + j dans contour_case
Crée contour_case un acteur rectangle
x de création vaut xx
y de création vaut yy
hauteur de création vaut taille_case
largeur de création vaut taille_case
couleur de création vaut "noir"
position de création vaut 2
ajoute création dans grille2
Projette création
yy = yy + taille_case
si yy est plus grand que ((((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute + (nombre_case_hauteur_effectif * taille_case)) - taille_case alors lis
yy = (((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute
xx = xx + taille_case
ferme
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_case) + ((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case)) alors lis
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case))/2) + largeur de bordure_gauche
ferme
ferme
ferme

("ici on dessine le mini quadrillage de la bordure gauche")
xx = x de bordure_gauche + 1
yy = y de bordure_gauche + 1

ligne_complète = entier (((x de bordure_gauche + 1) + (largeur de bordure_gauche - 1)) / taille_case)
nombre_case2 = (entier (10 / ligne_complète) * ligne_complète)
Si nombre_case2 <
10 alors nombre_case2 = nombre_case2 * 2

pour i de 1 à nombre_case2, lis
tu concatènes "contour_case_" + i dans contour_case2
Crée contour_case2 un acteur rectangle
x de création vaut xx
y de création vaut yy
hauteur de création vaut taille_case
largeur de création vaut taille_case
couleur de création vaut "noir"
position de création vaut 2
ajoute création dans grille3
Projette création
xx = xx + taille_case
si xx est plus grand que (x de bordure_gauche + 1) + (largeur de bordure_gauche - 1) - taille_case alors lis
xx = x de bordure_gauche + 1
yy = yy + taille_case
ferme
si yy est plus grand que (y de bordure_gauche + 1) + (hauteur de bordure_gauche - 1) - taille_case alors lis
yy = y de bordure_gauche + 1
ferme
ferme

Tant que vrai, lis
Temporise
Ferme

Affichage_tiles :

Rôles :

§ i est un nombre
nombre_tiles_init est un nombre
nombre_tiles est un nombre
§ tile est un texte
xx est un nombre <
- x de bordure_gauche + 1
yy est un nombre <
- y de bordure_gauche + 1
xxx est un nombre
yyy est un nombre
Actions :

Mesure casier_champs dans nombre_tiles

pour i de nombre_tiles_init à nombre_tiles - 1, lis
Tu concatènes "tile_" + i dans tile
Crée tile un acteur graphique
image de création vaut (casier_champs{i})
Si nombre_tiles_init != 0 alors lis
xx = xxx
yy = yyy
ferme
x de création vaut xx
y de création vaut yy
position de création vaut 3
Tu ajoutes création dans casier_tiles
Projette création
xx = xx + taille_case
si xx est plus grand que (x de bordure_gauche + 1) + (largeur de bordure_gauche - 1) - taille_case alors lis
xx = x de bordure_gauche + 1
yy = yy + taille_case
ferme
xxx = xx
yyy = yy
ferme

nombre_tiles_init = nombre_tiles


ps : pour tout sélectionner dans l'atelier, tu peux utiliser "Ctrl + A"

descriptionBogue à  la fermeture d'une fenêtre EmptyRE: Bogue à la fermeture d'une fenêtre

more_horiz
Sa fonctionne <img src=" title="Smile" />
Merci momo.

Par contre, sa reste une solution temporaire étant donné que toutes les fenêtres s'affichent au démarrage du logiciel, avant de devenir invisible.

Mais vu que cpc est dans l'IHM, j'ai dans l'espoir que ce problème sera résolu avec la prochaine version <img src=" title="Smile" />

descriptionBogue à  la fermeture d'une fenêtre EmptyRE: Bogue à la fermeture d'une fenêtre

more_horiz
Oui, la solution "simple" donne ce petit désagrément, ça me le fait aussi dans plumes mêlées. J'attends aussi l'évolution de l'IHM pour pouvoir faire encore plus de choses avec linotte <img src=" title="Smile" />

descriptionBogue à  la fermeture d'une fenêtre EmptyRe: Bogue à la fermeture d'une fenêtre

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