Counter Clockwise : Tout premier jeu
Dipsy974 Il y a 2 ans Invité - En attente d'adhésion Premium6

Bonjour à tous ! Il s’agit la de mon tout premier devlog, sur ma toute première réalisation en tant qu’étudiant gamecodeur.

 

J’ai commencé la formation il y a un peu moins d’une semaine. Après avoir terminé les 4 premiers ateliers gratuits, j’avais soif de connaissances et je mourrais d’envie d’accéder à la suite des cours pour pouvoir faire encore plus de choses ! Mais c’est à ce moment que le petit ange sur mon épaule m’interpella : « Mathieu, ne fais jamais ce que tu ne peux défaire avant d’avoir réfléchi à ce que tu ne pourras plus faire une fois que tu l’auras fait ». Hmm… il avait entièrement raison !(?)

C’est pour ça que je décidai plutôt de mettre en sourdine mon envie de voir de nouvelles choses au profit d’une focalisation sur ce que j’avais déjà vu. Ainsi, je me munis de tout ce que j’avais pu retenir au cours des 4 premiers ateliers et m’installai devant la page blanche de mon éditeur. Et c’est comme ça que commença la création de ce que j’ai nommé aujourd’hui même : Counter Clockwise !!

 

⛔ Disclaimer : J’appelle ça un jeu, je lui donne un nom, j’en fait un devlog, mais gardons en tête que c’était plutôt un prototype d’entrainement pour appliquer par moi même les apprentissages des ateliers gratuits ⛔

 


Gameplay : Vous contrôlez un petit carré qui doit sortir d’un labyrinthe découpé en plusieurs niveaux. Le seul problème est que notre petit carré avance tout seul une fois lancé, et ne peut tourner que sur sa gauche. Votre but est donc d’allier timing et décisions, pour le faire sortir.


Cheminement : La mise en place du personnage et de ses contrôles était assez intuitive, la mécanique de déplacement étant assez simple. Pour la création de la map, je me suis inspiré de l’atelier Casse-Briques pour créer la structure du premier niveau sous forme de tableau à deux dimensions. A ce moment la j’avais les fondations de mon jeu et j’allais bientôt être confronté à ma première difficulté : les collisions.

J’avais commencé à reproduire le même système de collisions que dans le casse-brique, c’est à dire en positionnant les coordonnées du joueur dans une ligne et une colonne, et en checkant dans le tableau si ces coordonnées correspondent à un mur. Sauf que je ne pouvais pas me permettre qu’une partie de mon carré navigue dans un mur, tant que son centre n’y était pas. La collision devait être bien plus précise. Après quelques manipulations pour essayer de contourner le problème, j’ai bricolé une solution : plutôt que de suivre les coordonnées du joueur, j’ai tracké les coordonnées des coins avant-gauche et avant-droit du joueur, car le carré avançant tout droit, ce sont ces deux derniers qui vont être exposés aux collisions et c’est lorsque l’un d’entre eux se retrouve dans une ligne-colonne occupée par un mur, qu’une collision est détectée.

A partir de ce système de collision, il a été plutôt aisé d’intégrer à mon niveau d’autres éléments avec lesquels interagir :

  • une sortie pour passer au niveau suivant
  • un accélérateur pour augmenter la vitesse du joueur
  • un mur qui bump le joueur et change sa direction

Sur ces fonctionnalités, il n’y a pas eu de difficultés majeures. La seule prise de tête a été sur une animation que je voulais mettre sur les murs rebondissants pour rendre le jeu un peu plus vivant. N’ayant pas de paramètre scale dans la fonction love.graphics.rectangle, le problème était que l’animation de ces murs au niveau de leur hauteur et de leur largeur se faisait à partir du coin supérieur gauche ce qui ne rendait pas très bien visuellement, et qui n’était carrément pas visible du coup pour les murs situés en bas de l’écran (l’animation ayant donc lieu hors écran). Pour palier ce problème, à défaut d’avoir trouvé meilleure solution, j’ai ajouté à l’animation de scaling, une animation de translation pour donner l’illusion de scaling de chaque côté à partir du centre !

Pour le système de niveau, j’ai créé une fonction StartLvl() qui réinitialiserait certaines variables comme par exemple la position du joueur ou sa direction de départ, ce qui permet de recommencer le niveau en cas d’échec, ou de passer au niveau supérieur si on a atteint la sortie. Les niveaux ont quant à eux été placés dans un deuxième fichier.lua pour ne pas trop encombrer mon main.lua avec des tableaux.

Une fois toutes ces fonctionnalités terminées j’ai un peu galéré sur le level design, les possibilités dues aux déplacements étant assez limitées. J’ai donc préféré ne pas trop m’attarder la dessus, car ce n’est pour le moment pas ma priorité. Je suis donc resté sur un échantillon de 7 petits niveaux.

Et enfin, même si je n’avais encore rien vu de toute ça, je n’avais pas envie de proposer un jeu sans menu d’accueil et sans sons. Pour les sons (que j’avais obtenus antérieurement dans un bundle de ressources), j’ai juste utilisé la documentation pour les insérer aux moments opportuns. Pour le menu d’accueil et les crédits de fin, j’ai un peu grugé je pense, car ce ne sont en fait que deux niveaux dans lesquels je modifie le comportement du joueur.


Ressenti : Même si je ne suis pas vraiment satisfait du résultat, je suis plutôt content d’avoir d’avoir créé quelque chose sans copier bêtement le code d’un tuto. Je suis content d’avoir été confronté à des difficultés d’implémentation et des bugs et d’avoir pu les résoudre tout seul. Je suis content d’avoir compris tout ce que j’ai codé. Et surtout, je suis content de me dire que je ne sais encore rien et que chacun des petits projets que je vais entreprendre va me permettre d’affûter mes connaissances et compétences.


Sur ce, je vous remercie de m’avoir lu. N’hésitez surtout pas à balancer des remarques, que ce soit sur le devlog ou sur le jeu, ça m’aidera pour les prochaines fois !

Des bisous,

Dipsy974

Comments (6)

GG !
Il y a plein de petites idées bien sympas, le fait de rebondir et que du coup ça fait changer ta direction pour te permettre de tourner là où tu veux ^^

Un futur concurrent à surveiller de près (pour ne pas qu’il nous rattrape)

Excellent !
T’as la bonne dynamique : celle de se sortir les doigts !
Continue comme ça, fais ce que tu peux avec ce que tu connais, et tu viens de nous donner une nouvelle preuve qu’on peut faire des trucs tops avec juste la base.
GG.

PS: t’as raison JaDona, la concurrence va être rude 😉

Merci ! Je suis pressé de me lancer sur un prochain projet avec les futures connaissances 😀 Mais tout comme JaDona je dois focus sur le dev web en ce moment donc ça risque d’être dans longtemps ^^ »

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.