[R] Réduction du code et aide pour image

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

[R] Réduction du code et aide pour image

#1

Message par ApoKLypsWarrior »

Bonjour,

Je reviens vous voir car j'ai un deuxième "problème". Entre guillemet car mon code fonctionne parfaitement, mais encore une fois il prend de la place, et réduire un code c'est toujours plus pratique.
Comme dernièrement grâce à vous je suis passé de 5500 lignes à 800.

Voici mon précédent post : http://www.autoitscript.fr/forum/viewto ... =3&t=13247

________________________________________

Cette fois-ci, je viens vous voir car mon programme doit lire un fichier ".ini" et utiliser les données reçu.

Voici le code en question, qui pour le moment ne prend pas tant de place, mais par la suite en prendra plus de 1000 lignes une fois terminé, et ça environ 25 fois...
► Afficher le texte
Voilà, à la base j'ai créé les variables "$gPosx" et "$hPosx" afin de les utiliser dans une boucle For et en faire une formule générale comme nous avions fait sur mon précédent post. Or, après quelques réflexion, je n'ai pas réussi à trouver. C'est donc ici que je viens demander de l'aide.

J'ai également un autre problème. Vous avez déjà du le remarqué, si une arme est choisi alors il l'applique l'image ".jpg" sur une autre image ".jpg" qui est en arrière plan.

Code : Tout sélectionner

