La marche militaire
L'une des premières choses que j'ai faite, c'est de dresser mes algoblobs pour les faire marcher tous ensemble. Une dizaine d'algoblobs qui marchent au pas, ça impressionne toujours...
Tous ensemble !
Pour marcher tous ensemble, il faut juste avoir une dizaine d'algoblobs qui vont avoir des caractéristiques voisines. Si vous regardez l'animation ci dessous (lancez donc le son !), vous constaterez que les algoblobs :
- Ont tous la même abscisse
- Cette abscisse correspond à celle du premier problème de déplacement, avec les tests et les rebonds
- Ont des ordonnées régulièrement réparties
Pour arriver à répéter des opérations de la sorte, on va utiliser la boucle "tant que". Voyons comment elle fonctionne.
Répétez après moi !
La programmation, cela demande de la rigueur. Ce n'est pas une histoire de fabriquant de shampoing. Vous avez vu sur les bouteilles de shampoing ?
Appliquez le shampoing sur cheveux mouillé. Massez le cuir chevelu. Rincez. Répétez l'opération.
Donnez cette suite d'instruction à un algoblob ... il vous frictionnera le cuir chevelu sans cesse jusqu'à ce que la bouteille de shampoing soit vide. Il aurait fallu lui dire répétez l'opération une fois
Pour répéter la même tache plusieurs fois, nous allons utiliser une boucle while.
Il faudra que nous fassion attention aux éléments suivants :
- Quel est l'état de mon programme au début de ces répétitions
- Qu'est ce qui change au cours de chacune de ces répétitions
- Quant ces répétitions vont elle prendre fin (et vont elle bien prendre fin ?)
l'instruction while en python répète le bloc d'instruction qu'elle contient
tant que la condition n'est pas réalisée (while en anglais signifie "tant que")
while une_condition_est_vraie :
instruction1
instruction2
instruction3
autre_chose
Très souvent, on trouve une condition d'initialisation avant. Par exemple, voici le décompte d'un joueur de cache-cache. On peut distinguer :
-
l'initialisation avec
compteur = 1 - la condition de prolongation avec
compteur <= 100 - la modification dans la boucle avec
compteur = compteur + 1
Le J'arrive n'est affiché qu'une seule fois, après que l'on soit sorti de la boucle
- Éxécutez le code ci dessus
- Modifiez le code ci dessus pour avoir un décompte qui va de 100 à 0 au lieu de 1 à 100
- Le joueur de cache-cache triche un peu .... au début il compte de 1 en 1, et puis ensuite, quand il arrive à 20, il compte de 2 en 2... modifiez votre code en conséquence.
Une boucle while répète une suite d'opération tant qu'une condition est vérifié
La syntaxe est la suivante :
while une_condition_est_vraie :
instruction1
instruction2
instruction3
Mise en pratique
Vous allez faire l'exercice suivant, inspiré de cet exercice sur les boucles de France IOI
L'objectif est de construire une tour à l'aide de petits cubes en bois, sachant que la forme de cette tour consiste en un ensemble de grands cubes placés les uns au-dessus des autres. La base de la tour est un cube de taille 17×17×17, c'est-à-dire composé de 17×17×17 = 4 913 petits cubes. Sur ce cube est posé un autre cube de taille 15×15×15. Au-dessus de ce dernier se trouve un cube de 13×13×13. La tour continue ainsi jusqu'à atteindre le sommet, qui consiste en un cube de taille 1×1×1. On veut savoir combien il y a de cubes.
Seconde exercice : on a maintenant à disposition 10 000 cubes. On veut savoir quelle est la largeur maximale que l'on peut atteindre pour notre tour.
- Dans l'éditeur Python ci dessous, compléter avec la fonction while pour écrire le code qui permet de calculer le nombre total de cube.
- On change de problématique. On a à disposition un certain nombre de cubes. Ce nombre
sera demandé à l'utilisateur grâce à un appel à
int(input("Combien avons nous de cubes ?")). Votre programme devra donner la largeur maximale que notre tour pourra atteindre.
La marche des algoblobs
Nous allons maintenant passer à nos algoblobs pour les faire marcher de concert
Reprendre le premier programme
Nous allons reprendre le code du premier algoblob que nous avons fait naître, lorsqu'il était juste capable de se déplacer et de rebondir.
Nous allons le modifier pour que l'on puisse faire marcher plusieurs algoblobs en même temps. L'abscisse de tous les algoblobs sera la même, mais l'ordonnée va varier.
Cette fois ci, nous n'allons pas modifier la fonctionupdate mais la fonction draw.
En effet, c'est dans cette fonction que l'on va répéter le tracé de nos algoblobs.
Réfléchir avant d'agir
Pour nos algoblobs, nous voulons en tracer un certain nombre. Ils ont tous la même abscisse. L'ordonnée par contre va varier. On va commencer à 50 pour la première ordonnée, et chaque algoblob sera séparé de ses voisins par 50 pixels.
Il faudra donc répéter le tracé l'algoblob en partant de 50, en ajoutant 50 à chaque fois, et en arrétant lorsque l'on dépasse la hauteur.
Dans le code ci dessus, quels seront les parties à intégrer dans la boucle while ?
Utilisez votre éditeur pour faire la marche des algoblobs.
Voilà ! Vous avez réussi à faire une marche des algoblobs. Vous pouvez vous féliciter.
Éditeur Python