Connexion élèves

Choisir le(s) module(s) à installer :

Projets : jeux avec Tkinter

Voici une liste de projets réalisables à l'aide de Tkinter, même si d'autres modules sont mieux adaptés à ceci; choisissez celui qui vous inspire le plus !

Le jeu du morpion

...que vous connaissez bien sûr tous très bien 😎

L'objectif est donc de créer en Python et à l'aide de Tkinter, un jeu de morpion, jouable à deux joueurs ou contre l'ordinateur.

Mais vous procéderez bien entendu par étapes :

Plateau de jeu

Le plateau de jeu est constitué de 2 lignes verticales et 2 horizontale, tracées sur un canevas dans une fenêtre Tkinter.

Écrire le script qui crée ce plateau de jeu.

Pour créer un canevas ( zone de dessin ) dans une fenêtre :


nom_du_canevas = Canvas(fenêtre_parente, width = largeur, height = hauteur)			
			

Pour tracer une ligne sur un canevas, utiliser la méthode create_line() :


can.create_line(xorigine , yorigine , xfin , yfin , fill = 'couleur', width = épaisseur)							
				

Attention, l'origine du repère pour les coordonnées dans un canevas Tkinter est en haut à gauche du canevas

Placement des symboles

Le script doit maintenant gérer le placement des symboles, à savoir une croix ou un rond alternativement selon le joueur 1 ou 2.

Votre script doit donc "intercepter" les clics souris et pouvoir déterminer la position du curseur de la souris au moment du clic : on parle pour cela d'évènements souris. Il existe de même des évènements clavier ( non abordés ici ).
Deux choses sont nécessaires :

  1. Lier un gestionnaire d'évènements à un widget

    Un gestionnaire d'évènement est l'ensemble des instructions qui seront exécutées lorsqu'un évènement particulier se produit; pour que cela fonctionne, il faut que le script puisse être en mesure de détecter quand cet évènement se produit; pour cela, on doit lier le gestionnaire d'évènement à un des widgets de l'interface.

    On utilise la syntaxe suivante après avoir créé le widget :

    
    nom_du widget.bind('<évènement>' , gestionnaire_d_évènement)			
    			

    Les évènements utilisables avec la souris sont par exemple : '<Button-1>' pour la détection du clic gauche, '<Button-2>' pour le clic droit, etc...

    Exemple : pour lier à un canevas nommé can un gestionnaire d'évènement nommé gestion_clic pour détecter le clic-gauche de la souris, on écrira :

    
    can.bind('<Button-1>' , gestion_clic)			
    			
  2. Le gestionnaire d'évènements>

    Le gestionnaire en lui-même est une fonction qui sera automatiquement appelée lorsque l'évènement se produit; cette fonction ne peut recevoir qu'un seul argument, l'évènement en lui-même stockée dans une "variable" nommée evt.

    Par exemple, on écrira :

    
    def gestion_clic(evt):
    	......
    	......			
    			

    Pour récupérer ensuite par exemple les coordonnées du curseur de souris :

    
    X = evt.x # abscisse du curseur dans le canevas
    Y = evt.y # ordonnée du curseur			
    			

Pour tracer un cercle sur un canevas, utiliser la méthode create_oval() :


	can.create_oval(xorigine , yorigine , xfin , yfin , outline = 'couleur', width = épaisseur)							
				

...où les coordonnées x,y correspondent ici à celles des coins du carré dans lequel le cercle est inscrit.

Y a-t-il un gagnant ?

Il ne vous reste plus qu'à écrire les instructions qui permettront, à chaque tour de jeu, de déterminer si un des joueurs a gagné.

Pour cela, il faut pouvoir tester les possibilités ( il y en a 8 en tout ) pour un joueur d'avoir aligné 3 symboles identiques...

Oui, le joueur 2 est un débutant...

Le bombardier

Principe

Au commandes d'un bombardier qui passe au dessus d'une ville, vous devez larguer des bombes pour détruire les immeubles de cette ville :

