A partir d'un fork/clone de ce dépôt, il s'agit de réaliser le développement de l'application étape par étape.
La suite décrit le contexte général de l'application à réaliser, et indique où trouver les consignes associées à chacune des étapes.
On cherche à réaliser un jeu de simulation où des robots tentent de sortir d'un labyrinthe.
Les labyrinthes sont considérés comme des grilles dont les cases sont soit free
(on peut s'y déplacer) soit forbidden
(ce sont des murs).
Une des cases libres est la position de départ (spawn
) sur laquelle le robot est placé en début de simulation.
Une autre des cases libres (distincte de la précédente) est la sortie (exit
) que le robot doit atteindre pour réussir sa mission.
Les positions sont définies par des couples (row
,column
).
Le coin supérieur gauche du labyrinth est en (0,0)
.
Chaque position a 4 voisines selon les directions NORTH
, SOUTH
, EAST
et WEST
.
Les cases dont les positions sont en dehors du labyrinthe sont considérées comme forbidden
.
Un exemple de labyrinthe est présenté ci-dessous:
XSXX
X X
XX X
E X
XXXX
X
désigne une caseforbidden
free
- la position
(0,1)
correspond àspawn
- la position
(3,0)
correspond àexit
Une simulation implique un labyrinthe et un comportement de robot.
La simulation se déroule au tour par tour.
Avant le premier tour, le robot est placé sur la position spawn
et pointe dans une direction aléatoire.
A chaque tour, le comportement du robot est interrogé afin qu'il fournisse une action à réaliser. Le résultat de l'action est dans certains cas notifié en retour.
La partie se termine :
- par une réussite si le robot a atteint la sortie
- par un échec si le robot n'a pas atteint la sortie dans le nombre autorisé de tours (10 fois le nombre de cases de la grille)
Les actions possibles sont FORWARD_MOVE
(avancer d'une case), LEFT_TURN
(tourner à gauche), RIGHT_TURN
(tourner à droite) ou U_TURN
(faire demi-tour).
Cette action de mouvement met à jour la position du robot comme étant la voisine de la position actuelle dans la direction vers laquelle pointe le robot.
Si la position voisine est forbidden
, la position du robot reste inchangée. Dans tous les cas, la direction vers laquelle pointe le robot reste
inchangée.
Le robot est notifié du résultat de cette action par un couple (position avant, position après)
.
Ces actions de rotation mettent à jour la direction vers laquelle pointe le robot. La position du robot reste inchangée. Le robot n'est pas notifié du résultat.
Procéder dans l'ordre suivant :
- 0- Configuration du projet
- Optionnel (si cela ne pose pas de difficulté, faire la configuration à l'étape 1)
- 1- Classes simples et énumérations
- 2- Classes plus complexes
- 3- Exceptions
- 4- Collections
- 5- Abstractions
- 6- Entrées-sorties