|
Last update: 25-11-2023 |

type vaisseau = {
mutable vaiss_x : float; (* abscisse du vaisseau *)
mutable vaiss_y : float; (* ordonnee du vaisseau *)
mutable vaiss_angle : float; (* direction de deplacement en radians *)
mutable vaiss_vitesse : float; (* vitesse du vaisseau *)
mutable vaiss_pt_vie : int; (* nombre de points de vie restant *)
vaiss_couleur : Graphics.color; (* couleur du vaisseau *)
};;
type balle = {
mutable balle_x : float; (* abscisse de la balle *)
mutable balle_y : float; (* ordonnee de la balle *)
mutable balle_angle : float; (* direction de deplacement en radians *)
balle_couleur : Graphics.color; (* couleur de la balle *)
};;
type cube = {
left : float; (* abscisse du coin inférieur gauche *)
bottom : float; (* ordonnée du coin inférieur gauche *)
right : float; (* abscisse du coin supérieur droit *)
up : float (* ordonnée du coin supérieur droit *)
};;
Utilisez ce fichier, ces types vous seront particulièrement utiles
pour les TME suivants. cree_cubes :int -> Types_serveur.cube list
qui, étant donné un nombre x, renvoie une liste de x obstacles placés
« presque » aléatoirement sur le plateau de jeu. Par « presque »,
on entend qu'une grille dont le maillage a la taille d'un obstacle est plaquée
sur le plateau de jeu et que les cubes sont placés aléatoirement à
l'intérieur de ce maillage (comme le montre la figure 1).
Ceci permet d'assurer que les vaisseaux spatiaux peuvent toujours se faufiler
entre 2 obstacles non contigus.
aide_main : unit -> unit |
||
registered_between : (float * float -> float * float -> float * float -> bool) ref |
||
registered_client : (Unix.file_descr -> unit) ref |
||
registered_cree_cubes : (int -> Types_serveur.cube list) ref |
||
registered_cree_vaisseau : (Graphics.color -> bool) ref |
||
registered_detruit_vaisseau : (Graphics.color -> unit) ref |
||
registered_get_cube_inter_segments : (float -> float -> ((float * float) * (float * float)) list) ref |
||
registered_init_client : (in_channel -> out_channel -> Graphics.color ref -> string) ref |
||
registered_inter_cubes : (float -> float -> ((float * float) * (float * float)) list -> bool) ref |
||
registered_inter_plateau : (float -> float -> bool) ref |
||
registered_inter_vaisseaux : (float -> float -> Graphics.color -> bool) ref |
||
registered_intersect_segment : (float * float -> float * float -> float * float -> float * float -> bool) ref |
||
registered_left : (float * float -> float * float -> float * float -> int) ref |
||
registered_mise_a_jour : (unit -> unit) ref |
||
registered_mise_a_jour_balles : (unit -> unit) ref |
||
registered_mise_a_jour_pos_balles : (unit -> unit) ref |
||
registered_mise_a_jour_vaisseaux : (unit -> unit) ref |
||
registered_traite_action_joueur : (Graphics.color -> Jeu.action -> unit) ref |
open Aide_serveur puis de faire un
appel à aide_main(). Comme vous le voyez, toutes les fonctions
« registered_xxx » sont des références sur des fonctions. Vous pouvez
donc remplacer leurs valeurs par celles de vos propres fonctions. Ainsi, pour
tester votre cree_cubes, il suffit d'évaluer l'expression :
registered_cree_cubes := cree_cubes;;puis d'appeler aide_main(). Cela lance alors le serveur OcamlPilotd. Essayez et vérifiez le résultat avec votre propre client.
inter_plateau : float -> float -> bool qui,
étant donné les coordonnées du centre d'un vaisseau spatial, renvoie un booléen
indiquant si le vaisseau se trouve à l'intérieur de l'arène de jeu. Enregistrez
votre fonction dans le serveur en utilisant l'expression :
registered_inter_plateau := inter_plateau;;
inter_vaisseaux : float -> float -> Graphics.color -> bool
qui, étant donné les coordonnées du centre d'un vaisseau spatial ainsi que sa
couleur, renvoie un booléen indiquant si ce vaisseau a une intersection non vide
avec un autre vaisseau. Vous supposerez qu'il existe une variable globale
vaisseaux : Types_serveur.vaisseau list ref contenant la liste de tous
les vaisseaux spatiaux du jeu. Cette variable a, bien entendu, été déclarée dans
le fichier aide_serveur. Enregistrez votre fonction inter_vaisseaux
et testez votre serveur.traite_action_joueur : Graphics.color -> Jeu.action -> unit
qui, étant donné la couleur d'un vaisseau spatial et une action (GAUCHE,
ACCELERE, etc), met à jour l'angle du vaisseau concerné et sa
vitesse. Si l'action consiste à tirer une balle, il faut rajouter celle-ci
dans la liste des balles du jeu. Cette dernière est stockée dans une variable
globale déclarée dans le fichier aide_serveur et répondant au doux
nom de balles : Types_serveur.balle liste ref.