fonction menu(E nbTours:entier, E position:entier): entier { variable reponse : entier Repeter { Afficher("Tour : ", nbTours) Afficher("Position : ", position) Afficher("Voulez vous : \n"); Afficher("0 : Abandonner ?\n ") Afficher("1 : Lancer 1 dé ?\n ") Afficher("2 : Lancer 2 dés ?\n ") Saisir(reponse) } jusqu'à ((reponse >= 0) et (reponse <=2)) retourne reponse } fonction lancer(E nbDeDes:entier):entier { variable i, sommeDeDes : entier sommeDeDes <-- 0 Pour i de 1 à nbDeDes { sommeDeDes <-- sommeDeDes + alea(6) } retourne sommeDeDes } procedure deplacement(E/S position : entier, E valeur_de:entier) { variable deplacementFini : booleen sensdemarche, de : entier de <-- valeur_de sensdemarche <-- 1 deplacementFini <-- FAUX Afficher("Vous avez fait ", de , " aux dés.\n") Repeter { position <-- position+de*sensdemarche Si (position > 63) alors position <-- 63 - (position – 63) // ou position <-- 63 - (position mod 63) Si ((position mod 7 = 0) ET (position <> 63)) alors { Afficher("Case multiple de 7.\n") de <-- de div 2 } sinon { Si ((position = 15) OU (position = 31) OU (position = 47) OU (position = 59)) alors { Afficher("Case Maudite. On recule !\n") sensdemarche <-- -1 } sinon deplacementFini <-- VRAI } } jusqu'à (deplacementFini OU (de = 0)) } Algorithme JeuduCanard { variable nbTours, position, reponse, de: entier fin: booleen nbTours <-- 1 position <-- 1 fin <-- FAUX Repeter { reponse <-- menu(nbTours, position) Selon(reponse) { 0 : fin <-- VRAI 1, 2 : de <-- lancer(reponse) } Si (non(fin)) alors { nbTours <-- nbTours+1 deplacement(position, de) } // Le tour est fini } jusqu'à (fin OU (position = 63)) Si (fin) alors Afficher ("Vous avez abandonné au bout de ", nbTours, " tours\n") sinon Afficher("Vous avez gagné au bout de ",nbTours , " tours\n") }