Larguer les bombes avec la touche 'b'

Mais l'avion descend d'une ligne à chaque passage; il faut donc qu'il détruise les immeubles avant d'arriver trop bas et de les percuter, auquel cas le jeu s'arrête...

On peut larguer plusieurs bombes à chaque passage, mais il faut attendre que la précédente ait touché le sol pour pouvoir lâcher la suivante...

La partie est gagnée quand l'avion arrive à atterrir, ayant donc détruit tous les immeubles.

Difficulté

Projet pas évident, puisqu'il faudra gérer le déplacement de deux objets : l'avion ( et gérer son éventuelle collision avec un immeuble ! ), et une éventuelle bombe...

Par contre, les évènements utilisateurs sont assez simples à gérer, puisqu'ils se réduisent à l'appui sur une seule touche ( la touche de largage de bombe ).

Ressources

Vous trouverez ici une archive contenant un script Python de base et les images à afficher dans votre jeu.

Travail à faire

Assurez-vous d'avoir bien compris la logique du jeu, la manière d'afficher des images,...

Une phase de réflexion sur papier est indispensable pour décomposer le projet en ses différentes fonctions à réaliser. Cette phase de réflexion devra apparaître clairement sur le compte-rendu que vous rendrez en fin de projet

Une fois cette analyse fonctionnelle faite, répartissez-vous le travail; faites régulièrement des mises en commun pour voir où vous en êtes dans l'avancement de votre projet.

Vous pourrez bien entendu compléter votre jeu avec des fonctionnalités supplémentaires : ajout d'un score, gestion de la difficulté, etc....

Casse-briques

Principe

Archi-connu ! Vous dirigez à l'aide d'une raquette une balle rebondissante qui doit détruire un mur de briques en haut de l'écran :

Diriger la raquette avec les touches ← et →

Difficulté

Projet pas évident, puisqu'il faudra gérer le déplacement de deux objets, la raquette et la balle, son éventuelle collision avec une brique,...

De nombreux éléments sont à afficher.

Ressources

Vous trouverez ici une archive contenant un script Python de base et les images à afficher dans votre jeu.

Travail à faire

Assurez-vous d'avoir bien compris la logique du jeu, la manière d'afficher des images,...

Une phase de réflexion sur papier est indispensable pour décomposer le projet en ses différentes fonctions à réaliser. Cette phase de réflexion devra apparaître clairement sur le compte-rendu que vous rendrez en fin de projet

Une fois cette analyse fonctionnelle faite, répartissez-vous le travail; faites régulièrement des mises en commun pour voir où vous en êtes dans l'avancement de votre projet.

Vous pourrez bien entendu compléter votre jeu avec des fonctionnalités supplémentaires : ajout d'un score, gestion de la difficulté, etc....

Le Démineur

Principe

Un grand classique qu'on ne présente plus...

Démineur

Dans cette version :

Le champ de mines est représenté par une grille de 10 colonnes et 8 lignes. Chaque case de la grille peut soit cacher une mine, soit être vide.

Le but du jeu est de découvrir toutes les cases libres sans faire exploser les mines, c'est-à-dire sans cliquer sur les cases qui les dissimulent.

Lorsque le joueur clique sur une case libre comportant au moins une mine dans l'une de ses cases avoisinantes, un chiffre apparaît, indiquant ce nombre de mines. Si en revanche toutes les cases adjacentes sont vides, une case vide ( grise ) est affichée.

En comparant les différentes informations récoltées, le joueur peut ainsi progresser dans le déminage du terrain. S'il se trompe et clique sur une mine, il a perdu.

On peut signaler les cases contenant des mines présumées par un drapeau en cliquant sur le bouton droit de la souris — mais ce n'est aucunement obligatoire. On peut retirer le drapeau en cliquant à nouveau sur le bouton droit.

Difficulté

Le plus délicat est de déterminer le nombre de cases voisines de celle où a cliqué le joueur et contenant une mine.

