Skip to content

API Basic Do fr

Codex edited this page Sep 21, 2026 · 2 revisions

Do / Loop / While / Until / Repeat

ClassicUO • Basic

Do accepte un contrôle avant ou après le corps. While poursuit si vrai ; Until poursuit jusqu’à vrai. Repeat … Until est la forme historique à contrôle final.

Syntaxe exacte

Do While condition
    statements
Loop
Do Until condition
    statements
Loop
Do
    statements
Loop While condition
Do
    statements
Loop Until condition
Do
    statements
Loop
Repeat
    statements
Until condition
Continue Do
Exit Do
Break

Paramètres

  • condition / While / Until — Expression booléenne numérique 0/False ou 1/True. While continue si vrai, Until sort si vrai. Réévaluation à chaque contrôle ; le texte n’est pas interprété comme Boolean.
  • position / Repeat — Après Do, la condition peut éviter le premier passage. Après Loop ou Until de Repeat, au moins un passage a lieu. Un seul emplacement de condition est autorisé. Do … Loop sans condition exige une sortie explicite.
  • statements / exit — Corps. Continue Do atteint le prochain contrôle ; Exit Do quitte le Do ou Repeat le plus proche. Break quitte la boucle la plus proche de tout type. RETURN termine toute la procédure/fonction.

Retour

Do, Loop, Repeat, Until et Exit Do ne renvoient rien. Main renvoie explicitement Integer 1,33,83 dans les exemples : des compteurs combinés, pas des résultats booléens de commande.

Comportement

  • La préparation associe les blocs et vérifie les transferts. Deux conditions, au début et à la fin du même Do, produisent SC020. Le moteur évalue à la position choisie et répète selon While/Until.
  • Continue Do vérifie aussi la condition finale d’une boucle à contrôle final ; sinon il revient à l’en-tête. Les Finally quittés s’exécutent exactement une fois avant le transfert.
  • Repeat exécute d’abord : vérifiez les tableaux vides avant d’entrer. Aucune expiration implicite. Pour attendre le jeu, ajoutez Wait et échéance ; pause/arrêt restent actifs.
  • Une condition LOOP UNTIL peut combiner plusieurs tests : (A) OrElse (B) OrElse (C) termine la boucle dès qu’un test réussit ; (A) AndAlso (B) exige les deux. Les parenthèses forment des groupes. Utilisez une expression composée, pas plusieurs clauses UNTIL. OrElse et AndAlso évitent les tests inutiles. Pour un grand ensemble, parcourez une List ou un tableau dans votre fonction. Quitter la boucle ne désactive pas UO.Follow : appelez UO.Follow(0), par exemple dans Finally. Le tableau stopConditions de Follow fournit des contrôles en arrière-plan sans cette boucle.

Exemples

1. Avant ou après

# ready=True satisfait déjà Until. Do Until ready ne passe pas : before=0. Le second contrôle suit l’incrément, donc after=1. Main renvoie before*10+after=1.
Option Explicit On
Sub Main()
    Var ready = True
    Var before = 0
    Var after = 0
    Do Until ready
        before += 1
    Loop
    Do
        after += 1
    Loop Until ready
    Return before * 10 + after
End Sub

Explication des paramètres et du déroulement:

ready=True satisfait déjà Until. Do Until ready ne passe pas : before=0. Le second contrôle suit l’incrément, donc after=1. Main renvoie before*10+after=1.

2. Tentatives limitées et nettoyage

# attempts part de 0 et augmente à chaque passage. Les deux premiers Continue Do exécutent Finally puis contrôlent attempts<4. À la troisième tentative Exit Do exécute aussi Finally. attempts=3, cleanup=3 : résultat 33. Il s’agit d’une simulation locale, pas de tentatives réseau réelles.
Option Explicit On
Sub Main()
    Var attempts = 0
    Var cleanup = 0
    Do
        Try
            attempts += 1
            If attempts < 3 Then
                Continue Do
            End If
            Exit Do
        Finally
            cleanup += 1
        End Try
    Loop While attempts < 4
    Return attempts * 10 + cleanup
End Sub

Explication des paramètres et du déroulement:

attempts part de 0 et augmente à chaque passage. Les deux premiers Continue Do exécutent Finally puis contrôlent attempts<4. À la troisième tentative Exit Do exécute aussi Finally. attempts=3, cleanup=3 : résultat 33. Il s’agit d’une simulation locale, pas de tentatives réseau réelles.

3. Boucle historique avec sentinelle

# values=[3,5,0] est non vide. Repeat lit la cellule, avance index et cumule total. Until arrête au zéro ou à la longueur ; OrElse évite le second contrôle si zéro est trouvé. total=8, index=3 donnent 83.
Option Explicit On
Sub Main()
    Dim values[2]
    values[0] = 3
    values[1] = 5
    values[2] = 0
    Var index = 0
    Var value = 0
    Var total = 0
    Repeat
        value = values[index]
        index += 1
        total += value
    Until (value = 0) OrElse (index >= GetArrayLength(values))
    Return total * 10 + index
End Sub

Explication des paramètres et du déroulement:

values=[3,5,0] est non vide. Repeat lit la cellule, avance index et cumule total. Until arrête au zéro ou à la longueur ; OrElse évite le second contrôle si zéro est trouvé. total=8, index=3 donnent 83.

4. Trois raisons indépendantes de s’arrêter

# Simulation locale sans attente ni paquets de jeu : hp=100 représente la santé, leaderVisible=True la visibilité et elapsed=0 le temps écoulé en millisecondes. Chaque passage ajoute 250 à elapsed et retire 10 à hp. Au sixième passage, hp=40 : le premier test est vrai, les suivants sont ignorés. Main renvoie 1500 millisecondes, pas true. En jeu, lisez les valeurs actuelles et ajoutez une attente, comme dans l’exemple UO.Follow.
Option Explicit On
Sub Main()
    Var hp = 100
    Var leaderVisible = True
    Var elapsed = 0
    Do
        elapsed += 250
        hp -= 10
    Loop Until (hp <= 40) OrElse (Not leaderVisible) OrElse (elapsed >= 30000)
    Return elapsed
End Sub

Explication des paramètres et du déroulement:

Simulation locale sans attente ni paquets de jeu : hp=100 représente la santé, leaderVisible=True la visibilité et elapsed=0 le temps écoulé en millisecondes. Chaque passage ajoute 250 à elapsed et retire 10 à hp. Au sixième passage, hp=40 : le premier test est vrai, les suivants sont ignorés. Main renvoie 1500 millisecondes, pas true. En jeu, lisez les valeurs actuelles et ajoutez une attente, comme dans l’exemple UO.Follow.


en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic

Clone this wiki locally