Home - Luclys/Projet-Rpg GitHub Wiki

Donc au moment j’écris ce truc y’a 5 modules qui sont en développement, petit sommaire :


Du coup bah je vais expliquer ce qu’ils font et ce que l’on peut faire avec dans ce doc. On commence avec les 4 classes :

1) Classes_Monstre_Perso_Item_Armes :

Alors ça c’est le module le plus important, c’est genre les racines de l’arbre t’as vu, dedans y’a les définitions de toutes les classes dans le titre (donc définition = méthodes disponible, héritage, comment les utiliser, toussa toussa.)

Je vais le dire ici mais si vous voulez pas savoir exactement tout ce qu’il se passe c’est pas la peine de le lire : on a certains héritages entre les classes pour corriger des bugs (par exemple utiliser un item) ce qui fait qu’on peut utiliser certaines méthodes sur certaines classes du coup je préviens ici parce que ça peut peut être faire de la merde (genre imagine tu missclick et ton perso boit sa hache ou s’équipe avec une potion de soin au niveau des bottes) donc en gros ça donne ça :

	PERSO → c’est la classe mère, du coup on va dire qu’elle hérite de rien (pour l’instant)
	CONSOMMABLE() → Perso
	ARMES() → Consommable → Perso
	MONSTRES() → indéterminé, sais pas si il faut qu’on le fasse hériter ou pas.

Il y a donc 4 classes, voici un petit sommaire.

  1. Perso
  2. Comsommable
  3. Armes
  4. monstres
a) Perso :

Dedans il y’a des méthodes pour

	- Créer un perso
	- Voir l’inventaire
	- Voir l’équipement
	- Voir des info banales de son perso (stats,classe,niveau,xp,$$ ,etc...)
	- Créer les stats de son perso
	- Nommer la classe de son perso
	- Se déséquiper
	- S’équiper
	- Jeter un item
	- Ajouter un item à l’inventaire

Vous vous demandez comment on utilise toutes ces superbes méthodes, c’est très simple :

  • Créer un perso : Faut juste dire a = Perso(nomduperso) et le perso aura 2 mains de l’argent, une barre d’xp un niveau et tout plein de trucs mais pas encore de stats.
  • Voir l’inventaire : Faut juste appliquer la méthode show_inventory() sur un perso et ça fait un joli affichage
  • Voir l’équipement : Faut juste appliquer la méthode show_equippement() sur un perso et ça fait un joli affichage
  • Voir des info banales de son perso: Faut le faire sur un perso « fini », qui contient des stats et nom de classe, la méthode c’est show().
  • Créer les stats de son perso : une fois que le perso est créé on le complète avec la méthode def_stats(qui contient les valeurs (en entiers) qui iront dans le dico stat)
  • Nommer la classe de son perso : faut juste utiliser def_classe(nom de la classe).
  • Se déséquiper : desequip(arme) ça va prendre l’arme et l’enlever de la partie équipement pour la placer dans l’inventaire, ça libère les mains qui étaient prises.
  • S’équiper : equip(arme) ça prend un objet de l’inventaire et ça le met dans la partie équipement si le joueur a encore des mains libres
  • Jeter un item : jeter_item(item) ça supprime de l’inventaire (à la fois la clé et la valeur)
  • Ajouter un item à l’inventaire : addToInventory(Item, quantité) ça va ajouter quantité fois dans l’inventaire l’item item.

Eheh on a déjà pas mal bossé sur une seule classe, et il en reste encore 3 c:

b) Consommable :

Petite parenthèse un consommable « fini » ça va contenir plein de valeurs :

  • Nom = Le nom...
  • Cout = son prix en boutique et son prix de revente (la moitié du prix en boutique, donc cout/2)
  • Description = Si on veut faire des easter eggs t’as vu, plus généralement ça dit que la potion rouge et bah elle te donne +2 en charisme et la puissance d’un taureau.
  • Applications = C’est la partie technique de la potion : c’est un dico, qui contient les stats qui vont être changées et COMMENT elles vont l’êtres si l’item est utilisé, exemple, une potion rouge ça donnerait application = {charisme : 2, puissance : Taureau}

#alors oui taureau ne veut rien dire, et il n’y a pas de stats puissance mais c’est un exemple.

Avec tout ce que contient le module on peut faire ça :

	- Créer un item 
	- Utiliser un item 
	- Voir les détails d’un item
	- Voir d’une façon spéciale un item (c’est pas du tout pour les joueurs;)
	- Créer un item avec une fonction

