Un Super RPG Dossier
Transcription
Un Super RPG Dossier
ISN Un Super RPG Un Super RPG Dossier Mael Hatrix Le Garrec Dominique 4 Février 2013 1 Evild Haas ISN 1 Un Super RPG Constitution du programme Code Fichiers de code nécessaires au bon fonctionnement du programme. 1. RPG.py : code principal du programme. 2. classes.py : regroupe les fonctions et classes du jeu en rapport avec l'exploration du monde. 3. GameFonctions.py : regroupe les fonctions en rapport avec les caractéristiques du personnage incarné. 4. FightFonctions.py : regroupe les fonctions en rapport avec les combats. 5. creer.py : créateur du jeu permettant de créer en autre des cartes. 6. png.py et tkinter_png.py : charge des images au format png pour tkinter. Ressources Bases de données Les bases de données contiennent la majorité des ressources utilisées 1. Clans : clans des personnages. 2. Etat : états possibles lors des combats. 3. items : objets à ramasser, à utiliser dans le jeu. 4. sauvegarde : sauvegardes du jeu (objets, quêtes, etc). 5. Mobs : monstres du jeu en combat. 6. MyCharacters : personnages crées par le joueur. 7. pnj : personnages non joueurs. 8. quete : quêtes du jeu. 9. Sorts : sorts du jeu en combat. Autres Les autres ressources n'étant pas des bases de données, toutefois nécessaires. 1. images : images utiles au programme. 2. musique : les musiques du jeu.. 3. map : cartes du jeu. 4. polices : contient les polices utilisées par le jeu. 5. textures : images utilisées pour les cartes. 2 Dépendances Pour pouvoir lancer le jeu, il faut installer les logiciels suivants. 1. python 3 2. pygame 1.9.1 3. python-tkinter sous linux 4. les ressoures citées plus haut 2 ISN 3 Un Super RPG Principes du jeu Il faut tout d'abord savoir que Un Super RPG , notre projet, est très modulable. On peut créer quasiment tous les éléments du jeu sans avoir à modier le code. Notre projet n'est donc en lui-même pas un jeu mais la base d'un jeu, le support de celui-ci. Toutefois, une démonstration technique avec quelques éléments est fournie pour voir les capacités du projet. Notre projet s'apparente beaucoup à la série des jeux Pokémon . Le joueur incarne un personnage vu de dessus dans un monde et peut y accomplir des quêtes en interaction avec des personnages non joueurs (PNJs). Pour réussir ces quêtes qui peuvent prendre plusieurs formes, comme ramener un objet à un personnage, le joueur pourra être confronté à des monstres lors de combats en évoluant sur plusieurs cartes et pourra également utiliser des objets trouvés ou donnés. Le personnage possède un niveau qui augmente au l des quêtes et des combats, pouvant être un pré-requis pour commencer de nouvelles quêtes et ainsi avancer dans le jeu. Les personnages non joueurs sont en grande partie responsables de l'immersion du joueur dans le jeu. Grâce à leurs dialogues et leurs quêtes, ils mettent en place un scénario, une histoire dans un certain univers. 4 Implantation Figure 1 Un village avec le joueur en bleu en son centre 3 ISN 4.1 Un Super RPG Cartes Les cartes sont la base du jeu. C'est sur celles-ci qu'évolue le joueur. Une carte a une taille de 30*30 cases. Chaque carte est un chier texte. Chaque ligne de ce chier constitue une zone ayant certaines propriétés séparées par des points-virgule. 3 grandes parties sont à distinguer. Premièrement, les 4 cartes adjacentes sont placées au début du chier, an de savoir quelle carte acher quand le joueur quitte celle sur laquelle il se trouve. Dans la majeure partie de cas une ligne comporte les coordonnées de départ et de n d'une zone ainsi que la texture de cette zone et un booléen indiquant si la zone est traversable ou non. Des paramètres facultatifs comme la téléportation vers d'autres coordonnées peuvent être ajoutés ou encore si la texture doit se trouver au premier plan, devant le joueur (cime d'un arbre par exemple). Certaines lignes décrivent des zones de combat. Elles présentent également les coordonnées de départ et de n de la zone. La propabilité de rencontrer un monstre est ensuite renseignée puis l'ID des monstres et leur probabilité d'apparition. La fonction charger_carte() est donc utilisée pour charger les cartes du jeu placées dans le dossier map. Des expressions régulières (regex) sont utilisées pour diérencier chaque ligne d'une autre. Les directions (cartes adjacentes) doivent toutefois êtres placées dans les 4 premières lignes. Les zones de combat sont ajoutées dans la liste aggro , contenant les coordonnées de la zone, les probabiltiés d'agression et les monstres concernés. Le programme crée ensuite une liste coords contenant chacune de ces lignes en séparant chaque information utile (premières coordonnées, secondes, textures...). Si la zone est dénie comme non traversable, les coordonnées sont ajoutées à la liste collisions . Chaque coordonnée de la zone est ainsi ajoutée ainsi que le nom de la texture dans la liste bloc servant à l'achage de la carte. Si la ligne contient des informations de téléportation, celles-ci sont ajoutées dans la liste tp . 4 ISN 4.2 Un Super RPG Bouger le personnage Le personnage peut se déplacer sur les cartes via la fonction bouger_perso(). Cette fonction se charge des déplacements dans les quatres directions, ainsi, le code pour une direction est similaire à une autre. On commence par tester l'orientation du personnage. Si celle-ci ne correspond pas à la direction vers laquelle il veut aller, on ache une autre image du personnage. Si le personnage pointe dans la bonne direction, on vérie ensuite dans la liste collisions de la carte si la position de la case visée y est présente. Si oui, on ne se déplace pas. Si non, on change la position du personnage si elle est supérieure à 0 et inférieure à 570 (bornes de la carte) ou on change de position ainsi que de carte. Après ces déplacements sont ensuite testées les téléportations (porte d'une maison, trou, etc). On parcourt ainsi la liste tp de la carte et on vérie si des coordonnées des téléporteurs existant concordent avec notre position actuelle. Certaines zones de téléportation requierent un objet pour pouvoir être téléporté (clef d'une porte par exemple), on vérie ainsi si l'objet est présent dans l'inventaire du personnage. Si la zone ne requiert pas d'objet ou si le personnage a l'objet sur lui, ce dernier se fait téléporter. Dans le cas contraire, on message s'ache, expliquant au joueur quel objet il doit posséder pour pouvoir passer. Les déplacements terminés, on ache la carte au moyen de la fonction cher_monde(). a- Viennent ensuite les combats. On vérie si on se trouve dans une zone de combat via la liste aggro de la carte. Si tel est le cas, on utilise la fonction randrange() pour savoir si l'on va se faire attaquer ou non, la probabilité d'agression de la zone étant renseignée. On réutilise la fonction randrange() pour déterminer quel monstre va nous attaquer, chacun ayant une probabilité diérente. Un monstre ayant été choisi, on peut lancer le combat via la fonction StartFightMob du chier FightFonctions.py, prenant en paramètre ledit monstre. Une fois le combat ni, on ache de nouveau la carte avec la fonction acher_monde(). 5