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 :
(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 " title="Sad" />)
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 " title="Sad" />)