La téléportation
Mon tout premier algoblob m'avait fasciné. Mais je n'avais pas encore vu les possibilités. Non seulement il se déplaçait, mais il était capable de réagir. Il possédait des pouvoirs que je ne soupçonnais pas, comme celui ... de se téléporter. Il suffisait que je clique sur l'écran pour que cela arrive ! Pouvoir que seuls peuvent posséder des créatures algorithmiques. J'ai appris plus tard que certains appelaient ça le pouvoir du goto
Kirk à l'Entreprise, téléportation
Votre premier algoglob a appris à se déplacer. Mais vous l'avez juste regardé. Et si vous pouviez interagir avec ?
Les événements
Par définition, un événement est Tout ce qui se produit, arrive ou apparaît. Et dans le cadre des interactions avec un ordinateur, il peut y avoir beaucoup d'événements. Le tic de l'horloge du processeur, un mouvement de souris, une action sur le clavier, etc.
On peut, avec la bibliothèque Pyxel gérer un certain nombre d'événements. Par exemple, on peut savoir si une touche du clavier est enfoncée ou non, ou si un bouton de la souris est cliqué.
Comment ça fonctionne
Nous allons placer dans la fonction update du code de notre algoblob des tests pour savoir si un événement s'est produit.
En effet, certaines fonctions prédéfinies de Pyxel réagissent à des évènements et nous permettent de savoir s'ils se sont produits.
Par exemple, la fonction pyxel.btnp permet de savoir si un bouton ou une touche de souris est enfoncé.
La syntaxe exacte est la suivante : pyxel.btnp(code) où code est le code de la touche ou du bouton que l'on veut tester.
La fonction renvoie True si la touche est enfoncée, False sinon. Voici les codes correspondants aux boutons de souris :
- Le bouton gauche de la souris :
pyxel.MOUSE_BUTTON_LEFT - Le bouton droit de la souris :
pyxel.MOUSE_BUTTON_RIGHT - Le bouton du milieu de la souris :
pyxel.MOUSE_BUTTON_MIDDLE
- Reprenez le code de l'exercice sur les mouvements et les tests
-
Ajoutez dans la fonction
updateun test pour savoir si le bouton gauche de la souris est enfoncé. Si c'est le cas, changez l'abscisse et l'ordonnée de l'algoblob pour des valeurs aléatoires. - Éxécutez le code pour vérifier qu'il est correct.
Code à ajouter
Entre la fin de la fonction draw et le lancement de la boucle principale
par p5.run(), ajoutez le code suivant :
if pyxel.btn(pyxel.MOUSE_BUTTON_LEFT):
# Mettez ici votre code pour changer l'abscisse et l'ordonnée de l'algoblob
...
Par défaut, dans une fenêtre Pyxel, la souris n'a pas de curseur visible. Pour le rendre visible, il faut ajouter l'instruction
pyxel.mouse(True) juste après l'initialisation de la fenêtre graphique par pyxel.init
Que va t'il se passer ?
À chaque clic de souris, la fonction mouse_clicked
sera appelée et elle va changer l'abscisse et l'ordonnée pour des nombres aléatoires.
Faisons varier les plaisirs
Vous avez entré et testé votre code. Essayons maintenant de rendre les choses un peu plus intéressantes.
- Au lieu d'une téléportation, faites une modification alétoire de la vitesse
- Au lieu d'une modification aléatoire, faites un rebond (l'algoblob repart dans l'autre sens)
-
Au lieu d'un rebond, positionnez l'algoblob à l'endroit où se trouve la souris (les coordonnées de la souris
sont dans des variables
pyxel.mouse_xetpyxel.mouse_yqui sont des variables prédéfinies de Pyxel) - Concevez un 5ème effet possible, entièrement de votre choix.
-
Enfin, plutôt que d'avoir un effet unique, choisissez grâce à
uniform(0,100)un nombre entre 0 et 100 et affectez l'un des 5 effets possibles suivant la valeur de ce nombre (par exemple entre 0 et 40, téléportation, entre 40 et 60 ...)
Vous pouvez voir un exemple de réalisation en javascript sur ce lien
plus difficile : lorsque l'on clique dans la fenêtre, faîtes en sorte que l'algoblob se dirige vers l'endroit où l'on a cliqué sans modifier sa vitesse. Il y a un petit peu de mathématiques à faire.
Derrière ces exemples, il faut retenir une notion qui est la programmation événementielle ou programmation par événement.
Éditeur Python