Ressources

Vous trouverez ici une archive contenant un script Python de base et les images à afficher.

Travail à faire

Assurez-vous d'avoir bien compris la logique du jeu, la manière d'afficher des images,...

Une phase de réflexion sur papier est indispensable pour décomposer le projet en ses différentes fonctions à réaliser. Cette phase de réflexion devra apparaître clairement sur le compte-rendu que vous rendrez en fin de projet

Une fois cette analyse fonctionnelle faite, répartissez-vous le travail; faites régulièrement des mises en commun pour voir où vous en êtes dans l'avancement de votre projet.

Vous pourrez bien entendu compléter votre jeu avec des fonctionnalités supplémentaires : affichage du score, modification de la taille de la grille, gestion d'un temps limite, etc....

Pong ( ou jeu de tennis )

D'après Wikipedia :

Pong est un des premiers jeux vidéo d'arcade et le premier jeu vidéo d'arcade de sport. Il a été imaginé par l'Américain Nolan Bushnell et développé par Allan Alcorn, et la société Atari le commercialise à partir de novembre 1972. Bien que d'autres jeux vidéo aient été inventés précédemment, comme Computer Space, Pong est le premier à devenir populaire.

Le jeu est inspiré du tennis de table en vue de dessus, et chaque joueur s'affronte en déplaçant la raquette virtuelle de haut en bas, de façon à garder la balle dans le terrain de jeu. Le joueur peut changer la direction de la balle en fonction de l'endroit où celle-ci tape sur la raquette, alors que sa vitesse augmente graduellement au cours de la manche. Un score est affiché pour la partie en cours et des bruitages accompagnent la frappe de la balle sur les raquettes.

Pong
Là je vous parle d'un temps que les moins de 45 ans ne peuvent pas connaître, à l'époque on savait faire du vrai jeu ma p'tite dame, du rustique, du plein de cambouis, un rond et deux rectangles et on s'amusait une après-midi entière et on était pas plus malheureux, ah c'est pas comme maint'nant avec leur smartphaune, leur Wazzap et leur Amstragram...

L'objectif est donc de coder un jeu de Pong contrôlé au clavier entre deux adversaires, en utilisant le module d'interface graphique Tkinter déjà rencontré au projet Puissance 4.

Difficulté

Assez simple une fois que l'on a compris la manière de faire bouger la balle et de déplacer la ou les raquette(s).

Ressources

Comme ressource de base, téléchargez ce fichier, que vous décompresserez dans votre zone personnelle, et qui contient un répertoire dans lequel se trouvent deux scripts Python :

Étudier la docstring des fonctions du module pong_utils pour comprendre leur fonctionnement.

Ce module est importé au début du script pong.py, dans lequel vous disposez donc de ses fonctions utilitaires.

Principe du code

Le script pong.py est structuré en plusieurs parties :

Travail à faire

A vous de développer votre code pour permettre à deux joueurs de disputer une partie de Pong...

Commencer modestement : une balle qui bouge et rebondit, puis une raquette qui se déplace, puis deux raquettes, une balle qui rebondit sur les raquettes, etc...
Beaucoup de questions sont déjà à se poser : comment déplacer la balle ? Les raquettes ? De quelles variables a-t-on besoin ? etc...

Passez ensuite aux raffinements : gestion d'un score, d'un "game over", des sons, de la couleur,....

Rappel : lien vers la page de ressources de Tkinter.

Le Serpent

Le serpent qui ne doit pas se mordre la queue !!!

Touche 'A' pour faire tourner à gauche le serpent, touche 'P' pour la droite

Le serpent avance seul; on peut changer la direction de son déplacement mais uniquement vers la gauche ou vers la droite par rapport à cette direction de déplacement.

Le serpent "laisse une trace" derrière lui, sa taille augmente donc continuellement.
Il ne doit :

Le but du jeu est donc que le serpent se déplace le plus longtemps possible...

