Skip to content

finaritraRavelonarivo/rpg_extension

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Markdown Logo

The lonely adventurer

Bienvenue dans le jeu the lonely adventurer. Votre but sera de devenir un aventurier hors pair. Pour ce faire vous vous déplacerez de hub en hub afin d'acquérir fortune et renommée.
Êtes-vous prêt à relever le défi ou périrez vous comme vos prédécesseurs?


Sommaire

  • Jeu de base
    • Comment jouer
    • Les classes
  • Extension
    • Marchand
    • Fuir
    • Tableau des scores
    • Coffre
    • Nouvelle fiche de personnage
  • Exécution
    • Jeu de base
    • Extension
  • Rapport
    • Conception
    • Développement jeu de base
    • Développement extensions
  • Conclusion

Jeu de base

Dans cette version de base du jeu, vous retrouverez tous les éléments classiques d'un rpg envoutant et palpitant.
Du monstre qui règne dans les bois au loot et xp à gogo. Prenez place dans une aventure simple, mais efficace depuis le confort de votre canapé.

Comment jouer

Lors du lancement du jeu, vous pourrez choisir un nom, puis choisirez votre genre, enfin vous choisirez votre classe parmi un choix de 3 classes exceptionnel.
Vous voilà fin prêt à partir à l'aventure avec votre personnage fraichement créé.

Votre but final est d'atteindre le niveau 10 ou périr, pour ce faire vous arriverez à un hub central. Ce hub vous permet de choisir parmi plusieurs actions.
Vous pourrez:
-continuer votre chemin vers le prochain hub
-dormir pour regagner des points de vie
-manger si vous avez du poulet
-visualiser l'état de votre personnage
-quitter l'aventure

Continuer votre chemin vous permet d'aller vers le hub suivant. Vous pourrez rencontrer des monstres et ainsi gagner en niveau et looter des items utiles à votre aventure.
Dormir est indispensable pour survivre, mais surtout vous récupérerez de la vie lors de votre sommeil. Mais attention aux mauvaises rencontres.
Manger il vous faudra de quoi manger pour pouvoir profiter de cette action qui vous revigorera.
Visualiser l'état du personnage vous permet de planifier votre prochaine action et peut-être déjouer un peu plus longtemps les plans de la mort.
Quitter parce que finalement chaque aventurier mérite une retraite pour éviter la mort et profiter de ses richesses.

Les classes

Le guerrier:

En armure et très fort, le guerrier est une classe qui joue beaucoup sur la chance.
Les guerriers tapent très fort, mais leur armure bloque leur mouvement. Ils utilisent leur force pour compenser leur manque de mobilité.
C'est une classe parfaite si vous avez beaucoup de chance et aimez les gros dégâts.

L'archer:

Vivant dans la forêt la plupart de son temps, l'archer connait la nature et sait survivre comme personne une fois dehors. Très agile, et très précis l'archer et un super combattant à distance.
Cette classe est faite pour vous si vous aimez toucher votre cible à chaque attaque.

Le magicien:

Intelligent et studieux, le magicien aime étudier et apprendre davantage sur le monde qui l'entoure. Le magicien n'est pas le plus à l'aise dans la nature, mais ces années d'études lui permettent de compenser en adaptant leur environnement. Une très bonne classe pour les gens voulant une classe équilibrée


Extensions

Une fois que vous vous serez familiarisé avec le jeu de base. Vous pourrez jouer avec quelques extensions qui rajouteront du contenu au jeu.

Marchand

Le marchand redonne un vrai intérêt aux pièces. Vous pourrez maintenant dépenser vos pièces contre des objets utiles à votre aventure.
Vous trouverez le marchand au niveau de chaque hub. Ils vous proposeront des items avec des prix variables à chaque hub, donc n'hésitez pas trop à acheter un objet utile et pas cher si vous tombez sur une super affaire.

Fuir

Fini de mourir face à un golem alors que vous êtes level 1. Dans cette extension vous pourrez fuir à chaque combat.
Deux options s'offrent à vous: fuir en courant au risque de vous faire rattraper par le monstre qui vous chasse et devoir combattre ou lui offrir une éponge pour pouvoir fuir à coup sûr.
pensez donc à garder vos éponges pour les pires situations

Tableau des scores

