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 :
- dans un premier temps, vous créerez l'interface graphique de votre jeu, à savoir une simple grille de 3 cases x 3 cases dessinée sur un canevas Tinter ( Rappel : il s'agit d'un widget correspondant à une "zone de dessin").
- une fois le "plateau de jeu" créé, vous coderez le jeu en lui-même, en vous restreignant à un jeu joueur contre joueur; votre script devra donc gérer l'affichage d'un rond ou d'une croix selon le joueur et l'endroit où il aura cliqué dans le jeu.
- ensuite, vous coderez les instructions qui permettent au script de déterminer à chaque tout de jeu si un des joueurs est gagnant, c'est à dire a aligné 3 symboles identiques.
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 :
- 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_clicpour détecter le clic-gauche de la souris, on écrira :can.bind('<Button-1>' , gestion_clic) - 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...
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 :
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.
- vous écrirez vos instructions dans le programme principal et ne modifierez pas les autres instructions.
le "plateau de jeu" est une grille de 25 lignes et 40 colonnes; dans chaque case de cette grille peut être affichée une image représentant soit l'avion, soit une bombe, soit un étage d'immeuble :
Le plateau de jeu est représenté dans le script par une liste de listes grille de 25 lignes de 40 colonnes, soit autant de "cases" qu'il y a sur le plateau de jeu; chaque élément de la liste de listes peut contenir un entier qui code l'image à afficher dans la "case" correspondante du plateau de jeu.
Cette liste de listes permettra de garder en mémoire l'état du plateau de jeu et de pouvoir gérer celui-ci.
Le codage dans la liste de listes est le suivant :- 0 = case vide
- 1 = avion
- 2 = bombe
- 3 = immeuble
- Tout votre travail sera de modifier la liste de listes pour réaliser le jeu; pour gérer l'affichage sur le plateau de jeu, vous disposez de deux fonctions déjà définies :
- une fonction
affiche()pour afficher toutes les images du jeu ( cette fonction "balaie" chaque élément de la liste de listes, et, selon la valeur de l'élément, affiche l'image correspondante ) - une fonction
efface()pour effacer toutes les images.
- une fonction
- La fonction
anim()( correspondant en fait à une boucle infinie) exécute "en boucle" ses instructions toutes les 30 ms ( cette valeur peut être modifiée pour ralentir ou accélérer le jeu ).
La structure principale de votre jeu sera placée dans cette fonction.
A côté de cette fonction, vous avez ( devez ! ) la possibilité d'écrire toute fonction ou fonction supplémentaire pour faire tourner votre jeu.
- Enfin, le script est paramétré pour exécuter automatiquement une fonction appelée
lacher_bombe()lors de l'appui sur la touche 'b' du clavier : cette fonction sera à compléter !
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 :
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.
- vous écrirez vos instructions dans le programme principal et ne modifierez pas les autres instructions.
le "plateau de jeu" est une grille de 25 lignes et 40 colonnes; dans chaque case de cette grille peut être affichée une image représentant soit l'avion, soit une bombe, soit un étage d'immeuble :
Le plateau de jeu est représenté dans le script par une liste de listes grille de 25 lignes de 40 colonnes, soit autant de "cases" qu'il y a sur le plateau de jeu; chaque élément de la liste de listes peut contenir un entier qui code l'image à afficher dans la "case" correspondante du plateau de jeu.
Cette liste de listes permettra de garder en mémoire l'état du plateau de jeu et de pouvoir gérer celui-ci.
Le codage dans la liste de listes est le suivant :- 0 = case vide
- 1 = élément de raquette ( plusieurs selon la largeur souhaitée )
- 2 = balle
- 3 = brique
- Tout votre travail sera de modifier la liste de listes pour réaliser le jeu; pour gérer l'affichage sur le plateau de jeu, vous disposez de deux fonctions déjà définies :
- une fonction
affiche()pour afficher toutes les images du jeu ( cette fonction "balaie" chaque élément de la liste de listes, et, selon la valeur de l'élément, affiche l'image correspondante ) - une fonction
efface()pour effacer toutes les images.
- une fonction
- La fonction
anim()( correspondant en fait à une boucle infinie) qui exécutera "en boucle" ses instructions toutes les 30 ms ( cette valeur peut être modifiée pour ralentir ou accélérer le jeu ).
La structure principale de votre jeu sera placée dans cette fonction.
A côté de cette fonctions, vous avez ( devez ! ) la possibilité d'écrire toute fonction ou fonction supplémentaire pour faire tourner votre jeu.
- Enfin, le script est paramétré pour exécuter automatiquement deux fonctions lors de l'appui sur les touches de clavier pour diriger la raquette :
- une fonction
gauche()lors de l'appui sur la touche 'q' - une fonction
droite()lors de l'appui sur la touche 'm'
- une fonction
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...
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.
- vous écrirez vos instructions dans le programme principal et ne modifierez pas les autres instructions.
le "plateau de jeu" est une grille de 8 lignes et 10 colonnes; dans chaque case de cette grille peut être affichée un symbole ( drapeau ou mine ) ou une valeur.
Le champ de mine est représenté dans le script par une liste de listes grille de 8 lignes et 10 colonnes, soit autant de "cases" qu'il y a sur le champ de mine.
Cette liste de listes permettra de garder en mémoire l'état du champ de mine et de calculer le nombre de cases contenant des mines lors d'un clic du joueur.
Le codage dans la liste de listes est le suivant :- 0 = case vide
- 1 = mine
- Pour gérer l'affichage sur le plateau de jeu, vous disposez de trois fonctions déjà définies :
- une fonction
affiche(ligne, colonne, valeur)pour afficher un symbole ou une valeur dans une case en indiquant sa ligne, sa colonne et sa valeur - une fonction
efface_case(ligne, colonne)pour effacer une case en indiquant sa ligne et sa colonne - une fonction
vide()qui efface tout le champ de mine
- une fonction
- Enfin, deux fonctions
clic_gauche(event)etclic_droit(event)sont automatiquement appelées lors des clics souris respectifs.
Ces fonctions seront à compléter !
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.
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 :
pong_utils.py: contient des fonctions utilitaires prêtes à l'emploi pour dessiner dans un canevas Tkinter. Ce fichier n'est pas à modifier.pong.py: le jeu en lui-même, dont vous allez devoir compléter le code.
É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 :
- les instructions d'importation des modules
Tkinteretpong_utils - une fonction
anim()correspondant à la boucle d'animation principale du programme : une fois lancée, cette fonction s'appelle elle-même automatiquement toutes les 200 ms ( valeur réglable ), et permettra donc de réaliser les animations du mouvement de la balle et gérer ses rebonds avec les parois du terrain de jeu et avec les raquettes, gérer le score, etc... - une fonction
gestion_clavier()jouant le rôle d'un gestionnaire d'évènements clavier, qui sera elle automatiquement appelée lorsqu'un joueur appuiera sur une touche; c'est dans cette fonction que vous coderez le déplacement des raquettes. - enfin, les instructions permettant de construire l'interface graphique du jeu : fenêtre elle-même, canevas ( = zone de dessin ), liaison au gestionnaire clavier.
Cette partie n'est exécutée qu'une seule fois au lancement du programme, puis "donne la main" à la fonctionanim().
C'est dans cette partie que vous initialiserez toutes les variables nécessaires à votre jeu ( attention à leur portée dans le script...)
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 !!!
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 :
- ni sortir du terrain de jeu
- ni se percuter lui-même
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.
- vous écrirez vos instructions dans le programme principal et ne modifierez pas les autres instructions.
le "plateau de jeu" est une grille de 25 lignes et 40 colonnes; dans chaque case de cette grille peut être affichée une image représentant un "anneau" du serpent :
Le plateau de jeu est représenté dans le script par une liste de listes grille de 25 lignes de 40 colonnes, soit autant de "cases" qu'il y a sur le plateau de jeu; chaque élément de la liste de listes peut contenir une valeur qui code l'image à afficher dans la "case" correspondante du plateau de jeu.
Cette liste de listes permettra de garder en mémoire l'état du plateau de jeu et de pouvoir gérer celui-ci ( notamment les collisions du serpent avec le mur ou lui-même ! ).
Le codage dans la liste de listes est le suivant :- 0 = case vide
- 1 = anneau du serpent
- 2 = mur
- Tout votre travail sera de modifier la liste de listes pour réaliser le jeu; pour gérer l'affichage sur le plateau de jeu, vous disposez de deux fonctions déjà définies :
- une fonction
affiche()pour afficher toutes les images du jeu ( cette fonction "balaie" chaque élément de la liste de listes, et, selon la valeur de l'élément, affiche l'image correspondante ) - une fonction
efface()pour effacer toutes les images.
- une fonction
- La fonction
anim()( correspondant en fait à une boucle infinie ) exécutera "en boucle" ses instructions toutes les 30 ms ( cette valeur peut être modifiée pour ralentir ou accélérer le jeu ).
La structure principale de votre jeu sera placée dans cette fonction. A côté de cette fonction, vous avez ( devez ! ) la possibilité d'écrire toute fonction ou fonction supplémentaire pour faire tourner votre jeu. - Enfin, le script est paramétré pour exécuter automatiquement 2 fonctions lors de l'appui sur les touches de clavier pour diriger le serpent :
- une fonction
gauche()lors de l'appui sur la touche 'A' - une fonction
droite()lors de l'appui sur la touche 'P'
- une fonction
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.
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.
- vous écrirez vos instructions dans le programme principal et ne modifierez pas les autres instructions.
le "plateau de jeu" est une grille de 25 lignes et 40 colonnes; dans chaque case de cette grille peut être affichée une image représentant soit l'avion, soit une bombe, soit un étage d'immeuble :
Le plateau de jeu est représenté dans le script par une liste de listes grille de 25 lignes de 40 colonnes, soit autant de "cases" qu'il y a sur le plateau de jeu; chaque élément de la liste de listes peut contenir une valeur qui code l'image à afficher dans la "case" correspondante du plateau de jeu.
Cette liste de listes permettra de garder en mémoire l'état du plateau de jeu et de pouvoir gérer celui-ci.
Le codage dans la liste de listes est le suivant :- 0 = case vide
- V = vaisseau
- A = astéroïde
- C = carburant
- entier = points bonus
- Tout votre travail sera de modifier la liste de listes pour réaliser le jeu; pour gérer l'affichage sur le plateau de jeu, vous disposez de deux fonctions déjà définies :
- une fonction
affiche()pour afficher toutes les images du jeu ( cette fonction "balaie" chaque élément de la liste de listes, et, selon la valeur de l'élément, affiche l'image correspondante ) - une fonction
efface()pour effacer toutes les images.
- une fonction
- La fonction
anim()( correspondant en fait à une boucle infinie) qui exécutera "en boucle" ses instructions toutes les 30 ms ( cette valeur peut être modifiée pour ralentir ou accélérer le jeu ).
La structure principale de votre jeu sera placée dans cette fonction. A côté de cette fonction, vous avez ( devez ! ) la possibilité d'écrire toute fonction ou fonction supplémentaire pour faire tourner votre jeu. - Enfin, le script est paramétré pour exécuter automatiquement 4 fonctions lors de l'appui sur les touches de clavier pour diriger le vaisseau :
- une fonction
gauche()lors de l'appui sur la touche 's' - une fonction
droite()lors de l'appui sur la touche 'd' - une fonction
haut()lors de l'appui sur la touche 'e' - une fonction
bas()lors de l'appui sur la touche 'x'
- une fonction
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.
- vous écrirez vos instructions dans le programme principal et ne modifierez pas les autres instructions.
le "plateau de jeu" est une grille de 25 lignes et 40 colonnes; dans chaque case de cette grille peut être affichée une image représentant soit le vaisseau, soit une paroi ( gauche ou droite ) de la vallée.
Le plateau de jeu est représenté dans le script par une liste de listes grille de 25 lignes de 40 colonnes, soit autant de "cases" qu'il y a sur le plateau de jeu; chaque élément de la liste de listes peut contenir une valeur qui code l'image à afficher dans la "case" correspondante du plateau de jeu. Pour les parois, il s'agit de la case correspondant à l'extrémité de la paroi la plus proche du vaisseau .
Cette liste de listes permettra de garder en mémoire l'état du plateau de jeu et de pouvoir gérer celui-ci.
Le codage dans la liste de listes est le suivant :- 0 = case vide
- 2 = vaisseau
- 2 = extrémité de la paroi gauche de la vallée
- 3 = extrémité de la paroi droite de la vallée
- Tout votre travail sera de modifier la liste de listes pour réaliser le jeu; pour gérer l'affichage sur le plateau de jeu, vous disposez de deux fonctions déjà définies :
- une fonction
affiche()pour afficher toutes les images du jeu ( cette fonction "balaie" chaque élément de la liste de listes, et, selon la valeur de l'élément, affiche l'image correspondante ) - une fonction
efface()pour effacer toutes les images.
- une fonction
- La fonction
anim()( correspondant en fait à une boucle infinie) exécutera "en boucle" ses instructions toutes les 30 ms ( cette valeur peut être modifiée pour ralentir ou accélérer le jeu ).
La structure principale de votre jeu sera placée dans cette fonction. A côté de cette fonction, vous avez ( devez ! ) la possibilité d'écrire toute fonction ou fonction supplémentaire pour faire tourner votre jeu. - Enfin, le script est paramétré pour exécuter automatiquement 2 fonctions lors de l'appui sur les touches du clavier pour diriger le vaisseau :
- une fonction
gauche()lors de l'appui sur la touche 'q' - une fonction
droite()lors de l'appui sur la touche 'm'
- une fonction
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....