Bon ça va aller plus vite que là haut, mais je vais quand même expliquer :

  • Créer un item : faut juste taper a = Consommable(nom,cout,description,application).
  • Utiliser un item : C’est une méthode qu’on applique à un item et ou l’on entre en paramètre le perso : utiliser(perso).
  • Voir les détails d’un item : Comme pour Perso, la méthode c’est show().
  • Voir d’une façon spéciale un item : on applique spécialshow() sur l’item ciblé et ça renvoi un truc spécial parce que ça sert à enregistrer l’item (donc on s’en fout au niveau gameplay c’est plus technique).
  • Créer un item avec une fonction : Pareil que précedemment c’est purement technique et ça a servit à contrecarrer un vieux bug des familles (ou des mifa pour certains), c’est une fonction à part entière (PAS UNE METHODE) et elle s’utilise comme ça : create_item(nom,cout,description,application) (en gros elle refait ce que fait le _init)
c) Armes :

On passe à l’avant dernier : Les armes Une arme ça possède des caractéristiques sympas voici :

  • Nom = Déjà vu.

  • Coût = Déjà vu.

  • Description = Déjà vu mais là il peut contenir l’effet, genre empoisonne durant 5 tours.

  • Stats = Un peu spéciales elles sont sous la forme : Dégâts, Usure, Mains.

      Dégâts → Combien l’arme inflige de dégâts BRUTES à un ennemi
      Usure → Combien de fois peut on encore utiliser l’arme : chaque coup porté confère -1 à usure
      Mains → Le nombre de mains que prend l’arme...
    

Cette classe hérite de la classe Consommable, on peut alors utiliser ses méthodes en plus. c’est comme les objets, du coup c’est chouette, voici les méthodes :

	- Créer une arme
	- Voir les caractéristiques d’une arme

Niveau utilisation ça nous donne :

  • Créer une arme : Comme toujours suffit de créer l’objet vu que tout est dans l’init donc on fait comme ça x = Armes(nom,cout,description,stats).
  • Voir les caractéristiques d’une arme : comme d’hab, on utilise show().

Alors c’est vrai que ça fait peu, mais comme

d) Monstres :

Niveau caractéristique on a ça

  • Nom = Son nom...
  • Niveau = Son niveau...
  • XP = Le drop d’xp donné par le monstre à la fin du combat
  • Rareté = Ça influe directement sur le loot et les stats du monstres : plus il est rare plus il est fort

Ce que l’on peut faire :

	- Créer un monstre (j’explique même pas c’est pareil que les 3 dernières fois)
	- Lui donner des stats
	- Lui attribuer une rareté

ça marche comme ça :

  • Lui donner des stats : On utilise def_stats(vie,force,agilité).

  • Lui attribuer une rareté : ça se passe lors de la création de l’instance (objet de la classe), sa rareté dépends de la fonction Raritas() qui fait des pourcentages.

      On note : 
      Commun = 50 %
      Rare = 25 %
      Super Rare = 15 %
      Légendaire = 10 %
      On peut changer depuis Raritas les stats si ça convient pas.
    

Voilà donc On en a finit pour la partie 1) Classes Perso,Monstres,Armes,Conso. On passe à La 2 : La sauvegarde


2) Fonctions de Sauvegardes.

Rassurez vous, cette partie est surtout technique et pas vraiment catalogue comme celle d’avant. Donc déjà je vais vous expliquer comment on sauvegarde, l’idée générale quoi :

Premièrement il faut une destination, on va l’appeler desti. Et desti, ça contient une chaine de caractère qui mène à un répertoire. Dans ce répertoire, on va d’abord créer d’autres répertoires et des fichiers txt vides qui auront différents noms, ça c’est le travail de userino(perso). Une fois qu’Userino a finit son taf elle renvoit le travail à ses copines (elle en a 3 : SaveStats, SaveInvent et SaveUser).

**Explication superficielle : **les différentes fonctions vont ensuites enregistrer des données dans les textes crées par userino, et renvoyer le travail à leur copine qui n’ont pas encore bossé. Et au bout d’un moment, tout est sauvegardé.

**Explication un peu plus poussée : **On reprend ce que l’on vient de dire mais on se penche sur le travail en question. Pour sauvegarder on va ‘parser’ → on va mettre des caractères osef entre les choses importantes parce que quand on lit un fichier on a un BLOC de texte et si on veut seulement quelques éléments en particulier bah c’est la merde : il faut savoir quel élément on veut. Alors que si on parse, on peut split la chaine et récupérer une liste qui contient tout les éléments qu’on a rendu particuliers.

	Exemple de texte parsé avec ‘ %’ : Bob%Pyromane%12

