[R] Simplification de conditions imbriquées

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

[R] Simplification de conditions imbriquées

#1

Message par JulienBoul »

https://www.autoitscript.fr/forum/viewt ... 311#p99354

Bonjour,

Je construit un script depuis un tit bout de temps avec des compétences limitées en programmation.

Pouvez vous m'aider à organiser mon script?
Dans l'idéal, je souhaiterai:
Si telle grappe de pixels figure à tel endroit,
alors exécuter telle action,
Sleep (100)
Si tel autre grappe de pixels figure à tel autre endroit,
alors exécuter telle autre action,
Sleep (100)
Sinon, redémarrer la vérification1.
Au bout de 10 vérifications (2 secondes minimum), alors, exécuter telle autre action. (on passe par l'intégration d'un compteur)
J'me demande si le DO-Until est adapté à mon cas de figure, à force j'ai tellement la tête dedans que je n'arrive pas à prendre du recul, à zéro.

Voici le script en question (la partie qui nous intéresse, sachant que mon script fait 300 lignes dont je dois enlever les infos confidentielles, j'espère que vous comprendrez que je peux pas tout envoyer... Je cherche juste le principe, j'adapterai après):
While 1
                 Do ; boite_bleue
         Sleep(1000) ;a enlever lorsque les switch fonctionneront car ça laisse à l'image le temps d'apparaitre mais si boucle, alors on pourra revérifier.
         $aCoord = _PixelColorAreaSearch(250, 220, 400, 400, @ScriptDir & "\reperes_visuels\boite_bleue2.png")
         If IsArray($aCoord) = True Then
            Sleep(500)
            MouseClick("left", $aCoord[0], $aCoord[1], 2, 0)
            Sleep(200)
            ExitLoop
         ElseIf IsArray($aCoord) = False Then
            Sleep(100)
            Do ; pièces (Gestion d'erreur car 2 icones possibles dans certains cas)
               $aCoord = _PixelColorAreaSearch(250, 215, 580, 400, @ScriptDir & "\reperes_visuels\pieces.png")
               If IsArray($aCoord) = True Then
                  Sleep(500)
                  $Line += 1 ; pour passer à la référence technique suivante
                  Relancerlescriptgeneral() ; ici on relance le script car on ne souhaite pas approfondir ce resultat de recherche.
                  ExitLoop
               ElseIf IsArray($aCoord) = False Then
                  Sleep(100)
               EndIf
            Until IsArray($aCoord) = True
         EndIf
      Until IsArray($aCoord) = True
   WEnd
@+ Julien.
Modifié en dernier par JulienBoul le mer. 21 déc. 2016 09:21, modifié 1 fois.
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: [..] Simplification de conditions imbriquées

#2

Message par mdanielm »

La question est imprécise mais peut-être le schéma suivant peut t'aider:

$nb =1
$done=false

while not $done and $nb<=10
    if C1 then
        A1
        $done=true
    endif

    if not $done and C2 then
        A2
        $done=true
    endif
   
    nb+=1
wend

if not $done then A3
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] Simplification de conditions imbriquées

#3

Message par JulienBoul »

Hello,

Merci, oui, comme tu dis, en fait j'ai pas mal de conditions imbriquées etc, c'est un peu vague. Bon, je vais essayer de créer des fonctions pour raccourcir mon code, ça ira déjà un peu mieux. En tout cas je me garde ton schéma organisationnel, je pourrais l'utiliser lorsque mon code sera plus simple que celui actuel (conditions imbriquées dans des conditions ne facilitent rien).

@+ et encore merci, je clôture, pas grand intéret pour la communauté.
Julien.
Répondre