TD 6 : Awalé
Transcription
TD 6 : Awalé
TD 6 : Awalé INFO 113 - Groupe Peip Les règles Voici les règles du jeu d'Awalé (variante jouée en tournoi, prise sur wikipédia) : Comme aux échecs, seulement deux joueurs peuvent s'affronter, mais contrairement aux échecs, les joueurs doivent jouer rapidement et le public peut (mais pas en tournoi) faire du bruit, chanter, discuter les coups. Au départ, on répartit quarante-huit graines dans les douze trous à raison de quatre graines par trou. Les joueurs sont l'un en face de l'autre, avec une rangée devant chaque joueur. Cette rangée sera son camp. On choisit un sens de rotation qui vaudra pour toute la partie. On choisit également un joueur qui commencera la partie. Un tour se joue de la façon suivante : le premier joueur prend toutes les graines d'un des trous de son camp puis il les égrène dans toutes les cases qui suivent sur sa rangée puis sur celle de son adversaire suivant le sens de rotation (une graine dans chaque trou après celui où il a récupéré les graines). Si sa dernière graine tombe dans un trou du camp adverse et qu'il y a maintenant deux ou trois graines dans ce trou, le joueur récupère ces deux ou trois graines et les met de côté. Ensuite il regarde la case précédente : si elle est dans le camp adverse et contient deux ou trois graines, il récupère ces graines, et ainsi de suite jusqu'à ce qu'il arrive à son camp ou jusqu'à ce qu'il y ait un nombre de graines différent de deux ou trois. Le but du jeu est d'avoir récupéré le plus de graines à la fin de la partie. On ne saute pas de case lorsqu'on égrène sauf lorsqu'on a douze graines ou plus, c'est-à-dire qu'on fait un tour complet : on ne remplit pas la case dans laquelle on vient de prendre les graines. Il faut « nourrir » l'adversaire, c'est-à-dire que, quand celui-ci n'a plus de graines, il faut absolument jouer un coup qui lui permette de rejouer ensuite. Si ce n'est pas possible, la partie s'arrête et le joueur qui allait jouer capture les graines restantes. Si un coup devait prendre toutes les graines adverses, alors le coup peut être joué, mais aucune capture n'est faite : il ne faut pas « affamer » l'adversaire. La partie s'arrête quand un des joueurs a capturé au moins 25 graines, soit plus de la moitié ou qu'il ne reste que 6 graines en jeu. La programmation On va écrire un programme qui permet à deux joueurs de jouer à ce jeu. Puis un programme permettant de jouer contre l'ordinateur. 2. Comment représenter le plateau ? 1 3. Écrire une procédure qui dessine le plateau (en ASCII) 4. Écrire une procédure qui joue un coup pour un joueur, sans tenir compte des dernières règles. La procédure retournera le nouveau plateau si le coup est valide « None » sinon et ne modifiera pas le plateau. Pour recopier un tableau, on peut écrire « a=b[:] ». 5. Ajouter le règle concernant la case de départ que l'on saute (on ne remet pas de graine dans la case ou l'on les a prises). 6. Ajouter la règle de famine qui rejette le coup si l'adversaire n'a plus de graine après, 7. Ajouter la règle qui évite la prise de graine si l'adversaire n'aurait plus de graine. 8. Écrire une fonction qui teste si la partie est terminée. Et donc qui teste aussi si il existe un coup valide pour le joueur qui à la main et lui donne toutes les graines restantes si ce n'est pas le cas. Cela se produit uniquement si l'adversaire n'a plus de graines et que vous ne pouvez pas non plus lui en donner. 9. Écrire une procédure qui demande un coup alternativement à chaque joueur en affichant le plateau, et donne le gagnant en fin de partie. 10. Écrire une fonction qui choisit un coup (le meilleur possible, dans un premier temps, celui qui prend le plus de graines). 11. Écrire une procédure qui permet de jouer contre l'ordinateur (au départ on demande si on veut 2 joueurs humains ou un humain contre l'ordinateur). 2