Tank Survivor
L'équipe
-
NFNolan
-
VUVladimir
-
DSDimitri
-
SLSylvain
Description
Tank Survivor est un jeu vidéo 2D de type survie (inspiré du “die and retry”), développé en Python avec Pygame dans le cadre d’un projet de spécialité NSI.
Le principe est simple : survivre à des vagues d’ennemis de plus en plus difficiles, récupérer des gemmes d’XP, monter en niveau et choisir des améliorations stratégiques pour renforcer son personnage.
Le jeu propose une boucle de progression : classes jouables avec compétences uniques, ultimes rechargeables, ennemis variés (rapides, tanks, tireurs), et boss tous les 5 niveaux avec différents patterns d’attaque.
L’objectif était de créer une expérience dynamique, rejouable et accessible, avec une prise en main rapide mais une profondeur de gameplay grâce aux synergies d’upgrades, aux effets visuels, et à l’équilibrage progressif de la difficulté.
Ce projet met en valeur des compétences en programmation, architecture de jeu, tests, équilibrage et travail d’équipe.
Présentation
Le cœur du gameplay repose sur une boucle simple mais efficace : se déplacer, tirer, esquiver, récupérer des gemmes d’expérience, monter de niveau, choisir des améliorations, puis affronter des vagues toujours plus intenses. Cette boucle est renforcée par une montée en difficulté progressive et par l’apparition d’un boss toutes les 5 vagues. Chaque boss possède plusieurs patterns d’attaque (lasers, projectiles, zones explosives), ce qui oblige le joueur à s’adapter et à améliorer sa stratégie.
Le projet intègre un système de classes jouables, chacune avec une compétence active et un ultimate. Ce choix apporte de la variété et encourage la rejouabilité. Par exemple, certaines classes sont orientées dégâts à distance, d’autres contrôle de zone, invocations ou gros dégâts d’un coup. L’ultimate se recharge au fil du temps mais aussi via les éliminations, ce qui récompense le rythme de jeu et l’agressivité contrôlée.
La progression du joueur est structurée autour d’un système d’XP clair : les ennemis éliminés laissent des gemmes, le niveau augmente par paliers, et chaque montée de niveau donne accès à un choix d’améliorations. Ce système permet de construire des synergies (cadence + multi-tir + ricochet, ou bouclier + PV etc.) et d’obtenir des sensations différentes d’une partie à l’autre. En parallèle, des améliorations temporaires que laissent tomber les ennemis (bouclier, multishot, haste, soin renforcé) dynamisent les combats et créent des phases de puissance ponctuelles.
Sur le plan technique, le jeu repose sur une architecture orientée objets avec des classes dédiées aux principales entités : joueur, ennemis, boss, projectiles, zones d’effet, explosions, invocations, et éléments d’interface. Cette organisation facilite la maintenance du code, l’ajout de nouvelles mécaniques, et les ajustements d’équilibrage. La gestion des collisions est un point central du projet : elle couvre les contacts directs, les projectiles, les zones de dégâts, les lasers et les effets spéciaux. Les calculs de dégâts sont centralisés pour conserver une logique cohérente entre toutes les sources de dégâts.
L’interface a fait l’objet d’un soin particulier pour rendre la partie lisible malgré l’intensité de l’action. Le HUD affiche les informations essentielles : PV, progression de vague, barre d’XP, cooldowns, charge de l’ultimate, score et effets temporaires. Le jeu inclut également plusieurs écrans de navigation (menu de départ, sélection de classe, choix d’upgrade, pause, game over) qui améliorent la compréhension de l’action en temps réel et rendent le jeu agréable et facile à prendre en main.
Le développement s’est fait par itérations. Une première version prototype a validé les bases (déplacement, tir, apparition d’ennemis). Ensuite, des couches successives ont été ajoutées : système de vagues, boss, classes, progression, UI, effets visuels, équilibrage. Les phases de playtest ont été essentielles pour corriger les bugs, améliorer la fluidité et ajuster la difficulté. Une interface de test a aussi été prévue pour reproduire rapidement des cas complexes et accélérer le debug.
Les principales difficultés rencontrées ont concerné l’équilibrage global et les interactions entre mécaniques. Quand un jeu propose beaucoup d’upgrades et de compétences, il faut éviter les combinaisons trop faibles ou trop dominantes. Le travail d’équilibrage a donc été continu : ajustements des statistiques, du rythme de spawn, de la fréquence des attaques ennemies et des timings de compétences. L’objectif était de garder un challenge réel sans rendre la progression frustrante.
Au final, Tank Survivor est un projet complet, jouable et techniquement solide, qui démontre des compétences en algorithmique, programmation orientée objet, conception de gameplay, interface utilisateur, test et débogage. Le jeu remplit son objectif principal : proposer une expérience rapide à prendre en main, mais suffisamment riche pour donner envie de relancer une partie et tester de nouvelles stratégies.
Perspectives d’amélioration possibles : ajout de nouveaux boss et classes, système de sauvegarde de progression, modes de jeu alternatifs, personnalisation visuelle du joueur, et affinage de l’équilibrage avancé pour les longues sessions.
Galerie