Langage de programmation : Python.
Le jeu de l'awalé, ou awélé ou encore kalaha, est un jeu de société africain à deux joueurs. On peut trouver les règles de ce jeu sur Wikipédia mais on va les simplifier ici. Le but est de récolter le plus de billes possibles en en prenant à son adversaire.
Initialement, chaque joueur dispose de 6 cases de jeu qui contiennent 4 billes et d'un grenier qui permet de stocker les billes gagnées, comme sur la figure suivante :
A chaque tour, un joueur choisit une de ses cases non vides et égraine les billes dans le sens inverse des aiguilles d'une montre en déposant une bille s'il passe par son grenier. Il ne peut pas déposer de bille dans le grenier de son adversaire.
S'il dépose la dernière bille dans l'une de ses cases et que celle-ci ne contient qu'une seule bille, il ramasse les billes de son adversaire dans la case en regard de la sienne mais laisse sa bille dans la case où il termine de jouer.
Si un joueur n'a plus de billes dans ses cases, la partie se termine et le joueur qui possède encore des billes les place dans son grenier.
Voici un exemple ou le joueur orange, joue les 3 billes dans la première de ses cases. Il termine en case 4 avec une seule bille, il peut donc prendre les 7 billes en regard de cette case chez son adversaire.
Pour ce jeu, on va opposer un être humain à l'ordinateur et on réalisera un tournoi qui verra chaque équipe s'affronter. On établira un classement en fonction du nombre de victoires.
On vous demande :
Il n’est pas nécessaire de développer une interface graphique.
On va utiliser trois modules / fichiers comme suit :
On va utiliser une simple liste qui contient le nombre de billes / graines dans chaque trou. Le premier élément d'indice 0 ne sera pas utilisé :
Pour awale.py :
Pour appli_awale.py :
Pour ia0.py :
Vérifier que les sous-programmes que vous avez écrits sont capable de donner le résultat final à partir de le jeu suivant. Pour rappel le premier élément est 0.
0 0 0 3 3 0 1 14 0 0 0 0 2 10 15
C'est le joueur 1 qui commence. On a donc :
Tour | Joueur | Trou à jouer |
36 | 1 | 4 |
37 | 2 | 5 |
38 | 1 | 3 |
39 | 2 | 6 |
40 | 1 | 2 |
41 | 2 | 1 |
42 | 1 | 3 |
43 | 2 | 2 |
44 | 1 | 4 |
45 | 2 | 3 |
46 | 1 | 1 |
47 | 2 | 4 |
48 | 1 | 2 |
49 | 2 | 5 |
50 | 1 | 3 |
51 | 2 | 6 |
Situation initiale
Joueur 2
10 2 0 0 0 0
15 14
0 0 3 3 0 1
Joueur 1
Joueur 1 joue trou 4
tour= 36
-------------------------------
Joueur 2
10 2 0 0 0 0
15 15
0 0 3 0 1 2
Joueur 1
Joueur 2 joue trou 5
tour= 37
-------------------------------
Joueur 2
11 0 0 0 0 0
16 15
0 0 3 0 1 2
Joueur 1
Joueur 1 joue trou 3
tour= 38
-------------------------------
Joueur 2
11 0 0 0 0 0
16 15
0 0 0 1 2 3
Joueur 1
Joueur 2 joue trou 6
tour= 39
-------------------------------
Joueur 2
0 0 1 1 1 1
18 15
1 1 0 2 3 4
Joueur 1
Joueur 1 joue trou 2
tour= 40
-------------------------------
Joueur 2
0 0 0 1 1 1
18 16
1 0 1 2 3 4
Joueur 1
Joueur 2 joue trou 1
tour= 41
-------------------------------
Joueur 2
0 0 0 1 2 0
18 16
1 0 1 2 3 4
Joueur 1
Joueur 1 joue trou 3
tour= 42
-------------------------------
Joueur 2
0 0 0 1 2 0
18 16
1 0 0 3 3 4
Joueur 1
Joueur 2 joue trou 2
tour= 43
-------------------------------
Joueur 2
0 0 1 2 0 0
18 16
1 0 0 3 3 4
Joueur 1
Joueur 1 joue trou 4
tour= 44
-------------------------------
Joueur 2
0 0 1 2 0 0
18 17
1 0 0 0 4 5
Joueur 1
Joueur 2 joue trou 3
tour= 45
-------------------------------
Joueur 2
0 1 2 0 0 0
18 17
1 0 0 0 4 5
Joueur 1
Joueur 1 joue trou 1
tour= 46
-------------------------------
Joueur 2
0 0 2 0 0 0
18 18
0 1 0 0 4 5
Joueur 1
Joueur 2 joue trou 4
tour= 47
-------------------------------
Joueur 2
1 1 0 0 0 0
18 18
0 1 0 0 4 5
Joueur 1
Joueur 1 joue trou 2
tour= 48
-------------------------------
Joueur 2
1 1 0 0 0 0
18 18
0 0 1 0 4 5
Joueur 1
Joueur 2 joue trou 5
tour= 49
-------------------------------
Joueur 2
2 0 0 0 0 0
18 18
0 0 1 0 4 5
Joueur 1
Joueur 1 joue trou 3
tour= 50
-------------------------------
Joueur 2
2 0 0 0 0 0
18 18
0 0 0 1 4 5
Joueur 1
Joueur 2 joue trou 6
Situation finale
-------------------------------
Joueur 2
0 0 0 0 0 0
19 29
0 0 0 0 0 0
Joueur 1
Joueur 1 a gagné !
Au final c'est le joueur 1 qui gagne avec 29 billes contre 19.
Chaque groupe doit proposer un fichier Python qui comporte une fonction qui retourne le prochain coup à jouer.
Chaque groupe affronte un adversaire 10 fois et on comptabilise le nombre de victoires, défaites ou matchs nuls.
Si le code fourni par un groupe :
alors la partie est considérée perdue par ce groupe.
Groupe | Victoires | Défaites | Matchs nuls |
1 | - | - | - |
2 | - | - | - |
3 | - | - | - |
4 | - | - | - |
5 | - | - | - |