Vous pourrez enfin montrer vos talents à vos amis grâce au tableau des scores.
Pour marquer des points et voir votre score dans le tableau des scores, il vous faudra soit atteindre le level 10, soit quitter le jeu depuis le hub.
Un personnage mort ne donne pas de score, donc choisissez quand quitter pour maximiser votre score.
Le score sera calculé en fonction de vos pv, nombre d'objets dans votre inventaire, mais surtout votre niveau

Coffre

Pour vous offrir plus de chance de réussir dans votre aventure et vous donner envie de continuer votre aventure, nous avons eu l'idée d'ajouter un coffre à chaque hub que vous visiterez. Profitez d'un coffre unique à chaque hub et profitez-en pour battre votre score.

Nouvelle fiche de personnage

Cette fiche de personnage améliorée vous indiquera beaucoup plus d'informations et vous permettra de mieux planifier votre aventure. Parmi les nouveautés, vous trouverez: le nombre de points d'expérience avant votre montée de level, votre chance de toucher, ainsi que les dégâts de votre personnage.


Exécution

Pour lancer le jeu il vous faudra un IDE (de préférence vscode) avec ocamlc installé sur votre ordinateur. Il vous suffira alors d'éxecuter les deux commandes suivantes dans l'ordre:

Jeu de base

ocamlc Objet.ml Monstre.ml Personnage.ml GestionAventure.ml main.ml -o rpg.exe
ocamlrun rpg.exe

Extension

ocamlc Objet.ml Monstre.ml Personnage.ml Score.ml GestionAventure.ml main.ml -o rpg.exe
ocamlrun rpg.exe

Rapport

Conception

Avant de commencer le développement, nous avons décidé de mettre à plat le projet pour produire un diagramme de classe. Cette étape nous a été très utile lors de la phase de développement, car elle nous a permis de nous coordonner dès le début, mais surtout d'avoir une idée générale du projet.
Nous avons déjà essayé de programmer sans conception lors des précédents projets et le résultat été très loin d'être concluant (fonction en double, mauvaise répartition du travail...).
Ce projet nous a permis de voir qu'une bonne conception, nous permettait d'avoir un projet plus propre et plus rapide à produire.

Développement jeu de base

Badet Maxime:

  • GestionAventure.ml
    • exception Quitte_le_jeu permet de savoir quand le joueur quitte le jeu
    • fonction delimiteur affiche un délimiteur visuel entre chaque action dans le terminal
    • fonction read_nom vérifie la validité d'un nom de personnage
    • fonction read_genre retourne un genre en fonction de la saisie de l'utilisateur
    • fonction read_classe renvoie la classe désirée lors de la saisie
    • fonction read_hubAventure permet la sélection d'action dans le hub
    • fonction init_aventure initialisation de l'aventure
    • fonction malheureuse_rencontre gère les malheureuse_rencontre entre le personnage et les monstres
    • fonction hubAventure gestion des divers choix du joueur pour progresser dans l'aventure
    • fonction fin_partie gestion de l'affichage de fin de partie
  • main.ml
    • mise en place totale du main.ml
  • Monstre.ml
    • fonction message_malheureuse_rencontre affiche les messages liés aux malheureuses rencontres
  • Personnage.ml
    • exception Personnage_mort permet de savoir si le personnage est mort
    • exception LevelMax permet de savoir si le personnage est level 10
    • fonction init_perso initialise le personnage
    • fonction etat_sac permet d'afficher le contenu du sac du joueur
    • fonction mis_a_jour_pv gère le changement de point de vie du joueur et vérifie s'il est mort
    • fonction avoir_objet vérifie si le joueur possède un objet passé en paramètre
    • fonction modifier_sac gestion de la modification du contenu du sac du joueur
    • fonction manger gère l'action de manger du personnage
    • fonction changement_niveau gestion de la montée de niveau du personnage et lève une exception au level 10
  • Divers
    • mise en place de l'ocamldoc
    • ajout des signatures sur les modules
    • création du markdown

