École Internationale PACA Manosque

Defend the cube! (par Louis et Takuma)

Introduction
Pour notre second projet d’NSI, nous avons décidé de créer un jeu original (et non une recréation comme le jeu d’asteroids) dont le but est de défendre un objet qui s’appelle “core” par des ennemis. Le joueur peut extraire des ressources à partir des arbres et des roches, crafter des items pour obtenir une meilleure arme, etc.. Quand le joueur perd toute sa vie, il va devenir un fantôme pendant un certain temps jusqu’à qu’il se ressuscite, et quand le core est entièrement détruit, le jeu s’arrête.

Présentation générale/ Description du projet
・Description / mode d’emploi 

Le jeu se présente sous forme d’un jeu 2D dans lequel on est introduit avec un menu qui nous montre 3 choix : “Start a new game”, “Settings” et “Quit”. Les choix sont des boutons; on peut les cliquer à l’aide d’une souris avec des effets visuels pour montrer à l’utilisateur qu’est ce qu’il est en train de faire avec le bouton.

Defend the cube - Generating terrain

Quand le joueur clique sur le bouton “Start a new game”, le programme va générer les objets nécessaires pour le jeu. Pendant cette phase de préparation, 2 messages sont affichés sur la fenêtre: “Loading…” et un autre message qui affiche ce que le programme est en train de faire pour montrer qu’il fait son job sans s’arrêter. La génération du terrain se fait pendant cette phase avant le début du chaque game.

Après le chargement, le joueur peut enfin contrôler le personnage pour commencer à préparer l’invasion. Pour avancer, on appuie sur les touches WASD(clavier qwerty recommandé) et pour utiliser un outil/ envoyer des coups de poing, on fait des clics gauches.

Le personnage possède aussi un inventaire. Le joueur peut appuyer sur la touche E pour ouvrir l’inventaire et crafter / ranger / déplacer ses items en faisant des “drags and drops” (avec le click droit pour n’en déplacer qu’un et le click gauche pour tout déplacer). Si le joueur veut utiliser certains items, il doit déplacer cet item dans la barre d’outils située en bas à gauche et le sélectionner en cliquant sur l’item.

On remarquera la présence d’un “menu de craft” (comme nous l’appelons) qui nous permet de fabriquer des objets à partir de combinaisons d’autres objets.
Par exemple, pour faire des blocs de bois, il nous faut mettre le paterne ici à droite

Le jeu se déroule sans limite de temps et le but est de défendre le “core” (une sorte de boîte violette) situé au milieu du terrain en tuant avec des armes les ennemis qui viennent vers le joueur ou le core (le joueur ne peut pas donner des dommages aux ennemis sans arme).
Cependant, le joueur ne possède rien au début du jeu. Il doit donc taper sur les arbres, roches pour obtenir des ressources et crafter des armes de base. Les ennemis vont venir attaquer progressivement et le jeu termine quand le core perd toute sa vie.

・Historique
Afin d’avoir des idées, on a utilisé un outil en ligne qui s’appelle “Game idea generator”. Les concepts principaux sont le tower defense, topdown, ressources, crafting. Chaque concepts existent depuis même avant l’année 2000. Par exemple, un des premiers jeux de tower defense est Dungeon Keeper, publié en 1997. Malgré la vieillesse de ces types de jeux, aujourd’hui on a toujours des jeux qui sont activement joués comme Minecraft dans lequel on peut craft des items et farmer des ressources. On a voulu mélanger différentes idées pour en faire un jeu amusant.
On a aussi utilisé pour la génération du terrain le bruit de Voronoï et le bruit OpenSimplex (lui même inspiré du bruit simplex lui même encore inspiré du bruit de Perlin), pour ce dernier, nous avons utilisé le module OpenSimplex de python (il faut l’installer avec pip)
・Notre objectif
On voulait créer un jeu plus complexe, moderne que le jeu qu’on a recréé précédemment en tant que challenge, et essayer de dépasser la limite de la programmation avec pygame. Un autre but est de mélanger les concepts des différents jeux afin d’en créer un jeu original (par exemple le système de tower defense avec un système de ressources et de crafting).

Bilan
・Points positifs
– On a réussi à coder un jeu qui ressemble assez à un vrai jeu moderne malgré la difficulté de coder un jeu sur python à partir de zéro.
– On a gagné beaucoup d’expériences et de connaissances sur la programmation objet et sur le module pygame, ainsi que les différents algorithmes comme A*, perlin noise.
– On a créé la bibliothèque GameManager qu’on pourra utiliser dans notre future projet.

・Points négatifs
– On a fait de notre mieux sur l’organisation du code mais le code a commencé à être très compliqué à force d’ajouter des classes.
– On a pas réussi(pas assez de temps) à implémenter le mode multijoueur.

・Experience personelle
On sait mieux coder un jeu avec pygame, on maîtrise plus la programmation objet, et on a encore ressenti l’importance de git(github) quand on travaille sur un projet avec plusieurs personnes.

・Conclusion
Au final, on a fini avec un jeu simple à jouer et aussi très modulable (on peut ajouter très facilement des objets, modifier la génération de terrain et bien d’autres variables du jeu. On en est très fiers et de plus, ce même programme nous permettra de créer d’autres jeux ou applications de genre simulation. On a beaucoup appris sur les algorithmes de pathfinding et de génération aléatoire de terrain (donc le bruit de Perlin, OpenSimplex, Voronoï, etc). Notre projet est en soit une grande réussite et pour nous une prouesse de faire un jeu aussi optimisé sur python. On s’est bien amusé à le faire.