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
  1. Reprenez le code de l'exercice sur les mouvements et les tests
  2. Ajoutez dans la fonction update un 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.
  3. É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.

  1. Au lieu d'une téléportation, faites une modification alétoire de la vitesse
  2. Au lieu d'une modification aléatoire, faites un rebond (l'algoblob repart dans l'autre sens)
  3. 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_x et pyxel.mouse_y qui sont des variables prédéfinies de Pyxel)
  4. Concevez un 5ème effet possible, entièrement de votre choix.
  5. 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.

La programmation événementielle ou programmation par évènement est un paradigme de programmation où le programme fonctionne en réaction aux événements qui se produisent plutôt que de se dérouler de façon linéaire. Il est au centre des interfaces graphiques actuelles. On le trouve par exemple dans Scratch