fonction menu(E joueur:entier, E nbTours:entier, E position:entier): entier { variable reponse : entier Repeter { Afficher("Joueur ", joueur,".\n") Afficher("Vous êtes dans le tour : ", nbTours,".\n") Afficher("Vous êtes en position : ", position,".\n") 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/S position_adversaire :entier, E valeur_de:entier) { variable deplacementFini : booleen sensdemarche, de : entier position_initial : entier position_initial <-- position 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 Si (position = position_adversaire) alors { Afficher("On a fini notre déplacement et on tombe sur la position de l'adversaire, donc il va d'où on est parti !\n") position_adversaire <-- position_initial } sinon deplacementFini <-- VRAI } } jusqu'à (deplacementFini OU (de = 0)) } Algorithme JeuduCanard_2joueurs { variable nbTours, joueur, position1, position2, reponse, de: entier fin1, fin2: booleen nbTours <-- 1 position1 <-- 1 position2 <-- 1 fin1 <-- FAUX fin2 <-- FAUX joueur <-- 1 Repeter { Si (joueur = 1) alors { reponse <-- menu(joueur, nbTours, position1) Selon(reponse) { 0 : fin1 <-- VRAI 1, 2 : de <-- lancer(reponse) } } sinon { reponse <-- menu(joueur, nbTours, position2) Selon(reponse) { 0 : fin2 <-- VRAI 1, 2 : de <-- lancer(reponse) } } Si (non(fin1) ET non(fin2)) alors { Si (joueur = 1) alors { deplacement(position1, position2, de) joueur <-- 2 } sinon { deplacement(position2, position1, de) joueur <-- 1 nbTours <-- nbTours+1 // Le tour est fini } } } jusqu'à (fin1 OU fin2 OU (position1 = 63) OU (position2 = 63)) Si (fin1) alors Afficher ("Le joueur 1 a abandonné au bout de ", nbTours, " tours\n") sinon Si (fin2) alors Afficher ("Le joueur 2 a abandonné au bout de ", nbTours, " tours\n") sinon Si (position1 = 63) alors Afficher("Le joueur 1 a gagné au bout de ",nbTours , " tours\n") sinon Afficher("Le joueur 2 a gagné au bout de ",nbTours , " tours\n") }