Tableaux Maths
Slogan du site

Des cours, des exercices et des vidéos réalisées par des élèves.
Outils numériques en classe et découverte de la programmation.

Tkinter : Dessiner et gérer des déplacements, des collisions

Utiliser TKinter (Dessins, déplacer des objets, collisions...)

Article mis en ligne le 24 octobre 2014
dernière modification le 26 avril 2019

Dessiner avec Tkinter

++++

Faire chuter une balle :

Nous allons programmer une balle qui tombe :

1) On dessine une balle dans le canvas

Un rappel des dessins dans Tkinter :

Voici le code :

2) On fait tomber la balle la balle

On définit un mouvement au départ :

  • dx sera utilisée pour le déplacement horizontal
  • dy sera utilisée pour le déplacement vertical

L’idée ici est de créer une fonction récursive (qui se rappelle automatiquement) et qui ajoute dy (égal à 5) à l’ordonnée de la balle.

Le canvas possède une fonction : move(). Il faut lui indiquer l’objet que l’on veut déplacer et de combien (abscisses, ordonnées).

Une explication en vidéo :

Ce qui donne :

A toi de jouer :

  • Change le vitesse de la balle
  • Change le déplacement de la balle (en haut, à gauche, en diagonal...)

3) On fait rebondir la balle sur le sol :

Dans la fonction deplacement() on teste si l’ordonnée (basse) de la balle dépasse la hauteur du canvas (400 pixels) :

Si tel est le cas, on oppose le décalage vertical dy :

Une explication en vidéo :

Ce qui donne :

A toi de jouer :

  • Fais rebondir la balle en haut
  • Déplace en oblique la balle
  • Fais rebondir la balle sur tous les bords
  • Seras-tu capable d’ajouter une deuxième balle qui bouge ?

++++

Utiliser le clavier avec Tkinter :

Déplacement à chaque touche :

raquette et clavier avec Tkinter

Voici une raquette qui peut se déplacer avec la touche "droite" du clavier :

Explications en vidéo :

A toi de jouer :

  • Ajoute les touches "Haut", "Gauche" et "Bas"
  • Seras-tu capable d’empêcher la raquette de sortir de l’écran ?

Déplacer la balle en continu :

Balle à déplacer en continu avec les flèches

Voici une fonction pour déplacer la balle en continu vers la droite :

A toi de jouer :

  • Utilises toutes les flèches du clavier
  • Fais rebondir la balle sur les bords
  • Seras-tu capable de faire en sorte que la balle traverse l’écran ?

++++

Gérer des images avec Tkinter

Tkinter possède une fonction : PhotoImage(file = ’chemin_vers_image’).
Elle ne gère que les .gif et les .ppm.

Remarques importantes :

  • Si vous voulez utiliser d’autres formats d’images, il vaut mieux installer et utiliser PIL.
    Pour installer PIL sous Pyzo avec Python3, tapez dans un shell : conda install pillow
  • Il est possible que vous ayez des erreurs du type : "pyimage2 doesn’t exist". Si votre chemin et votre code sont corrects, fermer le shell de Pyzo et ouvrez un nouveau shell.

Un exemple avec une image de fond :

Image de fond
Un exemple avec une image de fond

Téléchargez l’image GIF suivante :

Copiez/Collez le code suivant, les commentaires décrivent les lignes de codes :

Faire bouger une image :

L’image précédente peut bouger comme un rectangle ou un cercle dans le canvas avec la fonction move().

Voici un exemple avec le lapin qui tombe :

++++

Gérer les collisions

La detection des collisions entre objets peut être très pénible sous Tkinter. Il y a plusieurs méthodes :

  • On étudie les coordonnées de chaque objet (il est préférable qu’un des deux objets soit fixe ou ne se déplace que sur une ligne)
  • On utilise la méthode : find_overlapping(x1,y1,x2,y2). Elle renvoie les objets en chevauchement avec le rectangle (x1,y1,x2,y2).
  • On détermine la distance entre les objets grâce aux coordonnées de leur centre et le théorème de Pythagore.

Méthode1 : Avec les coordonnées

Si un de vos deux objets ne se déplace que très peu (de gauche à droite par exemple) ou qu’il est fixe, vous pouvez simplement étudier les positions des deux objets grâce à leurs coordonnées.

Une vidéo pour comprendre :

Le code correspondant :

Méthode 2 : Test de chevauchement

On utilise la méthode : find_overlapping(x1,y1,x2,y2). Elle renvoie les index des objets du canvas en chevauchement avec le rectangle défini par (x1,y1,x2,y2).

Cette méthode est pratique lorsque deux objets ont des déplacements dans tous les sens.

Une vidéo pour expliquer :

Le code correspondant :

++++

Vers un premier jeu

++++

Coordonnées de la souris