Mini-Projet
Travail effectué
J’ai choisi les types suivants :
ball : {id : int; pos : Position.t}{.ocaml} - la donnée d’une balle correspond à un identifiant (id) unique, et à la position où se trouve la balle dans le plan.move : {ball : ball; dir : direction}{.ocaml} - un “move” est le mouvement d’une balle dans une direction donnéegame : ball list{.ocaml} - à un instant donné, l’état du jeu est donné par les balles présentes sur le terrain, et leurs positions respectives
et complété le fichier rule.ml, la fonction loop (en donnant la possibilité de rejouer la partie précédente) dans game.ml, avant d’implémenter le solver par la méthode de backtracking préconisée (questions 0,1, et 2).
Améliorations mineures :
- dans
game.ml > create_game ():- j’ai rendu impossible la superposition de boules, en remplaçant à la condition
if 0 <= x' && x' < max_x && 0 <= y' && y' < max_y thenpar :if 0 <= x' && x' < max_x && 0 <= y' && y' < max_y then && not (Rules.is_ball (Rules.new_game l) p) then
NB : Par évaluation paresseuse, la fonction “coûteuse” (linéaire en le nombre de boules)
Rules.is_ballne sera pas évaluée si la position de la boule placée est trivialement invalide (i.e : en dehors de la grille). - j’ai rendu impossible la superposition de boules, en remplaçant à la condition
- j’ai complété la documentation du fichier
position.mli
Bévues
- dans
game.ml > create_game ():- j’ai essayé de remplacer
let p = D.position_of_coord x y in let (x',y') = Position.proj_x p, Position.proj_y p in (* balls can not be outside the grid *) if 0 <= x' && x' < max_x && 0 <= y' && y' < max_y then(ce qui semblait redondant) par
let p = D.position_of_coord x y in (* balls can not be outside the grid *) if 0 <= x && x < max_x && 0 <= y && y < max_y then
Mal m’en a pris ! Il m’a fallu un temps fou avant de comprendre qu’il s’agissait de cette modification en apparence anodine (et pas d’autres plus délicates), qui était à l’origine du fait que les boules ne s’affichaient plus, ultérieurement (bien que que le code compilait) ! Eussé-je pris la peine de lire l’implémentation de
draw.ml > position_of_coord x y, ça ne serait pas arrivé ! - j’ai essayé de remplacer
Leave a comment