$Pic = GUICtrlCreatePic(@ProgramFilesDir & "\Low Cost BSGO\images\Cylon\Nidhogg\Nidhogg.jpg", 0, 0, 537, 441, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetState($Pic, $GUI_DISABLE)
Afin que l'image de l'arme puisse être visible, je suis obligé de la créer deux fois. N'y aurait-il pas une autre solution ?

Je vous remercie d'avance.

Cordialement,
Apo.
Modifié en dernier par ApoKLypsWarrior le jeu. 26 févr. 2015 16:57, modifié 1 fois.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#2

Message par orax »

Est-ce qu'il y aura beaucoup de $gPos et $hPos ? Si c'est le cas, une solution est de rentrer les valeurs dans un tableau.
► Afficher le texte
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#3

Message par ApoKLypsWarrior »

Effectivement l'utilisation d'un tableau serai pas mal. Cela réduira un peu le code, mais ce n'est pas le principal :?
Il faudrait réussir à réduire la boucle For.

En tout cas, merci orax pour ton aide.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#4

Message par orax »

► Afficher le texte
$ghPos[$i][0] = $gPos...
$ghPos[$i][1] = $hPos...
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#5

Message par ZDS »

Ca va paraître con comme question, mais pourquoi tu as à chaque fois deux fois la même ligne? Tu veux absolument dédoubler tes images pour une raison particulière?

Code : Tout sélectionner

GUICtrlCreatePic(@ProgramFilesDir & "\Low Cost BSGO\images\Cylon\Nidhogg\Arme " & $i & "\CMM.jpg", $ghPos[$i][0], $ghPos[$i][1], 46, 40)
GUICtrlCreatePic(@ProgramFilesDir & "\Low Cost BSGO\images\Cylon\Nidhogg\Arme " & $i & "\CMM.jpg", $ghPos[$i][0], $ghPos[$i][1], 46, 40)
Pour gagner en clarté dans ton code (et pas pour gagner en taille car ce serait une économie de bout de chandelles), une bonne pratique est de réduire les chemins vers les dossiers que tu utilises le plus.
Et aussi tu peux factoriser les suffixes des chemins vers les images vu que tu les utilises aussi dans ta SDD et justement tester l'existence du fichier :
► Afficher le texte
A bientôt !

EDIT: J'ai compris en relisant ton message, par rapport au dédoublement. Il y a une alternative, c'est de connaitre l'identifiant de l'image (tableau $pics) et de la modifier avec la fonction GUICtrlSetImage(controlID,filename,iconname,icontype). N'ayant pas de contexte clairement utilisable dans ton topic, je ne peux pas t'aider plus. Ca serait bien que (comme dans ton précédent post) tu proposes le code complet et fonctionnel, quitte à fournir quelques images de test dans un fichier joint.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#6

Message par ApoKLypsWarrior »

Bonjour,

Ecoutez, je suis bluffé par vos talents, j'en apprend de jour en jour sur ce site ! Ça marche à la perfection. Ça me fera déjà beaucoup beaucoup moins de ligne à coder.

Voici un code testable avec en fichier joint les images. Pensez à rediriger les images, je pense que ce sera nécessaire.
► Afficher le texte
Je rappel que le problème restant étant la "double création" d'image pour que celle-ci soit visible.
Si vous voyez quelque chose qui vous piques les yeux, n'hésitez pas ;)
Fichiers joints
Test.rar
(71.36 Kio) Téléchargé 60 fois
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#7

Message par ZDS »

En fait, dans ton code, tu recrées un cadre et tout ce qui va avec (dont l'image); deux fois en plus. Alors que tu pourrais changer uniquement l'image du conteneur (le cadre que tu obtiens avec GUICtrlCreatePic) au lieu de créer des trucs qui deviennent gros et inutilisables (car recouvert). Je me suis amusé à cliquer à tout va, ton code a explosé en taille mémoire ^^

Je te corrige ça au plus vite. Mais avant, je voudrai savoir si il ne te manque pas des trucs. Genre, tu ne peux changer que le premier canon de ton Nidhogg ? Ce n'est pas très pratique de cliquer sur un menu en haut pour avoir je ne sais combien de sous menus visibles. Autant changer une arme en cliquant sur l'arme non?

Une autre bonne pratique serait de sauver les infos dans le fichier INI uniquement à la demande (là tu pourrais te servir de ton menu en haut), ou bien automatiquement en quittant. Je pars sur cette idée, sauf si tu préfères absolument que ce soit fait comme tu l'as créé.

Une dernière chose, n'hésite surtout pas à factoriser ton code, en utilisant des fonctions (quand les bouts de code sont répétés avec juste des paramètres qui changent c'est souvent la chose à faire) et en utilisant des tableaux (quand les éléments que tu utilises sont de même nature, comme les N sous-menus).

Je te prépare un truc aux petits oignons, à tout à l'heure ^^

EDIT : Arf, j'avais pas vu, il manque pas des images pour les armes 2 à 8 ?
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#8

Message par ApoKLypsWarrior »

Merci pour cette super réponse rapide !

Et non négatif, les images sont bien dans le fichier .rar.

Pour les canons, effectivement il n'est possible pour le moment de changer qu'un canon. C'est une version "Alpha". Je la prépare avec d'abord toute les bonnes formules avant de commencer à coder tout le reste qui va prendre beaucoup de temps. Je préfère partir sur une bonne base que de faire vite et au final tout retaper.
Une autre bonne pratique serait de sauver les infos dans le fichier INI uniquement à la demande (là tu pourrais te servir de ton menu en haut), ou bien automatiquement en quittant. Je pars sur cette idée, sauf si tu préfères absolument que ce soit fait comme tu l'as créé.
Alors, pourquoi ne pas sauver à la demande. Car c'est tout simplement une partie de mon programme qui consiste à sauvegarder une configuration de vaisseau en fonction de ce que veut l'utilisateur. Ensuite, en fonction de l'item choisi avec son niveau et le niveau désiré on repart sur un calcul. Voir mon premier post.
Sauvegarder automatiquement en quittant est bien possible oui.
Ce n'est pas très pratique de cliquer sur un menu en haut pour avoir je ne sais combien de sous menus visibles. Autant changer une arme en cliquant sur l'arme non?
Ahah ! La question est là. Comment faire ? Intégrer un ContextMenu sur l'image ?

En te remerciant encore une fois.

Cordialement,
Apo.
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#9

Message par ZDS »

Première version sans sauvegarde (pour l'instant)
Low BGSO.zip
(76.28 Kio) Téléchargé 64 fois
Je m'occupe de la suite dans la soirée (là j'ai un impératif IRL ^^)

A bientôt !

PS: Ça fait sans doute beaucoup de lignes, mais ce sont majoritairement des commentaires. Et si tu veux cabler sur les images de ton dossier de base "program files", oublie pas de changer la ligne 13 (là c'est le dossier dans lequel le script est qui est pris en compte, plus pratique pour moi)
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#10

Message par ApoKLypsWarrior »

Woow :shock:

C'est du magnifique travail ! Je vous avoue ne pas encore comprendre le tout, j'ai compris comment ça fonctionnait mais la mise en page du code est compliqué (pour le moment). Mais je suis heureux, vous m'apprenez les tableaux, qui jusqu'à maintenant était un vrai casse tête pour moi.

Pour la fonction de sauvegarde, le mieux serai quelle sauvegarde automatiquement à la fermeture de la GUI.

Auriez-vous une solution également pour la sélection des niveaux ?

Pour le moment nous sommes sur les armes, mais lorsque je vais entamer les coques, ordinateurs et les moteurs, je vais donc devoir créer une autre boucle avec un $DATA remplacé par $DATAcoques par exemple ? Ou il est possible de faire tout en un ?

Cordialement,
Apo.
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#11

Message par ZDS »

Tu as raison, il vaut mieux cloisonner les infos. Renommer le $DATA actuel en $DATA_armes et le $elements en $elements_armes, puis gérer $DATA_coques et $elements_coques.
J'ai rajouté un autre truc depuis, le fait de pouvoir faire un clic gauche pour afficher les menus.

Par contre, pour les niveaux, je n'ai pas du tout compris le fonctionnement.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#12

Message par ApoKLypsWarrior »

Pour chaque arme il y a un niveau. L'utilisateur choisi le niveau de l'arme (qu'il a lui) de 1 à 15. Puis le niveau désiré c'est le niveau que l'utilisateur veut.
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#13

Message par ZDS »

Ah, donc pour chaque slot d'armes il y a un niveau en plus? Ce n'est pas une valeur globale, mais chaque emplacement peut avoir à la fois un type (long ou moyen) et un niveau (de 1 à 15) c'est ça? Ton fichier de config est donc légèrement incomplet. Je vais t'envoyer une version modifiée dans la soirée, dis moi ce que tu en penses.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#14

Message par ApoKLypsWarrior »

Ahh .. J'attend avec impatience alors :mrgreen:
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#15

Message par ZDS »

Voila. Je te laisse continuer à partir de là, mais je pense te donner une bonne base de départ. Avec un peu de logique tu pourras copier/coller la plupart du code pour te faire un équivalent avec les coques ou autres éléments.
Low BSGO.zip
(113.62 Kio) Téléchargé 74 fois
Par contre, je pense que c'est une mauvaise idée de faire des morceaux par si par là puis prévoir de les mettre en place sur de plus grosses surfaces. Au contraire, cela permet de se rendre compte directement des lacunes de certains choix.

Par exemple, je me suis permis de "deviner" que les 8 slots d'armes pouvaient supporter toutes les armes disponibles. Si ce n'est pas le cas, il faudra prévoir une autre SDD pour dire où peut aller quoi (genre un tableau de relations, ce qui alourdira le programme forcément pas mal en terme de code, mais pas de beaucoup en perf).

C'est pour ça que dans cette version, il n'y a pas de menus pour chaque slot d'arme, mais UN SEUL menu, qui s'adapte en fonction de l'arme cliquée (mise à jour des textes pour le type et le niveau déjà sélectionné, mise en gras des menuitems correspondants).

Bonne chance pour la suite !

PS: J'ai retouché les images à la va vite avec PhotoShop pour avoir les CLM/CMM de toutes les armes, mieux vaut que tu les améliores (c'est loin d'être parfait).
PS2 : J'ai aussi séparé les torchons et les serviettes en plusieurs SDD. Mélanger les guictrlcreatepic et les guictrlcreatemenu/menuitem n'était pas une bonne idée, même si ce sont tous des composants AutoIt.
PS3 : Je me rends compte que j'utilise SDD assez souvent sans forcément que tout le monde sache de quoi je parle ^^ SDD = Structure De Données (genre un tableau, un objet, un struct, etc...)
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
ApoKLypsWarrior
Niveau 2
Niveau 2
Messages : 16
Enregistré le : jeu. 19 févr. 2015 01:48
Status : Hors ligne

Re: [..] Réduction du code et aide pour image

#16

Message par ApoKLypsWarrior »

... Là c'est un tout autre niveau. Il va falloir que je lise et relise le code pour tout comprendre.
Ne restez pas trop loin, je risque d'avoir des questions.

Je te tiens à vous remerciez pour ce superbe travail.. C'est que du bonheur.

Merci ! :P

Edit : Je vais vous demander un dernier effort. Après multiple tentative, je ne parviens pas à mettre le menu des niveaux désiré, comme celui-ci que l'on choisi sur chaque arme. j'arrive à l'afficher, mais ça bloque lorsque je clique sur Niveau désiré n°12 par exemple, le Niveau est affecté. Les deux sont liés en fait.
J'essai par la même occasion de comprendre votre script, qui pour moi, est très compliqué. Je ne suis pas encore très à l'aise avec les tableaux, j'essaie de me faire une image mais c'est compliqué. Pour vous ça peut paraître logique (vu la vitesse à la quelle vous avez coder ceci), mais pour moi c'est encore flou.

Je vais donc vous demander de me faire cette fameuse partie du Niveau désiré. Je garde mes modifications actuelles et je regarderai les votre afin de comprendre pourquoi et comment faire.

Cordialement,
Apo.
Répondre