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