Mon premier jeu en Rust et Amethyst

Motivation
Je débute sur Rust, après pas mal d’expérience dans d’autres domaines, je cherchais un nouveau langage a apprendre mais surtout me rapprocher le plus possible de la machine (Rust est avant tout un langage système).
Apprendre un nouveau langage n’est pas simple, il faut être patient, passer pas mal de temps a debbugger, apprendre de nouveau paradigme…du coup j’ai choisi de partir sur un jeu, car c’est bien connu qu’on “apprend mieux en s’amusant”
Avant de démarrer
Dans cet article, je ne décrirais ni Rust ni Amethyst, pour cela je vous renvois aux différentes documentations.
Le but de cet article est de vous partager quelques bonnes pratiques, une organisation de code, des accélérateurs dans l’apprentissage de ces technologies.
Le code source est disponible ici : https://github.com/Abacaxi-Nelson/game_part_1
Un boilerplate pour Amethys test disponible ici : https://github.com/Abacaxi-Nelson/minimal_amethyst
Mon premier jeu 2D
Ce jeu est construit autour de quatre briques principales :
- Un ensemble d’état : “Le joueur choisi sa main”, “Montrer le gagnant de la manche” etc.
- Un ensemble de composants: “Joueur”, “Score”, “Règle du jeu” etc.
- Un gestionnaire de tile, qui permet d’associer une tile a un composant: Icone “Pierre”
- Des système qui contiennent la logique métier, c’est ici que nous traiterons les interactions avec le joueur (Clic, Touche), changement d’état, mais aussi la mise à jour des tiles.
Le gestionnaire de tile, est une structure Rust qui contient l’ensemble des images utilisés dans le jeu :
Ici on déclare les différentes mains possibles, la main “Unknown” correspond à l’adversaire qui a sa main masqué.
L’ensemble des images sont disponibles dans le répertoire “assets/textures”, et le code utilisé pour charger les images au sens Amethys est ici : https://github.com/Abacaxi-Nelson/game_part_1/blob/master/src/sprite/storage.rs
Les composants sont les différents éléments graphiques de votre jeu, ce sont des structures qui implémente “Component” au sens Amethys :
Un joueur c’est un ensemble de propriété : sa taille et son type (Joueur ou Adversaire) mais aussi une tile qui est retrouvé via “get_sprite_render”.
Regardons un premier état, celui qui permet d’initialiser le premier écran :
Cette méthode est exécutée par le moteur en premier, on y vois un notion important: “data.world”; il faut voir cette dernière comme le contenant complet du jeu, on y trouvera tous les composants graphiques (player), les composants textes (score) mais aussi différentes ressources (nous allons au cours de la deuxième partie que nous allons avoir besoin de stocker les actions utilisateurs).
Cette méthode charge les deux joueurs et leurs tiles; leurs positions dans l’écran; et enfin les ajoute au conteneur “world” via la méthode “create_entity”.
Voila.. il ne vous reste plus qu’a instancier un nouveau jeu et y passer l”état de démarrage.