Présentation
Server Discord
Groupes
Semaines
Git Paris Saclay
Ajoutez moi à votre git : antoine.lanco
Doc Ocaml
Cours PFA
Try Ocaml Pro
L'objectif de ce projet est de créer un jeu tour par tour où deux équipes de trois personnages s'affrontent sur une carte.
La partie se déroule sur une carte de taille arbitraire composée de cellules vides, de murs et de joueurs.
Sur cette carte s'affrontent deux équipes de trois personnages qui jouent chacun leur tour (en suivant l'ordre : personnage 1 équipe 1, personnage 1 équipe 2, personnage 2 équipe 1, ...).
Chaque personnage à ses propres caractéristiques avec des contraintes (définies plus bas) et une attaque.
Chaque personnage peut faire trois actions :
Se déplacer qui lui coute des points de mouvement (PM)
Attaquer qui lui coute des points d'action (PA)
Mettre fin à son tour
L'objectif est bien sûr de vaincre l'équipe adverse.
Pour pouvoir s'affronter, les personnages doivent être équilibrés
Contraintes :
Vie + Force = 100
Vie ≥ 1
Force ≥ 1
PA + PM = 15
Attaque -> ((Range * 10) + Dommage) - ((PA + 1) * 10) ≤ 0
Les attaques infligent des dégas en fonction de la force du personnage et des dommages de l'attaque -> (Force / 10) + (Dommage)
Dans OCaml tout est typé, mais pour passer les infos dans le réseau, il faut tout transformer en chaine de caractères ...
Chaque cellule est représentée par un caractère : '#' représente un mur, l'espace représente le vide et un entier de zéro à cinq représente un joueur
La map est représentée par une chaine de caractère où chaque caractère représente une cellule et les lignes sont séparées par le caractère '|'
Exemple de map :
┌───┐
│ 1 │ -> "#####|# 1 #|#####"
└───┘
Les personnages ont plusieurs caractéristiques :
Force (int)
Vie (int)
PA (int)
PM (int)
Attaque : Dmg (int); Range (int); PA (int)
Toutes les caractéristiques sont séparées par le caractère '|'
Exemple de personnage :
{Force : 50; Vie : 50; PA : 10; PM : 5;x : 5; y: 5; Attaque : {Dmg : 10; Range : 5; PA : 5}} -> "50|50|10|5|5*5|10|5|5"
Les personnages peuvent faire deux actions :
Attaquer une position : 1 suivi de la position xy séparés par des '|'
Se déplacer à une position : 2 suivi de la position xy séparés par des '|'
Exemple d'une action:
Attaquer la position (20,10) -> "1|20|10"
Quand c'est à vous de jouer vous devez envoyer une liste d'actions séparée par ';'.
Exemple :
Se déplacer en (20,10) et attaquer en (25,10) -> "2|20|10;1|25|10"
Pour s'affronter je vais mettre a disposition un serveur de matchmaking auquel vous allez devoir vous connecter grace au socket de la Lib Unix.
Client |
Serveur |
Commentaire |
||
---|---|---|---|---|
Nom |
-> |
Le joueur envoie son nom au serveur |
||
Perso1 |
-> |
Puis ses personnages |
||
Perso2 |
-> |
|||
Perso3 |
-> |
|||
<- |
Num |
Le serveur envoie le numero du personnage a jouer (0-5) |
||
<- |
Map |
Le serveur verifi que les personnages respecte bien les contraintes, les places sur la map et l'envoie au joueur |
||
<- |
Liste |
Liste des personnages |
||
Actions |
-> |
Le joueur envoie sa liste d'actions |
||
... |
||||
<- |
Num |
|||
<- |
Map |
|||
<- |
Liste |
|||
Actions |
-> |
|||
<- |
Num |
Si le serveur revoie 6 c'est le joueur 1 qui a gagné et 7 si c'est le joueur 2 |
Exemple de communication :
Client : "Antoine"
Client : "50|50|10|5|5*5|10|5|5"
Client : "50|50|10|5|5*5|10|5|5"
Client : "50|50|10|5|5*5|10|5|5"
Serveur : "0"
Serveur : "... ###### 1 ##### ..."
Serveur : "50|50|10|5|5*5|10|5|5;50|50|10|5|5*5|10|5|5;...;50|50|10|5|5*5|10|5|5"
Client : "2|20|10;1|25|10"
...
Serveur : 6
Pour lancer le serveur sur votre MACHINE DE LA FAC :
/./home/tp-home002/alanco/server ip
Si vous ne préciser pas d'ip le serveur se lance sur l'ip "127.0.0.1"