BOMBERMAN Informatique et Sciences du Numérique Amélie LE MOINE Terminale Scientifique Année 2015-2016 SOMMAIRE 1) Introduction……………………………………..… [p.3] 2) Présentation du projet……………………….. [p.3] 3) Organisation du jeu……………………………. [p.4] · Structure du projet Ä Les conversions Ä Les images Ä Les évènements Ä Le temps Ä Le menu Ä Les règles du jeu et les commandes · Mode d’emploi 4) Organisation du groupe………………………. [p.9] · Répartition · Stratégies et problèmes 5) Conclusion……………..…………………………. [p.10] 6) Annexe……………………………………………… [p.11] -2- 1) Introduction Cette année, en spécialité Informatique et Sciences du Numérique (ISN), nous avons formé un groupe de trois, Adrien BOIS, Benjamin SCHERRER, et moi-même, afin de réaliser un Bomberman. Nous voulions réaliser un jeu, à la fois simple, mais également amusant pour l’utilisateur. Nous avons donc créé une version simplifiée du jeu, avec des graphismes, et les bases du vrai Bomberman. 2) Présentation du projet Le Bomberman est un jeu d’arcade et de réflexes, dans lequel chaque joueur doit faire exploser son adversaire à l’aide de bombes. La stratégie consiste à éviter les explosions de bombes, et progresser dans le labyrinthe pour se rapprocher de son adversaire et le faire exploser. Le joueur faisant exploser son adversaire gagne la partie. Ce jeu est codé en Python, avec l’utilisation de Numpy (bibliothèque, pour le tableau) et Pygame (pour le graphisme). Ce jeu est fait pour deux joueurs, qui jouent sur un même clavier, mais avec des commandes différentes. Le joueur 1 joue avec les touches -q, d, z, s- et pose une bombe avec la barre -espace-. Pour le joueur 2, ce sont les touches -←, ↑, →, ↓- qui sont utilisées, ainsi que le 5- pour poser une bombe. -3- 3) Organisation du jeu · Structure du projet Notre programme est essentiellement composé de fonctions. En effet, chaque évènement va entraîner une fonction, c’est-à-dire que le programme se résume à cela : Ensuite, la fonction -menu ()- renvoi à d’autres fonctions au fur et à mesure des évènements exécutés par les utilisateurs. Nous avons créé un seul programme avec toutes les commandes nécessaires. Il doit être placé au même endroit que toutes les images utilisées dans le programme. De plus, Pygame, Python, et Numpy doivent être installés sur l’ordinateur. Pour réaliser notre programme, nous avons d’abord réalisé quelques fonctions essentielles. Ä Les conversions La fonction –conv(lig,col)- permet de convertir les coordonnées du tableau en coordonnées sur la fenêtre. Nous avons créé un tableau de 15x15, et notre fenêtre fait 450x450 pixels. Cette fonction multiplie donc chaque coordonnées du tableau par 30, afin d’avoir la position dans la fenêtre. Par exemple, le point A (6 ; 12) dans le tableau, correspond dans la fenêtre, au point A (180 ; 360). Ces coordonnées correspondent au coin en haut à gauche de l’image. -4- Ä Les images Nous avons d’abord chargé toutes les images nécessaires au programme par exemple les images des personnages, avec et sans la bombe, les images de briques… Cette partie de programme parcourt le tableau, convertit les coordonnées, et attribue chaque chiffre à l’image correspondante. Par exemple, le numéro 5 est associé à l’image de la bombe, ce qui signifie que chaque fois qu’un -5- apparait dans le tableau, une bombe apparait dans la fenêtre, aux coordonnées correspondantes. -5- Ä Les évènements Les évènements correspondent à des actes de l’utilisateur, qui renvoient à une action dans le programme, donc sur la fenêtre. La commande -event.type- permet de préciser si l’action doit se réaliser lorsque la touche est enfoncée, où lorsqu’elle est relâchée. Ensuite, on attribue aux touches du clavier choisies avec la commande -event.key==K_LETTRE-, une action. Par exemple, si le joueur 1 presse la touche -d-, son personnage ira à droite. S’il presse la touche -espace-, son personnage posera une bombe. Cependant nous avons dû faire face à un problème de correspondance entre le clavier azerty, et le clavier qwerty. Ainsi, la touche -a- correspond à la touche -q- sur notre clavier. Ä Le temps Pour la gestion du temps, nous avons importé un module qui représente le temps écoulé (en secondes) depuis le 1er Janvier 1970. Ainsi, à chaque fois qu’une bombe est posée par l’un des joueurs, une fonction enregistre le temps correspondant à la pose de la bombe. Au bout de deux secondes, la bombe explose. C’est la commande -import time- qui représente le temps écoulé (en secondes) depuis le 1er Janvier 1970. -6- Ä Le menu La fonction -menu ()- est la première fonction utilisée. Elle permet d’ouvrir une fenêtre avec le menu du jeu. Deux options se présentent alors à l’utilisateur : -soit il connait les règles et clique sur -jouer- directement (le jeu se lance alors) -soit il veut se renseigner sur les règles et clique sur -instructionsLorsque le joueur clique sur l’un ou l’autre bouton, une nouvelle fenêtre s’ouvre alors. Ä Les règles du jeu et les commandes Les fonctions -instructions- et -contrôle- servent à présenter au joueur les règles du jeu, et dirige l’utilisateur vers l’utilisation des commandes. Ce sont de simples fenêtres avec des boutons. -7- · Mode d’emploi Pour pouvoir tester ce jeu, il faut d’abord installer Python, ainsi que Pygame et Numpy. Ensuite, le schéma suivant explique comment l’utilisateur peut jouer. Chaque action de l’utilisateur renvoie à un event, et celui-ci renvoie à une fonction (déplacement du personnage, explosion de la bombe…) Si la case adjacente droite n’est pas occupée par un quelconque obstacle, le joueur 1 peut aller à droite. Il en est de même pour les trois autres touches, pour les directions haut, bas, et gauche. La bombe est posée sous le joueur, donc les cases adjacentes peuvent être occupées. Pour le joueur 2, le principe est exactement le même, mais avec des touches différentes. -8- 4) Organisation du groupe · Répartition Pour réaliser ce projet, nous avons partagé le travail. ü La création des différentes fenêtres ü La création et le positionnement des briques ü La création des personnages et leurs déplacements ü La gestion du temps ü L’explosion des bombes Adrien -gestion des personnages -gestion des bombes Benjamin -gestion du temps -gestion des déplacements Amélie -création des différentes fenêtres -gestion des -gestion du briques placement des incassables dans briques le labyrinthe extérieures -placement des briques cassables Pour ma part, j’ai donc fait l’ensemble des fenêtres. Chaque fenêtre se code de la même façon. En effet, il faut d’abord définir la position de la fenêtre sur la page (ici, elle est aux coordonnées (750,150) -> en pixels). Ensuite les coordonnées (450,450) définissent la taille de la fenêtre. Je donne ensuite le nom du fond que je souhaite mettre à ma fenêtre, en suite je nomme la fenêtre (Bomberman ici). Il faut aussi penser à définir l’emplacement de l’image du fond, sinon elle ne s’affiche pas (je la place tout en haut à gauche, c’est-à-dire à (0,0)). La commande pygame.display.flip()- permet de rafraîchir la fenêtre, et donc de placer tous les éléments nécessaires. Les fenêtres s’ouvrent au fur et à mesure que les fonctions sont utilisées. De plus, sur certaines fenêtres, j’ai défini des boutons. Lorsque le joueur clique dans une certaine zone, une fonction est parcourue et affiche une autre fenêtre. -9- Ainsi, lorsque l’utilisateur clique dans la bande allant de 0 à 40 pixels, la fonction -menu()est déclenchée. Pour la bande de 410 à 450 pixels, c’est la fonction -instruc_controle()- qui est parcourue. La commande -MOUSEBUTTONDOWN- signifie que c’est lorsque le clic est enfoncé que la fonction se lance (contrairement à -MOUSEBUTTONUP-). Enfin, la commande event.button==1- précise que c’est le clic gauche qui est en jeu. · Stratégies et problèmes Nous avons réparti le travail de façon à avoir plus de temps pour réaliser chaque élément du jeu. Cependant, il reste quelques défauts à notre projet, que nous aurions retravaillé avec plus de temps. D’abord, les déplacements des personnages. Nous pensons que les personnages vont trop vite par rapport à l’explosion des bombes. En effet, ils se déplacent de 30 pixels en 30 pixels, et non pixels par pixels. Cela dit, nous avons essayé de contourner ce problème en augmentant le nombre de briques non cassables. Ainsi, les personnages doivent slalomer davantage entre ces briques, et donc leurs déplacements se voient ralentis. Ensuite, nous avons un problème de fenêtre. Je me suis occupée de cette partie du jeu. J’ai créé une fenêtre pour chaque action de l’utilisateur : Ø le menu Ø les instructions Ø le contrôle Ø le jeu Ø la fin du jeu Ainsi, lorsque le joueur veut fermer la fenêtre, il doit fermer toutes fenêtres, et cela prend du temps et ce n’est pas esthétique. 5) Conclusion Cette année d’ISN m’a permis d’acquérir de nombreuses compétences en informatique, et en codage particulièrement. J’ai beaucoup aimé cette spécialité, car la préparation est très motivante et c’est un concept différent de vrai cours uniquement théoriques. Le fait de pouvoir manipuler le codage toutes les semaines est très intéressant, car cela m’a permis de développer des automatismes. La création de notre jeu m‘a aussi beaucoup plu, je suis contente du résultat auquel nous sommes parvenus en groupe. -10-