Bernier Guillaume:

  • Objet.ml
    • définition de tous les types
    • fonction init_objet qui permet de choisir un objet aléatoirement
    • fonction affiche_objet qui retourne un string de l'objet passé en paramètre
  • Personnage.ml
    • définition de tous les types
    • fonction classe_genre qui renvoie un string d'une classe de personnage en fonction de son genre
    • fonction string_of_pv retourne un string du nombre de pv du personnage
    • fonction string_of_element renvoie un string d'un int en ajoutant un 0 devant les chiffres de 0 à 9
    • fonction nb_degats retourne le nombre de dégâts en fonction de la classe
    • fonction frapper renvoie les dégâts que le personnage va infliger au monstre
    • fonction message_attaque permet d'afficher les messages d'attaque du personnage

Ravelonarivo Finaritra:

  • GestionAventure.ml
    • fonction combattre gestion du combat entre un monstre et un personnage
  • Monstre.ml
    • définition de tous les types
    • fonction d renvoie une valeur aléatoire comme un dès
    • fonction init_monstre qui initialise un monstre aléatoirement
    • fonction monstre_frapper retourne les dégâts que le monstre inflige
    • fonction xp_gagne renvoie le nombre de points d'expérience que le joueur va gagner
    • fonction nom_monstre retourne un string du nom du monstre
    • fonction message_combat affichage des messages de combat du monstre
    • fonction nom_monstre_tueur_nuit retourne un string du nom du monstre qui tue le joueur dans la nuit
    • fonction monstre_vaincu affiche un message quand le monstre est mort
  • Personnage.ml
    • exception Tue_En_Dormant permet de savoir si le joueur et mort en dormant
    • fonction nb_string pour connaitre le nombre de caractères d'un string
    • fonction etat_perso gestion de la fiche de personnage
    • fonction afficher_infos_perso affiche la fiche de personnage
    • fonction afficher_sac_perso affiche le sac du joueur
    • fonction mis_a_jour_pv gère le changement de point de vie du joueur et vérifie s'il est mort
    • fonction chance_toucher recalcule les chances de toucher d'un personnage en fonction de son level
    • fonction avoir_objet vérifie si le joueur possède un objet passé en paramètre
    • fonction accord_masculin_feminin permet de choisir le bon accord de genre
    • fonction dormir gestion de l'option dormir du personnage
    • fonction changement_niveau gestion de la montée de niveau du personnage et lève une exception au level 10
    • fonction modifier_sac gestion de la modification du contenu du sac du joueur
    • fonction manger gère l'action de manger du personnage
  • Divers
    • mise en place de l'ocamldoc
    • modification pour un bon visuel du code
    • dernière vérification et mise en place du dossier à rendre

Développement extensions

Badet Maxime:

  • GestionAventure.ml
    • fonction read_fuite vérifie la saisie du joueur et affiche les choix
    • fonction fuir gestion de la fuite du joueur
    • fonction choixAventure propose de fuir ou combattre et gère l'action
    • fonction tableau_score gestion et affichage du tableau des scores
  • Personnage.ml
    • fonction nb_objet calcul le nombre d'objets dans le sac du jouer avec la quantité
    • fonction score gestion du calcul du score du joueur
  • Score.ml
    • fonction validite_ligne retourne un type somme pour chaque ligne du fichier de score
    • fonction lire_ligne ajoute chaque ligne, deux par deux dans une liste de tuple de string
    • fonction lire_fichier ouvre ou crée le fichier de score
    • fonction afficher_score affiche les 10 meilleurs scores
    • fonction ecrire_fichier écrit le nouveau score dans le fichier

Ravelonarivo Finaritra:

  • GestionAventure.ml
    • fonction marchandises génération de l'inventaire du marchand
    • fonction acheter gestion de la transaction entre le marchand et le personnage
    • fonction affiche_marchandise affichage du menu du marchand
    • fonction coffre_hub permet d'offrir un nouvel objet à chaque retour au hub
    • fonction hubAventure ajout de nouveau choix au hub
  • Personnage.ml
    • fonction etat_perso ajout de fonctionnalité supplémentaire à l'affichage de la fiche de personnage

Conclusion

Le projet nous aura pris beaucoup de temps, mais aura été très formateur. Nous avons acquis de plus grandes connaissances en ocaml, mais surtout en programmation fonctionnelle grâce à ce projet. Nous avons également découvert markdown, qui est très utile pour documenter un projet.
Nos débuts dans le projet n'ont pas été simples, mais nous avons su surmonter les problèmes et arriver à un résultat dont nous sommes fières.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages