Animations - Exemples

Animations

D’après Gérard Swinnen « Apprendre à programmer avec Python 3 ».

Dans cet exemple, le disque rouge décrit un carré (il longe les bords de la zone de dessin), indéfiniment, c'est à dire jusqu'à ce que l'utilisateur clique sur le bouton "Quitter".

Compléter le script précédent en ajoutant un bouton "Arrêter" de façon à pouvoir interrompre et relancer le déplacement du disque.
On pourra utiliser une variable booléenne "anim" modifiée par les deux fonctions associées aux boutons "Démarrer" et "Arrêter". La fonction récursive devra donc tester l'état de cette variable pour décider si l'appel récursif est effectué ou non.

Animations  Exercice 1

Le but du jeu est de détruire des carrés apparaissant à des positions aléatoires en cliquant dessus.

Animations  Exercice 2

Détail des fonctionnalités :

  1. La fenêtre comporte une zone de de jeu de dimensions 250x300 pixels, une étiquette (label) « Score : », un bouton « Go ! » et un bouton « Quitter ». Écrire le code permettant de créer et de disposer ces éléments dans la fenêtre de jeu.
    Rq : il est possible d’affecter « command = None » à un bouton avant d’écrire la fonction appelée par ce bouton.
  2. Le pointeur de la souris est matérialisé à l’écran par un petit disque rouge de rayon 10 pixels.
    Écrire le code permettant de créer ce disque à une position aléatoire dans la zone de dessin.
    Écrire une fonction deplaceDisque(event) permettant de déplacer le disque à l’aide de clics souris ainsi que le code nécessaire dans le programme principal pour détecter ces clics.
  3. Des carrés bleus de 30 pixels de côté apparaissent en des points aléatoires à l’intérieur d’une zone de dessin, ils sont créés toutes les 400 millisecondes et la création cesse dès que le nombre de carrés atteint la valeur 10.
    Écrire une fonction creeCarre( ), récursive, respectant ces conditions et l’associer au bouton « Go ! ».
  4. Modifier la fonction deplaceDisque(event) de façon à ce qu’elle détecte la présence éventuelle d’un carré à proximité du clic. Cette fonction doit également mettre à jour le score (nombre de carrés détruits) ainsi que le nombre de carrés créés (des carrés doivent pouvoir être créés continuellement s’ils sont détruits par le joueur tant que leur nombre reste inférieur à 10).
  5. Modifier le programme ainsi que certaines fonctions afin d’empêcher la destruction de carrés lorsque leur nombre atteint 10, provoquant ainsi la fin de la partie. On peut à cet effet utiliser une variable booléenne.

Indications :
Trouver un objet près d’un point (x,y) : nom_canvas.find_closest(x, y, halo) ; cette méthode renvoie un tuple de la forme (n,) où n est un entier (numéro dans l’ordre de création des objets).
Suppression d’un objet : nom_canvas.delete(nom_objet ou numéro).

Code


Commentaires

L'exemple donné ici illustre le principe d'une animation "infinie" réalisée à l'aide d'une fonction récursive mais il est possible d'envisager de très nombreux effets différents : le disque peut rebondir sur les bords, sortir du cadre et réapparaître de l'autre côté, changer de taille, de couleur au cours du déplacement…tout en préservant la possibilité d'interactions avec d'autres éléments du jeu.

Trouver un objet près d'un point de coordonnées (x,y) : nom_canvas.find_closest(x, y, halo). Cf. mini projet et aide en ligne.

Utiliser des ressources web