LaBouaBouate

Cours PowerShell #2 - En boucle en boucle en boucle

Consigne

Le script est maintenant pourvu d’une boucle qui permet au joueur d’avoir 10 tentatives maximum pour deviner le nombre aléatoire. Le script se termine si l’une des deux conditions est remplie :

À la fin du script, le nombre de tentatives est affiché avec les autres statistiques.

Résultats attendus

Exemple de victoire :

Deviner le nombre: 500
??? est plus grand que 500
[...]
Deviner le nombre: 560
VICTOIRE ! Vous avez deviné le nombre aléatoire

Nombre aléatoire : 560
Dernière réponse : 560
Tentatives       : 6

Exemple de défaite :

Deviner le nombre: 500
??? est plus grand que 500
[...]
Deviner le nombre: 608
??? est plus petit que 608
DEFAITE. Vous n'avez pas réussi à trouver le nombre aléatoire

Nombre aléatoire : 606
Dernière réponse : 608
Tentative        : 10

Étape par étape

  1. Mettre le code dans une boucle
  2. Ajouter un compteur de tentatives
  3. Sortir de la boucle au bout de 10 tentatives
  4. Affichage d’un message de défaite
  5. Affichage du nombre de tentatives

Mettre le code dans une boucle

Pour permettre au joueur d’avoir plusieurs tentatives, le plus simple est de mettre le code dans une boucle. Plusieurs types de boucles sont utilisables dans notre exemple, suivant notre condition de sortie.

Pour le script exemple, j’ai choisi la boucle do/until.

while ($answer -ne $random) { <#[...]#> }
do { <#[...]#> } while ($answer -ne $random)
do { <#[...]#> } until ($answer -eq $random)

Ajouter un compteur de tentatives

Cette étape se décompose en deux parties :

  1. hors de la boucle : initier le compteur en créant une nouvelle variable $i dont la valeur initiale est 0 (par exemple)
  2. dans la boucle : incrémenter la variable à chaque nouvelle tentative avec l’opérateur ++
$i = 0
do { 
    $i++
} until ($answer -eq $random)

Sortir de la boucle après 10 tentatives

Le plus simple est d’ajouter une deuxième condition de sortie à notre boucle do/until. Pour créer et ajouter cette deuxième condition, on peut se baser sur :

On arrive à la double condition suivante : “on reste dans la boucle jusqu’à ce que le joueur trouve le nombre aléatoire ou que le nombre de tentatives soit égal ou supérieur à 10”, que l’on peut ensuite ajouter à notre boucle do/until.

do {

} until ($answer -eq $random -or $i -ge 10)

Autre possibilité : la boucle For

Pour réaliser la boucle, le compteur et la condition de sortie en une seule commande, il est possible d’utiliser la boucle FOR. Celle-ci peut s’avérer très utile dans certains cas (comme celui-ci) mais reste très rare en PowerShell. Si cela vous intéresse, vous pouvez consulter la documentation disponible ici : à propos de For - PowerShell | Microsoft Learn.

Affichage d’un message de défaite

A la fin de la boucle, si le joueur n’a pas trouvé le nombre aléatoire, on affiche un message de défaite dans la console avec la commande Write-Host. La condition avant l’affichage du message permet d’éviter le double message “VICTOIRE” puis “DEFAITE”.

if ($answer -ne $random) { Write-Host "DEFAITE" }

Affichage du nombre de tentatives

Dans le PSCustomObject affiché à la fin, on ajoute une nouvelle propriété Count pour montrer le nombre de tentatives (variable $i) utilisées par le joueur.

[PSCustomObject]@{
    "Tentatives" = $i
} | Format-List

Correction

Voir le script complet

Commentaires