Le but de cette page est de mieux comprendre quelle forme ont les structures que vous serez amenés à manipuler avec PyRat.
Prendre en main les structures
Lancez python dans un terminal (python3 si vous utilisez Ubuntu).
Puis copiez-collez le code suivant :
1 2 3 4 5 6 7 |
mazeMap = {(0, 0): {(1, 0): 1}, (0, 1): {(0, 2): 1, (1, 1): 1}, (0, 2): {(0, 1): 1, (1, 2): 3, (0, 3): 1}, (0, 3): {(0, 2): 1}, (1, 0): {(0, 0): 1, (2, 0): 1}, (1, 1): {(0, 1): 1, (2, 1): 1}, (1, 2): {(0, 2): 3, (1, 3): 1}, (1, 3): {(2, 3): 1, (1, 2): 1}, (2, 0): {(1, 0): 1, (3, 0): 1}, (2, 1): {(3, 1): 1, (1, 1): 1}, (2, 2): {(2, 3): 8}, (2, 3): {(1, 3): 1, (2, 2): 8, (3, 3): 1}, (3, 0): {(2, 0): 1, (4, 0): 1, (3, 1): 1}, (3, 1): {(2, 1): 1, (4, 1): 1, (3, 2): 1, (3, 0): 1}, (3, 2): {(3, 1): 1, (4, 2): 1}, (3, 3): {(2, 3): 1}, (4, 0): {(3, 0): 1}, (4, 1): {(3, 1): 1}, (4, 2): {(3, 2): 1, (4, 3): 1}, (4, 3): {(4, 2): 1}} mazeWidth = 5 mazeHeight = 4 playerLocation = (0, 0) opponentLocation = (4, 3) piecesOfCheese = [(1, 0), (4, 2), (0, 3)] timeAllowed = 2000 |
Vous avez à présent un environnement qui ressemble à celui qui sera disponible à l’intérieur de la fonction “preprocessing” ou “turn” lorsqu’elles seront appelées.
Commençons par les choses simples. Les variables playerLocation et opponentLocation sont des couples d’entiers. on peut accéder à chacune des coordonnées de la façon suivante :
1 2 3 |
>>> playerx, playery = playerLocation >>> print("les coordonnées du joueur sont (" + str(playerx) + ", " + str(playery) + ")") les coordonnées du joueur sont (0, 0) |
Les morceaux de fromage sont stockés dans une liste de couples d’entiers. Voici quelques manipulations de cette structure :
1 2 3 4 5 6 7 |
>>> piecesOfCheese[1] (4, 2) >>> piecesOfCheese[-1] (0, 3) >>> lastCheesex, lastCheesey = piecesOfCheese[-1] >>> lastCheesex 0 |
La carte du labyrinthe est une structure plus complexe, il s’agit d’un dictionnaire associant des couples à des dictionnaires, lesquels associent des couples à des entiers. Voici quelques exemples de manipulations :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
>>> mazeMap[(2,1)] # nous donne les voisins de la case (2,1) avec les pondérations associées {(3, 1): 1, (1, 1): 1} >>> for (a,b) in mazeMap[(2,1)]: ... print(str(mazeMap[(2,1)][(a,b)])) ... 1 1 >>> mazeMap[(2,1)][(2,0)] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: (2, 0) >>> for (x,y) in mazeMap: ... for (xx,yy) in mazeMap[(x,y)]: ... if mazeMap[(x,y)][(xx,yy)] > 1: ... print("Il y a de la boue entre (" + str(x) + "," + str(y) + ") et (" + str(xx) + "," + str(yy) + ")") ... Il y a de la boue entre (0,2) et (1,2) Il y a de la boue entre (1,2) et (0,2) Il y a de la boue entre (2,2) et (2,3) Il y a de la boue entre (2,3) et (2,2) |
N’hésitez pas à manipuler ces structures pour bien comprendre comment elles fonctionnent.