Ce que l’on va faire c’est que l’on transformer ça en BLOC de texte et appliquer la méthode split des chaines de caractère qui va enlever un caractère et mettre sous liste tout les truc qui étaient entre…

	split('Bob%Pyromane%12') → → → [‘Bob’,’Pyromane’,’12’]

Exemple : On veut enregistrer un nom, une adresse et un code postal dans un fichier, si on les enregistre sans parser ça va donner ça :

	«Petit64chemindesoliviers06000 »

On est d’accord que c’est de la merde

alors que ça :

	L = [‘Petit’,’chemindesoliviers’,’0600’]

C’est beaucoup plus utilisable.

Mais l’adresse est pas super bien écrite. C’est pour ça qu’on utilise plusieurs fichiers parce que comme ça on peut faire ça :

	Lnom = [‘Petit’,’chemindesoliviers’,’0600’]
	Ladresse = [’chemin’,’des’,’oliviers’]
	Lcodepostal = [’0600’]

Et ça c’est beaucoup beaucoup plus lisible.

Et dans notre cas ça donne ça permet d’enregistrer l’inventaire, les stats, et le perso en lui même. L’inventaire c’est un peu spécial, vu que les consommables et les armes sont des objets un peu spéciaux il a fallut parser 2 fois, c’est pour qu’il y’a la méthode specialshow().

Ah et dernière précision les chiffres seront des caractères c’est pour ça que des fois y’a des trucs genre int(L[0]) dans le code. Voilà.


3) Fonctions de Chargements.

C’est très facile à immaginer c’est comme les jeux pour bébé, tu donne un carré à la machine, et tu lui dis ‘ça, c’est un carré’ et là machine elle va le placer dans le trou en forme de carré. Voilà j’ai tout dis. Vraiment tout. Si ce n’est que là on a pas seulement un carré et un triangle mais des stats, un inventaire et tout ça.

Aussi, on ne sauvegarde pas l’inventaire, mais on le réajoute à chaques fois : on enregistre les items et le nombre de fois où ils sont présents dans l’inventaire et au chargement on fait perso.addToInventory(item,nombre) pour chaque item.

Ça a été très chiant à faire mais c’est pas très compliqué à comprendre x)


4) Fonctions de Menu.

C’est pas encore fait, mais ça permettra de consulter les stats du perso, son inventaire ou ce genre de bails (ou aussi d’aller voir le marchand)


5) Concernant le mode AVENTURE

Ça vient d’être crée et ça va utiliser tout ce qui a été vu précedemment pour organiser le jeu. En gros, cette fonction c’est le jeu en lui même, le reste c’est ce sur quoi il se base.

L’idée c’est d’organiser le jeu de sorte à ce que le joueur ait des choix et n’ait rien à taper dans la consoles qui pourrait péter le jeu, genre il peut pas changer ses stats quoi. Les seuls moments dans lesquels il aura accès à la console ce sera à travers des inputs, donc pas de danger niveau cheats ^^


6) Checklist

❗❗⚠La checklist se trouve maintenant au lien: https://github.com/Luclys/Projet-Rpg/projects/2

TRUCS QU’ON A FAITS :

  • Définir les classes de :

      - Perso
      - Monstres
      - Consommables
      - Armes
    
  • Un système de sauvegarde opérationnel

  • Un système de chargement opérationnel

Ça semble pas beaucoup mais c’est vraiment gros et ça permet d’avancer directement vers la partie la plus intéressante : LE JEU ahah

Et pour donner un peu de challenge ou de travail, voilà tout ce qui est encore à faire.

CHEKLIST DES TRUCS À FAIRE ET QUI SONT PAS ENCORE FAITS (sans ordre de priorité)

  • Des équipements, style bouclier, plastron etc.… donc créer des parties du corps sur le perso
  • La partie Pvp
  • La partie Du Marchand → vente et revente
  • UNE HISTOIRE, IL FAUT UNE HISTOIRE, UNE TRAME SCENARISTIQUE DIGNE D’HOLLYWOOD
  • La partie succès et donc les défis aux joueurs
  • Des easter eggs
  • Un mode combat structuré : on progresse dans le donjon et au bout d’un moment on tombe contre un boss
  • Créer des boss (ce sera une classe qui sera un croisement entre monstre et perso)
  • Créer des items de rareté différente, pour pouvoir être lootés.