Votre algoblob jusqu'ici était tout en blanc. Mais qui a dit qu'ils étaient toujours blanc, qu'ils le seraient toujours ? Non, il peuvent voir la vie en couleur !
Première approche de la couleur
On va reprendre le programme python basique qui affichait un algoblob au centre de l'écran.
import p5
largeur = 500
hauteur = 500
abscisse = 250
ordonnee = 250
rayon = 20
def setup():
p5.size(largeur,hauteur)
def draw():
p5.background(0)
p5.circle(abscisse,ordonnee,rayon)
p5.run()
Il va suffire de modifier un tout petit peu ce programme pour pouvoir ajouter de la couleur.
Dans p5, la fonction fill
indique la couleur avec laquelle on va remplir les
objets qui seront dessinés par la suite. Par exemple, fill('white')
indique
que l'on va remplir en blanc les figures.
- Ouvrez l'éditeur avec lequel vous travaillez et recopiez le code ci dessus.
-
Entre
p5.background(0)
etp5.circle(...)
ajoutez la lignep5.fill('SeaGreen)
- Éxécutez le code.
Comme vous pouvez le constater, votre algoblob est maintenant vert. C'est l'une des façon de choisir les couleurs : en les appelant par leur nom. Ces noms sont en anglais et il y a 140 noms différents qui ont été standardisé. Vous pouvez les voir sur ce site par exemple
Notre problème va être de parcourir les 7 couleurs de l'arc en ciel.
Plusieurs couleurs
Pour pouvoir avoir plusieurs couleur, il va falloir stocker deux informations :
- la liste des couleurs
- savoir où nous en sommes dans la liste des couleurs.
La première chose que nous allons faire, c'est stocker la liste des couleurs.
Les listes en python
Une liste en python, c'est un ensemble d'objets réunis dans une même structure. Si on considère qu'une variable est une boîte dans laquelle on place un contenu, une liste est une étagère où l'on range ces boites. (notez bien qu'une étagère est une grosse boîte: une liste est une variable aussi).
Ce qui est appelé une liste en python est en général appelé un tableau dans les autres langages de programmation, du fait que l'on peut accéder au contenu à partir du numéro de la case de l'étagère. On parle d'ailleurs de tableaux dynamiques car la taille du tableau peut évoluer au cours du programme (ce qui n'est pas vrai par défaut pour les tableaux en C par exemple).
Comment crée t'on une liste ?
Pour créer une liste il suffit d'utiliser la notation avec les crochets
maListe=[]
On peut remplir la liste directement au moment de sa création. Vous savez par exemple qu'il faut manger 5 fruits et légumes par jour ? Voici une liste de légumes disponibles.
maListe=['carotte','patates','chou','navet','haricot']
On peut aussi ajouter du contenu dans une liste en utilisant la méthode append
qui
permet de rajouter un élément à la fin de la liste. Par exemple pour ajouter les courgettes dans
ma liste de légume :
maListe.append('courgettes')
Comment accède t'on aux éléments d'une liste ?
Là aussi, on utilise la notation avec les crochets pour accéder à un élément précis de la liste, par son numéro.
Vous vous attendiez peut être à voir patates comme affichage, qui est le second élément de la liste. Mais la liste est numérotée à partir de 0.
Il faut noter qu'un élément de la liste est accessible en lecture comme en écriture. On peut remplacer chou par poivron
maListe[2] = 'poivron'
Enlever un élément de la liste
Pour enlever un élément de la liste, on utilise la méthode pop
. Utilisée avec un argument,
elle retire l'élément qui a cet indice. Sans argument, elle retire le dernier élément de la liste.
maListe.pop() #retire 'courgettes'
maListe.pop(1) # retire 'patates'
- Dans le cadre python ci dessous, créer une liste d'éléments sur un sujet qui vous plait
- Affichez la liste en faisant
print(...)
(avec le nom de la liste). Vous afficherez la liste après chaque étape qui suit - Ajoutez quelques éléments
- Supprimer un élément dans la liste et l'élement de la fin
- Affichez un élément de la liste que vous choissisez
- Modifiez un élément de la liste de votre choix.
- Profitez. Amusez vous un peu à essayer ce que vous voulez. Mettez des variables dans votre liste, des listes de listes. Vous avez le droit de faire des erreurs !
- On crée une liste par
maliste=[]
(en mettant éventuellement un contenu) - on ajoute un élément à la fin de la liste par
maListe.append(element)
- on accède à l'élément d'indice i par
maListe[i]
pour le lire ou le modifier - on supprimme un élément de la liste en utilisant
maListe.pop()
(avec ou sans indice)
Mise en œuvre
Nous allons utiliser les 7 couleurs de l'arc en ciel comme on les définit habituellement :
- rouge
- orange
- jaune
- vert
- bleu
- violet
- indigo
Ce qui donne en anglais :
- red
- orange
- yellow
- green
- blue
- violet
- indigo
Dans l'éditeur ajoutez au début de votre programme une liste ( un tableau )
que vous nommerez couleurs
qui contient les chaines de caractère
de ces septs couleurs nommées
couleurs = ['red',...]
Il faut aussi ajouter une variable qui indique le numéro de la couleur sur lequel on se trouve. Comme il y a 7 couleurs, le numéro de la couleur ira de 0 à 6.
Dans l'éditeur, au début de votre programme ajoutez une variable
numCouleur
qui vaudra initialement 0 et qui contiendra dans notre programme
l'indice de la couleur dans le tableau
Nous avons maitenant les variables nécessaires : le tableau qui contient les couleurs et la variable qui indique la position dans le tableau. Il ne reste plus qu'à modifier le code pour que ce soit ces éléments qui indiquent la couleur de remplissage
Dans votre programme, remplacez la couleur 'SeaGreen' par la lecture de la couleur dans le tableau :
p5.fill(couleurs[numCouleur])
Ne reste plus maintenant qu'à gérer l'événement : au clic de souris, il faudra passer à la couleur suivante.
Si vous en avez besoin, vous pouvez relire la partie sur l'utilisation des événements pour gérer le clic de souris et la partie sur les tests pour gérer le retour de la couleur à 0.
Faîtes en sorte qu'un clic de souris passe à la couleur suivante. Pour cela,
-
Quand on clique, vous devez ajouter 1 à
numCouleur
- Si numCouleur arrive à 7, il faut le ramener à 0 (on a fait le tour)
Testez votre programme et validez le. À chaque clic de souris, la couleur doit changer.
Voilà ! vous avez réussi à faire changer de couleur votre algoblob. Mais vous n'êtes pas au bout de vos suprises... vous avez utilisé 7 couleurs. Vous en aviez 140 à votre disposition. Nous verrons comment nous pouvons en avoir ... 16 777 216 (oui, plus de 16 millions...).
Vous pouvez consulter une version javascript un peu enrichie de ces algoblobs de couleurs
Compléments
Remarque : pour faire le tour des numéros de couleurs de 0 à 6, vous pouvez utiliser un test,
comme vous avez été encouragé à le faire ci dessus.
Vous pouvez aussi utiliser l'opérateur %
(se lit modulo). Cet opérateur donne le
reste dans une division euclidienne. Par exemple, si on veut le reste de la division
par 7 d'une variable x
, on fera reste = x % 7
. Ce nombre sera toujours
entre 0 et 6 (c'est le reste d'une division par 7). Il est évident que 7%7 vaut 0. On peut donc
écrire numCouleur = numCouleur % 7
plutôt que de faire un test.
Si vous souhaitez réviser les tableaux, vous pouvez aussi consulter l'introduction aux tableaux sur france-ioi