Jeu GameJam

Auteur(s) du travail : Léopold Boulianne et Thibault Godart

Date : Novembre 2024

Technologie(s) : Unity, C#, PHP Api, MySQL et XML Reader

Interoperabilité : Ordinateur


Code Github

Description

Notre jeu de GameJam intitulé LaserFighter est un jeu dont le nom le décrit assez bien. Le but est de faire le meilleur score possible en tuant des slimes à l’aide d’un pistolet laser tout en se faisant attaquer par ses mêmes slimes. Le jeu est assez simple, mais tout de même assez plaisant à jouer, je pense y ajouter des vagues d’ennemies plus tard pour rendre le jeu plus difficiles au fur et à mesure que le joueur avance. Le jeu comporte plusieurs menu pour apprendre comment y jouer ainsi qu’un menu de pause et de fin de jeu qui comporte un leaderboard avec les noms des anciens joueurs ainsi que leur score. Cela rajoute un petit aspect compétitif au jeu.

 

Aspects Techniques

Le jeu est entièrement monté dans Unity et tout les scripts sont en C# sauf pour les scripts d’API qui servent à aller chercher les anciens scores ainsi que l’ajout d’un nouveau score qui sont eux en PHP sur mon VPS. Malheureusement, l’API d’ajout de score est public, donc n’importe qui pourrait ajouter des fausses données dans ma base de données, mais heureusement toutes les entrées sont sanitize et vérifié pour s’assurer que personne ne puisse faire d’attaque en SQL injection. Un script C# relié à l’interface va chercher les données à l’aide d’un XML reader et parse ensuite les données pour les placer dans une liste qui sera elle même affichées dans l’interface. Les ennemies se dirigent vers le player grâce au path finding A* qui prend en compte les coûts de déplacement. Par exemple, les pics que nous voyons sur le sols coutent plus chère aux ennemies et vont donc prioriser de faire le tour à moins que ca soit vraiment plus pratique de passer par dessus. Le laser fonctionne avec un raycast pour voir s’il touche un ennemie.

Principe

Afin d’assurer une gestion fluide et rigoureuse des performances, le système de classement repose sur une structure de données typée où chaque entrée est encapsulée dans un modèle Score(). Cette approche facilite l’intégration au sein du moteur Unity et rend le code nettement plus modulaire pour de futures évolutions. Pour l’affichage, j’ai opté pour un tableau de taille fixe (Score[10]) plutôt qu’une liste dynamique ; ce choix délibéré permet de minimiser l’empreinte mémoire en utilisant une allocation statique parfaitement adaptée aux besoins du projet. Cette logique de restriction est d’ailleurs répercutée de bout en bout de la chaîne logicielle : l’API PHP limite l’extraction des données à la source via une requête SQL optimisée, garantissant ainsi une cohérence totale entre les données envoyées par le serveur et la capacité de traitement du client C#.