1. Introduction

Le « Tower Defense » est un type de jeu vidéo où le but est de défendre une zone pendant que des ennemis essayent de la traverser. Le jeu se constituerait d’un tracé que les ennemis essayeraient de traverser. Il y aurait une vingtaine de manches et, afin de gagner la partie, le joueur doit poser des tours qui attaqueraient les ennemis pour qu’ils ne réussissent pas à traverser la carte. Le joueur aurait le choix entre 6 tours différentes qu’il peut améliorer au fil de la partie grâce à l’argent qu’il gagne en abattant les ennemis. Le but de ce projet serait de réussir à créer un jeu de ce type. Pour y parvenir, j’utiliserais du python.

2. Matériel et méthodes

Pour réaliser mon projet, il vous faudra installer le module pygame. Pour ce faire, il vous suffit d'utiliser la commande suivante "pip install pygame". Le projet est aussi réalisé en python 3. Avant de commencer à coder mon projet, j'ai commencé par essayer de comprendre la structure qui aurait pu constituer mon projet. J'ai donc réaliser le diagramme suivant: GameDiagram.png, mai 2021 Figure 1: Diagramme du concept du jeu

Comme il est possible de le constater sur ce diagramme, je compte utiliser les 'Class' qui sont utilisées pour la programmation oritentée objet. J'ai aussi fait un petit schéma de ce à quoi devrait ressembler le résultat final. Il se présente comme cela: Picture1.png, mai 2021 Figure 2: Schéma du jeu

Voici une brève explication du schéma: le joueur peut choisir dans la boutique les tours qu’il veut acheter et les placés librement sur la carte (sauf sur le tracé où les ennemis doivent passer). Les ennemis apparaissent d’un côté et essaye d’arriver jusqu’à l’arrivée. Chaque fois qu’un ennemi réussi à passer l’arrivée, le joueur perd une vie jusqu’à ce qu’il n’en ait plus. Pour chaque ennemi vaincu, il gagne une certaine somme d’argent dépendant de l’ennemi tuer (plus fort = plus d’argent/ moins fort = moins d’argent). Le joueur gagne quand il a réussi à survivre 20 manches.

La réalisation de ce projet demande une certaine connaissance du module python "pygame". Ce module nous simplifie beaucoup d'aspects de création de jeux vidéo. Il permet, par exemple, de dessiner des rectangles ou d'autres formes sur l'écran de l'utilisateur grâce à notamment des coordonnées "x" et "y". Pour rapidement expliquer comment cela marche, l'axe des abscisse se trouve sur la bordure haute de l'écran et va de gauche à droite et l'axe des ordonnées se trouve sur la bordure gauche de l'écran et va de haut en bas. Pour créer le projet, nous allons donc manipuler des pixels à l'écran qui évolueront chaque 'Frame' pour donner une impression de mouvement. En réalité, nous n'avons qu'une qui se fait redessiner. Les éléments se déplacants à l'écran sont communément appelés des 'Sprites'. Ensuite, quand à la logique du jeu, il faudrait essayer de trouver un revenu nécessaire permettant au joueur d'à la fois avoir un certains "challenge" lorsqu'il joue mais sans rendre le jeu trop dur pour qu'il ne soit plus possible ni trop simple pour qu'il ne devienne pas ennuyant. Enfin, même si cela aurait pu être abordé plus tôt, l'aspect de menu est très importante. Il est la première chose avec laquelle l'utilisateur interagit et sera décisif pour tout simplement enclencher le jeu.

3. Résultats

Le résultat obtenu est le suivant. Le jeu possède un menu fonctionnel permettant d'accéder au début du jeu. Nous avons ensuite la carte qui s'affiche avec le nombre de vague en haut et un bouton 'Start new wave' en bas à gauche de la fenêtre. Le jeu en lui même n'est pas fonctionnel. Malgré la simplicité du résultat obtenu, la création du menu utilise déjà des outils qui seraient utilisables dans le jeu.

4. Discussion

Ce projet a été réalisé de façon partielle. En effet, il n'est pas à sa forme finale. Néanmoins, ce projet m'a permis de découvrir une toute nouvelle facette de la programmation: l'orienté objet. Bien que le projet ne soit pas le plus complet possible, il permet une certaine compréhension de cette logique de programmation très pratique. Il est vrai que l'orienté objet ou plus précisément les classes sont des outils très puissants. Ils permettent la réalisation de tâches plus complexes avec une syntaxe qui reste relativement accessible. J'ai néanmoins, parfois, trouvé l'assimilation de cette logique assez compliquée et je ne pense pas l'avoir totalement cernée. Je pense que l'orienté objet aurait été la clé du succès de ce projet car il permet une structure très efficace pour, comme par exemple dans notre cas, la création d'un jeu. L'organisation qu'apporte ce concept est fortement utile. Peut-être, aurais-je dû commencer par d'autre petit programme/jeu afin de mieux pouvoir comprendre chaque aspect individuel d'un jeu, comme par exemple, le mouvement d'objet sur une fenêtre ou l'utilisation des classes. En effet, je pense, avec du recul, que j'aurais dû prendre le jeu en entier et essayer de comprendre chaque aspect individuellement pour me simplifier les choses et par la suite utiliser mes connaissances acquises pour créer ce jeu plus complexe. Je pense aussi avoir passé trop de temps à vouloir comprendre l'aspect théorique des choses par exemple en lisant la documentation sans exercé ce que je venais d'apprendre.

5. Conclusion

Le but du projet n'a pas été atteint. Cependant, mon objectif, selon moi, a été atteint. En effet, ce projet m'a permis de renforcer mes connaissances en programmation ainsi que d'en découvrir une nouvelle facette. J'ai aussi pu entraîner mon esprit à réfléchir différemment et à adopter une nouvelle "logique" de programmation. Je pense que malgré le fait que le jeu ne marche pas, j'ai pu apprendre pleins de nouvelles choses dans ce domaine dans lequelle je me considère comme un débutant. Je suis d'avis que ce qui importe n'est pas le résultat final mais le chemin pour y parvenir et que même si cela veut dire échouer, il ne faut pas voir cela comme une défaite mais comme une opportunité pour apprendre de ses erreurs pour essayer de faire mieux la prochaine fois. Pour moi, ce projet est surtout quelque chose qui me permet de me rendre compte de mes failles quant à la gestion de tâches inconnues et complexes pour moi. Il m'a permis de remettre en question la façon dont je vois les choses et comment les résoudre. Le jeu est clairement à un stade très précoce. Beaucoup d'aspects restent à être implémentés et rafinés.

Références