Projet Minecraft - 8 - fabriquer des nouveaux objets

Nous allons voir ici comment programmer dans ton jeu les règles de fabrication de nouveaux objets à partir des ressources existantes. C'est la partie "craft" de Minecraft.

Supposons, par exemple, que nous avons cette liste de ressources:

On peut supposer que tu n'as pas de FEU dans ton stock au départ, mais que tu peux en fabriquer en combinant 2 ressources de BOIS et 2 ressources de ROCHE qui sont en stock.

Dans un premier temps, nous allons devoir améliorer notre code pour être capable de placer de multiples ressources sur notre carte. Actuellement, voici le code qui permet de placer de l'eau:


Cela marche très bien, mais si nous avons 12 ressources différentes sur notre jeu, nous devons copier-coller ce code 11 fois!

Nous pouvons simplifier le code en créant un nouveau dictionnaire, qui nous dit quelle touche est affectée à quelle ressource:

A présent, il suffit de faire une boucle pour vérifier, pour chaque ressource du dictionnaire "pilotage", si la touche correspondante a été pressée:

La seule chose qui a changé dans ce code est qu'on ne vérifie plus les événements de touches spécifiques, mais qu'on vérifie les événements sur toutes les touches référencées dans le dictionnaire "pilotage".

Du coup, il est possible de définir autant de ressources qu'on veut, reliées chacune à une touche du clavier, et la seule chose que nous avons à faire est d'ajouter cette ressource au dictionnaire "pilotage" (et bien sûr, d'ajouter l'image de la ressource, etc.).

Nous allons encore utiliser un dictionnaire pour définir les règles de fabrication de nos nouveaux objets:

Ce dictionnaire, nommé "artisanat", relie les objets à fabriquer à un autre dictionnaire, contenant les objets nécessaires à la fabrication, et leur quantité.
Si nous voulons savoir comment fabriquer du feu, nous pouvons simplement ajouter la ligne suivante à notre jeu:

artisanat[FEU]

Ceci afficherait le dictionnaire {BOIS : 2, ROCHE : 2}. Donc, pour fabriquer un objet, nous devons passer en boucle sur chaque objet de notre dictionnaire, et vérifier si nous avons assez de stock pour le fabriquer. Si tel est le cas, nous devons ajouter 1 au stock de l'objet que nous avons fabriqué, et enlever du stock tout ce que nous avons utilisé pour le fabriquer.

Voici le code dont nous avons besoin:

Tu remarqueras l'utilisation de la variable "peutLeFaire" qui permet de vérifier en continu si l'objet peut être fabriqué.

Si à n'importe quel moment, nous constatons qu'il n'y pas assez de stock pour fabriquer un objet, la valeur de "peutLeFaire" devient "False", ce qui signifie que l'objet ne sera pas fabriqué.

Maintenant que nous savons fabriquer des objets, il nous reste à déterminer quel événement (clavier ou souris) lancera la fabrication d'un nouvel objet. Dans mon jeu, j'ai décidé qu'un appui sur une touche ('f' pour feu, 's' pour sable, etc.) déclenchera la dépose d'un objet en stock sur la carte, mais qu'un appui sur la touche d'un objet ('f' pour feu, 's' pour sable, etc.) en gardant en même temps le bouton gauche de la souris pressé lancera la fabrication de cet objet.

Cela signifie que si la touche d'un objet est pressée, nous devons simplement vérifier si le bouton de la souris est pressé aussi. Si tel est le cas, nous déclenchons la fabrication de l'objet, sinon nous le déposons sur la carte.

Il y a une façon simple dans pygame de vérifier si le bouton de la souris est pressé:

if pygame.mouse.get_pressed()[0]:

Voici le code pour fabriquer, ou placer une ressource en réponse à un appui de touche et/ou à un clic de souris:

Défi: crée autant de ressources et de règles de fabrication que tu le souhaites!