Bonjour,
j'ai un problème avec mon système de sauvegarde.
En effet, mon quadrillage correspond au casier "carte" et j'enregistre donc le contenu du casier dans un fichier .txt, à l'aide du greffon conduit.
Or, à la lecture de la sauvegarde, celle-ci est relativement longue à s'exécuter et surtout, elle ralentit énormément l'atelier.
Si bien, qu'à chaque fois que je lis ma sauvegarde, je suis ensuite obligé de redémarrer l'atelier.
Voici mes fonctions enregistrer et ouvrir :
[php]
Enregistrer_sous :
c :: conduit
indice1 est un nombre
indice2 est un nombre
temp est un nombre
chemin_sauvegarde est un texte
ligne <
- c.retourchariot()
début
("on vérifie si un quadrillage a été créé")
Si nombre_case == 0 alors lis
numéro_avertissement = 3
Tu vas vers Fenêtre_avertissement
Reviens
ferme
("Si l'utilisateur à cliqué sur le menu "Enregistrer_sous", on ouvre le sélectionneur de fichiers")
Si menu_enregistrer == faux alors lis
évoque c.sélectionneretenregistrer()
évoque c.fermer()
chemin_sauvegarde vaut c.nomfichiercomplet()
ferme
("Si le chemin d'accès est valide, on enregistre directement par dessus la sauvegarde précédente")
Si (c.fichierexiste(chemin_sauvegarde)) et (non(c.répertoire(chemin_sauvegarde))) alors lis
évoque c.enregistrer(chemin_sauvegarde)
ferme
("Si l'utilisateur à cliqué sur le menu "Enregistrer" et que le chemin d'accès est invalide, on ouvre le sélectionneur de fichiers")
Sinon, lis
évoque c.sélectionneretenregistrer()
ferme
chemin_sauvegarde vaut c.nomfichiercomplet()
("on sauvegarde le mini quadrillage")
évoque c.écrire(""+ nombre_case_quadrillage_tileset)
évoque c.écrire(ligne)
évoque c.écrire(""+ largeur_case_quadrillage_tileset)
évoque c.écrire(ligne)
évoque c.écrire(""+ hauteur_case_quadrillage_tileset)
évoque c.écrire(ligne)
("on sauvegarde les tiles contenus dans le mini quadrillage")
Mesure casier_tiles dans indice1
évoque c.écrire(""+ indice1)
évoque c.écrire(ligne)
Si indice1 != 0 alors lis
pour chaque indice1, lis
évoque c.écrire(""+ image de (casier_tiles{joker}))
évoque c.écrire(ligne)
évoque c.écrire(""+ dx de (casier_tiles{joker}))
évoque c.écrire(ligne)
évoque c.écrire(""+ dy de (casier_tiles{joker}))
évoque c.écrire(ligne)
évoque c.écrire(""+ x de (casier_tiles{joker}))
évoque c.écrire(ligne)
évoque c.écrire(""+ y de (casier_tiles{joker}))
évoque c.écrire(ligne)
ferme
ferme
("on sauvegarde le quadrillage")
évoque c.écrire(""+ taille_largeur_case)
évoque c.écrire(ligne)
évoque c.écrire(""+ taille_hauteur_case)
évoque c.écrire(ligne)
évoque c.écrire(""+ nombre_case_largeur)
évoque c.écrire(ligne)
évoque c.écrire(""+ nombre_case_hauteur)
évoque c.écrire(ligne)
("on écrit la sauvegarde de la carte")
Pour chaque nombre_case_hauteur, lis
Pour chaque nombre_case_largeur, lis
Si (carte{indice2}) != -5 alors lis
temp = numéro_tile de (copie_casier_tiles{(carte{indice2})})
Si temp <
= 9 alors lis
évoque c.écrire("00"+ temp)
ferme
Sinon si temp <
= 99 alors lis
évoque c.écrire("0"+ temp)
ferme
Sinon si temp <
= 999 alors lis
évoque c.écrire(temp)
ferme
ferme
Sinon évoque c.écrire("000")
incrémente indice2
ferme
évoque c.écrire(ligne)
ferme
évoque c.fermer()
menu_enregistrer = faux
Si numéro_avertissement == 5 alors tu vas vers Réinitialisation
Sinon, reviens
Ouvrir :
c :: conduit
mémo1 & mémo2 & mémo3 & mémo4 & mémo5 & mémo6 & mémo7 & mémo8 & mémo9 & mémo10 & mémo11 & mémo12 & mémo13 & mémo14 :: texte
num1 & num2 & num3 & num4 & num6 & num7 & num8 & num9 & num10 & num11 & num12 & num13 & num14 :: nombre
indice1 est un nombre
indice2 est un nombre
i est un nombre
j est un nombre
début
Si nombre_case != 0 alors lis
numéro_avertissement = 5
Tu vas vers Fenêtre_avertissement
ferme
évoque c.sélectionneretouvrir()
mémo1 vaut c.lireligne()
mémo2 vaut c.lireligne()
mémo3 vaut c.lireligne()
mémo4 vaut c.lireligne()
Tu convertis mémo1 en num1
Tu convertis mémo2 en num2
Tu convertis mémo3 en num3
Tu convertis mémo4 en num4
sauvegarde_on = vrai
("on redessine le mini quadrillage")
nombre_case_quadrillage_tileset = num1
largeur_case_quadrillage_tileset = num2
hauteur_case_quadrillage_tileset = num3
Parcours Découpage_tileset
Observe Découpage_tileset
("on remet les tiles dans le mini quadrillage")
indice1 = num4
Si indice1 != 0 alors lis
Pour chaque indice1, lis
mémo5 vaut c.lireligne()
mémo6 vaut c.lireligne()
mémo7 vaut c.lireligne()
mémo8 vaut c.lireligne()
mémo9 vaut c.lireligne()
Tu convertis mémo6 en num6
Tu convertis mémo7 en num7
Tu convertis mémo8 en num8
Tu convertis mémo9 en num9
chemin_tile = mémo5
dx_tile_sauv = num6
dy_tile_sauv = num7
x_tile_sauv = num8
y_tile_sauv = num9
Parcours Affichage_tiles avec i
Observe Affichage_tiles
incrémente i
ferme
ferme
("on récupère la taille du quadrillage")
mémo10 vaut c.lireligne()
mémo11 vaut c.lireligne()
mémo12 vaut c.lireligne()
mémo13 vaut c.lireligne()
Tu convertis mémo10 en num10
Tu convertis mémo11 en num11
Tu convertis mémo12 en num12
Tu convertis mémo13 en num13
taille_largeur_case = num10
taille_hauteur_case = num11
nombre_case_largeur = num12
nombre_case_hauteur = num13
("on calcule le nombre de cases à afficher en fonction des dimensions de la fenêtre de scrolling")
nombre_case_largeur_effectif = entier (largeur de cadre / taille_largeur_case)
nombre_case_hauteur_effectif = entier (hauteur de cadre / taille_hauteur_case)
Si nombre_case_largeur_effectif >
nombre_case_largeur alors nombre_case_largeur_effectif = nombre_case_largeur
Si nombre_case_hauteur_effectif >
nombre_case_hauteur alors nombre_case_hauteur_effectif = nombre_case_hauteur
nombre_case = nombre_case_hauteur_effectif*nombre_case_largeur_effectif
nombre_case_total = nombre_case_hauteur*nombre_case_largeur
("on recréer la sauvegarde de la carte")
pour chaque nombre_case_total, lis
ajoute -5 dans carte
ferme
("on restaure le casier copie_casier_tiles")
Pour chaque nombre_case_hauteur, lis
Pour chaque nombre_case_largeur, lis
mémo14 vaut c.nlire(3)
Tu convertis mémo14 en num14
Si num14 != 0 alors lis
Parcours Sauvegarde_drag avec num14, j
Observe Sauvegarde_drag
ferme
incrémente j
ferme
("on avance le curseur de 2 caractères pour éviter de lire le retour à la ligne")
mémo14 vaut c.nlire(2)
ferme
évoque c.fermer()
("on fait réagir chaque tile du mini-quadrillage au drag&drop")
pour chaque nombre_case_quadrillage_tileset, lis
Fais réagir casier_tiles{joker} à "clic souris" pour Drag
ferme
("on redessine la carte")
Va vers Affichage_quadrillage
[/php]
Je crois que la conversion d'un texte en nombre est assez lente mais ce n'est sans doute pas le seul problème.
Help ?
j'ai un problème avec mon système de sauvegarde.
En effet, mon quadrillage correspond au casier "carte" et j'enregistre donc le contenu du casier dans un fichier .txt, à l'aide du greffon conduit.
Or, à la lecture de la sauvegarde, celle-ci est relativement longue à s'exécuter et surtout, elle ralentit énormément l'atelier.
Si bien, qu'à chaque fois que je lis ma sauvegarde, je suis ensuite obligé de redémarrer l'atelier.
Voici mes fonctions enregistrer et ouvrir :
[php]
Enregistrer_sous :
c :: conduit
indice1 est un nombre
indice2 est un nombre
temp est un nombre
chemin_sauvegarde est un texte
ligne <
- c.retourchariot()
début
("on vérifie si un quadrillage a été créé")
Si nombre_case == 0 alors lis
numéro_avertissement = 3
Tu vas vers Fenêtre_avertissement
Reviens
ferme
("Si l'utilisateur à cliqué sur le menu "Enregistrer_sous", on ouvre le sélectionneur de fichiers")
Si menu_enregistrer == faux alors lis
évoque c.sélectionneretenregistrer()
évoque c.fermer()
chemin_sauvegarde vaut c.nomfichiercomplet()
ferme
("Si le chemin d'accès est valide, on enregistre directement par dessus la sauvegarde précédente")
Si (c.fichierexiste(chemin_sauvegarde)) et (non(c.répertoire(chemin_sauvegarde))) alors lis
évoque c.enregistrer(chemin_sauvegarde)
ferme
("Si l'utilisateur à cliqué sur le menu "Enregistrer" et que le chemin d'accès est invalide, on ouvre le sélectionneur de fichiers")
Sinon, lis
évoque c.sélectionneretenregistrer()
ferme
chemin_sauvegarde vaut c.nomfichiercomplet()
("on sauvegarde le mini quadrillage")
évoque c.écrire(""+ nombre_case_quadrillage_tileset)
évoque c.écrire(ligne)
évoque c.écrire(""+ largeur_case_quadrillage_tileset)
évoque c.écrire(ligne)
évoque c.écrire(""+ hauteur_case_quadrillage_tileset)
évoque c.écrire(ligne)
("on sauvegarde les tiles contenus dans le mini quadrillage")
Mesure casier_tiles dans indice1
évoque c.écrire(""+ indice1)
évoque c.écrire(ligne)
Si indice1 != 0 alors lis
pour chaque indice1, lis
évoque c.écrire(""+ image de (casier_tiles{joker}))
évoque c.écrire(ligne)
évoque c.écrire(""+ dx de (casier_tiles{joker}))
évoque c.écrire(ligne)
évoque c.écrire(""+ dy de (casier_tiles{joker}))
évoque c.écrire(ligne)
évoque c.écrire(""+ x de (casier_tiles{joker}))
évoque c.écrire(ligne)
évoque c.écrire(""+ y de (casier_tiles{joker}))
évoque c.écrire(ligne)
ferme
ferme
("on sauvegarde le quadrillage")
évoque c.écrire(""+ taille_largeur_case)
évoque c.écrire(ligne)
évoque c.écrire(""+ taille_hauteur_case)
évoque c.écrire(ligne)
évoque c.écrire(""+ nombre_case_largeur)
évoque c.écrire(ligne)
évoque c.écrire(""+ nombre_case_hauteur)
évoque c.écrire(ligne)
("on écrit la sauvegarde de la carte")
Pour chaque nombre_case_hauteur, lis
Pour chaque nombre_case_largeur, lis
Si (carte{indice2}) != -5 alors lis
temp = numéro_tile de (copie_casier_tiles{(carte{indice2})})
Si temp <
= 9 alors lis
évoque c.écrire("00"+ temp)
ferme
Sinon si temp <
= 99 alors lis
évoque c.écrire("0"+ temp)
ferme
Sinon si temp <
= 999 alors lis
évoque c.écrire(temp)
ferme
ferme
Sinon évoque c.écrire("000")
incrémente indice2
ferme
évoque c.écrire(ligne)
ferme
évoque c.fermer()
menu_enregistrer = faux
Si numéro_avertissement == 5 alors tu vas vers Réinitialisation
Sinon, reviens
Ouvrir :
c :: conduit
mémo1 & mémo2 & mémo3 & mémo4 & mémo5 & mémo6 & mémo7 & mémo8 & mémo9 & mémo10 & mémo11 & mémo12 & mémo13 & mémo14 :: texte
num1 & num2 & num3 & num4 & num6 & num7 & num8 & num9 & num10 & num11 & num12 & num13 & num14 :: nombre
indice1 est un nombre
indice2 est un nombre
i est un nombre
j est un nombre
début
Si nombre_case != 0 alors lis
numéro_avertissement = 5
Tu vas vers Fenêtre_avertissement
ferme
évoque c.sélectionneretouvrir()
mémo1 vaut c.lireligne()
mémo2 vaut c.lireligne()
mémo3 vaut c.lireligne()
mémo4 vaut c.lireligne()
Tu convertis mémo1 en num1
Tu convertis mémo2 en num2
Tu convertis mémo3 en num3
Tu convertis mémo4 en num4
sauvegarde_on = vrai
("on redessine le mini quadrillage")
nombre_case_quadrillage_tileset = num1
largeur_case_quadrillage_tileset = num2
hauteur_case_quadrillage_tileset = num3
Parcours Découpage_tileset
Observe Découpage_tileset
("on remet les tiles dans le mini quadrillage")
indice1 = num4
Si indice1 != 0 alors lis
Pour chaque indice1, lis
mémo5 vaut c.lireligne()
mémo6 vaut c.lireligne()
mémo7 vaut c.lireligne()
mémo8 vaut c.lireligne()
mémo9 vaut c.lireligne()
Tu convertis mémo6 en num6
Tu convertis mémo7 en num7
Tu convertis mémo8 en num8
Tu convertis mémo9 en num9
chemin_tile = mémo5
dx_tile_sauv = num6
dy_tile_sauv = num7
x_tile_sauv = num8
y_tile_sauv = num9
Parcours Affichage_tiles avec i
Observe Affichage_tiles
incrémente i
ferme
ferme
("on récupère la taille du quadrillage")
mémo10 vaut c.lireligne()
mémo11 vaut c.lireligne()
mémo12 vaut c.lireligne()
mémo13 vaut c.lireligne()
Tu convertis mémo10 en num10
Tu convertis mémo11 en num11
Tu convertis mémo12 en num12
Tu convertis mémo13 en num13
taille_largeur_case = num10
taille_hauteur_case = num11
nombre_case_largeur = num12
nombre_case_hauteur = num13
("on calcule le nombre de cases à afficher en fonction des dimensions de la fenêtre de scrolling")
nombre_case_largeur_effectif = entier (largeur de cadre / taille_largeur_case)
nombre_case_hauteur_effectif = entier (hauteur de cadre / taille_hauteur_case)
Si nombre_case_largeur_effectif >
nombre_case_largeur alors nombre_case_largeur_effectif = nombre_case_largeur
Si nombre_case_hauteur_effectif >
nombre_case_hauteur alors nombre_case_hauteur_effectif = nombre_case_hauteur
nombre_case = nombre_case_hauteur_effectif*nombre_case_largeur_effectif
nombre_case_total = nombre_case_hauteur*nombre_case_largeur
("on recréer la sauvegarde de la carte")
pour chaque nombre_case_total, lis
ajoute -5 dans carte
ferme
("on restaure le casier copie_casier_tiles")
Pour chaque nombre_case_hauteur, lis
Pour chaque nombre_case_largeur, lis
mémo14 vaut c.nlire(3)
Tu convertis mémo14 en num14
Si num14 != 0 alors lis
Parcours Sauvegarde_drag avec num14, j
Observe Sauvegarde_drag
ferme
incrémente j
ferme
("on avance le curseur de 2 caractères pour éviter de lire le retour à la ligne")
mémo14 vaut c.nlire(2)
ferme
évoque c.fermer()
("on fait réagir chaque tile du mini-quadrillage au drag&drop")
pour chaque nombre_case_quadrillage_tileset, lis
Fais réagir casier_tiles{joker} à "clic souris" pour Drag
ferme
("on redessine la carte")
Va vers Affichage_quadrillage
[/php]
Je crois que la conversion d'un texte en nombre est assez lente mais ce n'est sans doute pas le seul problème.
Help ?