TP Pacman
Transcription
TP Pacman
IUT La Rochelle - Dépt R&T Info 1ème année – Module I3 2011-2012 Laurent Demay C. Sempé, J. Khamlichi 1ère Partie TP Pacman TP Pacman : Première partie – déplacement du Pacman Nous allons commencer dans cette 1ère partie à programmer la gestion du déplacement du pacman dans le labyrinthe Manipulations préalables - Exécutez le programme « maj.exe » depuis le site http://demay.iut.fr.free.lr/RT , dossier 1A/Informatique/I3.../Pacman » pour mettre à jour l’environnement de travail de Python Scripter. - Téléchargez et décompressez sur votre bureau ou à un autre endroit l’archive « TP Pacman.zip » depuis le site http://demay.iut.fr.free.lr/RT , dossier « 1A/Informatique/I3…/Pacman » Vous devez donc avoir un dossier « TP Pacman » de contenu suivant : Le fichier « pacman.pyw » qui est le squelette du programme que vous aurez à compléter Le fichier « pacman.wld » qui est le « fichier monde » du labyrinthe du pacman Le dossier « wxRUR » qui contient la bibliothèque graphique utilisée pour coder le jeu Le squelette du programme pacman.pyw - Ouvrez le programme pacman.pyw avec Python Scripter (son extension est pyw car c’est un programme graphique) Le « squelette » initial est déjà exécutable et créera une simple application sans murs intérieurs. - Sélectionnez le « moteur Python » distant Wx (menu « Executer / Moteur Python » ) Le programme pacman.pyw utilisant la librairie wxPython, il faut absolument sélectionner le bon « moteur » sous Python Scripter avant de le lancer - Lancez le depuis Python Scripter en cliquant sur le bouton Dans ce mode d’exécution, la fenêtre graphique de l’application pacman reste affichée après la fin du programme Vous pouvez cliquez sur pour réinitialiser l’état de la mémoire et fermer cette fenêtre. - Lancez de nouveau le programme de départ pacman.pyw en cliquant cette fois ci sur le bouton (External Run) Le mode « External Run » démarre le programme en dehors de Python Scripter, comme lorsqu’on fait un double-clic. Cela permet de tester son fonctionnement autonome, mais ne permet pas de contrôler et de comprendre les erreurs Utilisez alors pour développer la suite le mode d’exécution le plus adapté à vos besoins et à vos tests. - Reprenez les explications du squelette du programme pacman.pyw sur la feuille annexe fournie en TD On rappelle le schéma simplifié de l’exécution de la version actuelle (initiale) du programme pacman.pyw : initialisation AppPacman = wxRUR.Application(…) définition des fonctions utilisées et des variables globales, etc AppPacman.EventHandler(onKeyEvent=deplacer_pacman) appui sur une touche AppPacman.MainLoop(…) événement KeyEvent AppPacman.ExitMainLoop() traitement final deplacer_pacman(KeyEvent) I - Premières modifications Utilisez la documentation en annexe de la librairie wxRUR pour apporter les premières modifications suivantes : 1) Complétez les arguments de la fonction wxRUR.Application(……,……) pour donner un titre à votre application AppPacman et pour charger le « fichier monde » pacman.wld du labyrinthe dans lequel se déroulera le jeu. 2) Complétez les arguments de la fonction AppPacman.Robot(…………) pour positionner le « robot » pacman en position (6,6), orienté vers l’est, et avec l’image (couleur) du pacman II - Déplacement du pacman Nous allons compléter la fonction deplacer_pacman(KeyEvent) pour pour déplacer le « robot » pacman d’une case dans la direction indiquée par une des touches de gestion du curseur. La fonction événementielle deplacer_pacman reçoit automatiquement en argument lors de son appel par MainLoop une « variable d’événement » KeyEvent de type EVT_CHAR qui contient des informations sur l’événement lui-même. En particulier KeyEvent.GetKeyCode() retourne le code de la touche appuyée (constantes définies dans la librairie wxRUR) , dont voici quelques valeurs et les touches correspondantes : wxRUR.WXK_UP : 1) wxRUR.WXK_LEFT : wxRUR.WXK_DOWN : wxRUR.WXK_RIGHT : Complétez la fonction deplacer_pacman(KeyEvent) pour déplacer le pacman d’une case dans la direction du curseur, en évitant de le faire se cogner contre un mur, (on n’effectuera pas de déplacement dans ce cas). Rq : on n’effectuera pas non plus de déplacement si on appuie sur une autre touche que ou 2) Ajoutez une instruction pacman.set_trace_style(…) juste après la création du pacman pour définir le type de tracé lors de son déplacement de manière à ce que celui-ci « marque » chaque case parcourue par un rond marron. III - Gestion des cases parcourues Le marquage des cases nous permet connaitre visuellement les cases déjà parcourues, mais nous aurons également besoin de les mémoriser dans le programme, en particulier pour pouvoir s’arrêter si toutes es 100 cases ont été parcourues, et en ne comptant qu’une seule fois une case sur laquelle le pacman est repassé. Pour cela nous allons utiliser une variable globale cases_parcourues de type set (ensemble python) pour mémoriser sans duplication tous la paire (x,y) de coordonnées des cases visitées (une paire de valeurs = tuple en python). 1) Créez l’ensemble cases_parcourues juste après l’instruction de création du pacman Avec les coordonnées de quelle case faut-il l’initialiser préalablement ? Faites-le. 2) Utilisez le cours sur les set et les tuple Complétez la fonction deplacer_pacman(KeyEvent) pour rajouter en cas de déplacement du pacman le tuple des coordonnées de la nouvelle case atteinte dans l’ensemble cases_parcourues ( utiliser pacman.getPos() ) Attention : il faudra modifier la variable globale cases_parcourues depuis la fonction deplacer_pacman … 3) Complétez alors la fonction deplacer_pacman(KeyEvent) pour vérifier après un déplacement si le pacman n’a pas parcouru toutes les 100 cases, auquel cas on affichera un message judicieux avec AppPacman.ShowMessage et on sortira de la boucle événementielle avec l’instruction AppPacman.ExitMainLoop() IV - Introduction des robots suiveurs 1) Ajoutez dans le programme juste avant la création du pacman des instructions pour créer 5 variables globales de type AppPacman.Robot nommées robot1, robot2, …, robot5 de caractéristiques suivantes : robot1 : bleu clair en position (1,1) tourné vers l'est robot2 : bleu en position (10,1) tourné vers l’ouest robot3 : pourpre en position (1,10) tourné vers l'est robot4 : vert en position (10,10) tourné vers l'ouest robot5 : gris en position (1,6) tourné vers l'est 2) Définir juste ensuite la liste python les_robots constituée des 5 robots crées précédemment. 3) Complétez enfin la fonction deplacer_pacman(KeyEvent) pour vérifier après un déplacement du pacman s’il ne tombe pas sur une case occupée par un des robots de la liste les_robots, auquel cas on affichera un message approprié de défaite et on sortira de la boucle événementielle. Rq : en cas d’ambiguïté, la victoire sera considérée comme prioritaire sur la défaite.