Solitaire
Énoncé
Dans cet avant-dernier TP de BPI, on va utiliser la récursivité pour trouver la solution d'un jeu classique : le jeu du solitaire.
L'objectif de ce jeu est de vider le plateau de tous ses pions sauf un, et il existe différentes formes de plateau. Pour réaliser un mouvement, on prend un pion qui saute au-dessus de l’un de ses voisins avant d’atterrir dans une case vide. Pour plus d’informations sur le jeu, vous pouvez consulter sa page Wikipédia.
Dans ce mini-projet, le plateau de jeu sera un triangle avec 15 cases, les pions seront représentés en blanc et le cases vides en noir comme l'illustre l'image ci-dessous :
Nous vous fournissons un programme solitaire.py ainsi que le module plateau.py qui va avec et dont on peut voir le code ci-dessous.
solitaire.py
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
|
plateau.py
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
|
Dans un premier temps, il est recommandé de jouer avec le programme en le lançant et d'analyser le code pour comprendre son fonctionnement.
Ensuite, il est demandé d'implémenter la fonction récursive calcule_solution
dont la spécification est rappelée ci-dessous :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Correction
Cliquez ici pour révéler la correction.
Voici le code de correction :
solitaire.py
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
plateau.py
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|