Difficulté

Le déplacement du serpent est relativement simple à gérer, mais c'est à ses changements de direction avec seulement deux touches qu'il faudra bien réfléchir.

Ressources

Vous trouverez ici une archive contenant un script Python de base et les images à afficher dans votre jeu.

Travail à faire

Assurez-vous d'avoir bien compris la logique du jeu, la manière d'afficher des images,...

Une phase de réflexion sur papier est indispensable pour décomposer le projet en ses différentes fonctions à réaliser. Cette phase de réflexion devra apparaître clairement sur le compte-rendu que vous rendrez en fin de projet

Une fois cette analyse fonctionnelle faite, répartissez-vous le travail; faites régulièrement des mises en commun pour voir où vous en êtes dans l'avancement de votre projet.

Vous pourrez bien entendu compléter votre jeu avec des fonctionnalités supplémentaires : affichage d'un score, gestion de la difficulté, etc....

La Course dans l'Espace

Aux commandes de votre vaisseau spatial le "Flying V", évitez les astéroïdes et collectez des points ou du carburant pour tenir le plus longtemps possible !!

Le temps de jeu est limité, et le carburant permet de l'augmenter; les points-bonus augmentent le score.

Le vaisseau peut se diriger dans 4 directions.

Touches 'E','S','D' et 'X' pour piloter le vaisseau

Difficulté

De très nombreuses choses sont à gérer : le déplacement du vaisseau, sa rencontre avec les obstacles ou les bonus, le temps de jeu, et surtout permettre ce qu'on appelle le scrolling du plateau de jeu, à savoir le défilement automatique des différents éléments ( astéroïdes, bonus,..) jusqu'à leur disparition

A ne choisir que si vous êtes sûrs de vous...

Ressources

Vous trouverez ici une archive contenant un script Python de base et les images à afficher dans votre jeu.

Travail à faire

Assurez-vous d'avoir bien compris la logique du jeu, la manière d'afficher des images,...

Une phase de réflexion sur papier est indispensable pour décomposer le projet en ses différentes fonctions à réaliser. Cette phase de réflexion devra apparaître clairement sur le compte-rendu que vous rendrez en fin de projet

Une fois cette analyse fonctionnelle faite, répartissez-vous le travail; faites régulièrement des mises en commun pour voir où vous en êtes dans l'avancement de votre projet.

Vous pourrez bien entendu compléter votre jeu avec des fonctionnalités supplémentaires : affichage du score, gestion de la difficulté, tir du vaisseau pour pulvériser les astéroïdes, etc....

La Vallée de la Mort

Aux commandes de votre vaisseau spatial, vous êtes entré dans une vallée dont les parois défilent à grande vitesse; vous devez éviter de les percuter.

Le vaisseau peut se diriger horizontalement vers la gauche ou vers la droite.

Difficulté

De très nombreuses choses sont à gérer : le déplacement du vaisseau, sa rencontre avec les parois, et surtout permettre ce qu'on appelle le scrolling du plateau de jeu, à savoir le défilement automatique vers le haut de la fenêtre de la vallée, le vaisseau restant au centre de la fenêtre.

A ne choisir que si vous êtes sûrs de vous...

Ressources

Vous trouverez ici une archive contenant un script Python de base et les images à afficher dans votre jeu.

Travail à faire

Assurez-vous d'avoir bien compris la logique du jeu, la manière d'afficher des images,...

Une phase de réflexion sur papier est indispensable pour décomposer le projet en ses différentes fonctions à réaliser. Cette phase de réflexion devra apparaître clairement sur le compte-rendu que vous rendrez en fin de projet

Une fois cette analyse fonctionnelle faite, répartissez-vous le travail; faites régulièrement des mises en commun pour voir où vous en êtes dans l'avancement de votre projet.

Vous pourrez bien entendu compléter votre jeu avec des fonctionnalités supplémentaires : affichage du score, gestion de la difficulté, etc....

>