Jeu de prise Isola [je12] - Exercice

Documents pareils
alg - Classes, instances, objets [oo] Exercices résolus

C++ - Classes, instances, objets [oo] Exercices résolus

L exclusion mutuelle distribuée

1 Recherche en table par balayage

Algorithmique et Programmation, IMA

CORRECTION EXERCICES ALGORITHME 1

Architecture des Systèmes d Information Architecture des Systèmes d Information

Algorithmique et programmation : les bases (VBA) Corrigé

Programmation linéaire

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

LE PROBLEME DU PLUS COURT CHEMIN

Chap III : Les tableaux

Continuité et dérivabilité d une fonction

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Solutions du chapitre 4

Initiation à LabView : Les exemples d applications :

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé


Algorithme. Table des matières

Correction du baccalauréat ES/L Métropole 20 juin 2014

La classification automatique de données quantitatives

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

MANUEL UTILISATEUR BALADEUR SANTÉ AUXILIAIRES MÉDICAUX ET SAGES-FEMMES C.D.C 1.40

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

Atelier Transversal AT11. Activité «Fourmis» Pierre Chauvet.

TRIGONOMETRIE Algorithme : mesure principale

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Programmation C++ (débutant)/instructions for, while et do...while

Bases de programmation. Cours 5. Structurer les données

Probabilité. Table des matières. 1 Loi de probabilité Conditions préalables Définitions Loi équirépartie...

Algorithmique avec Algobox

Fonctions de deux variables. Mai 2011

Feuille TD n 1 Exercices d algorithmique éléments de correction

UE C avancé cours 1: introduction et révisions

Correction TD algorithmique

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

ALGORITHMIQUE ET PROGRAMMATION En C

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Master IMA - UMPC Paris 6 RDMM - Année Fiche de TP

Correction du baccalauréat STMG Polynésie 17 juin 2014

Probabilités. I Petits rappels sur le vocabulaire des ensembles 2 I.1 Définitions... 2 I.2 Propriétés... 2

TP 2 : Chiffrement par blocs

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Application 1- VBA : Test de comportements d'investissements

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Introduction à la théorie des graphes. Solutions des exercices

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

4. Les structures de données statiques

Cours Informatique Master STEP

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

GENERALITES II. ORGANISATION ET ORGANES DE L EXAMEN III. INSCRIPTION A L EXAMEN, FRAIS ET CONDITIONS D ADMISSION IV. CONTENU ET MATIERE DE L EXAMEN

Plan du cours Cours théoriques. 29 septembre 2014

Algorithmes récursifs

Mémo d utilisation de ADE-4

LEÇON N 7 : Schéma de Bernoulli et loi binomiale. Exemples.

FOCUS Evolution. Lisez-Moi. Version FE 7.0.t

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Master Poly Trader. Manuel d utilisateur. Group IV Benoît Perroud Marius Erni Lionel Matthey David Wenger Lotfi Hussami

Ys - Règle Française. Le Plateau. Ys et plus...

Algorithme des fourmis appliqué à la détection et au suivi de contours dans une image

V 8.2. Vous allez utiliser les services en ligne de la plate forme de dématérialisation de la Salle des Marchés achatpublic.com.

Java Licence Professionnelle CISII,

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Définitions. Numéro à préciser. (Durée : )

Paiement sécurisé sur Internet. Tableau de bord Commerçant

Systèmes de transmission

Mystères au PLUS! Jeu pédagogique pour les Sciences de la Vie et de la. Frédéric BLASSELLE, PLUS de Cappelle-la-Grande

UTILISATION DE LA BORNE PAR LE CLIENT

Maintenabilité d un parc applicatif

Probabilités (méthodes et objectifs)

Baladeur Santé VITAL'ACT

Organigramme / Algorigramme Dossier élève 1 SI

ENVOI EN NOMBRE DE SMS

MANUEL D UTILISATION DE LA SALLE DES MARCHES APPEL D OFFRES OUVERT ACCES ENTREPRISES. Version 8.2

UML Diagramme de communication (communication diagram) Emmanuel Pichon 2013

Décision Markovienne appliquée à un jeu de stop ou encore : Pickomino (Heckmeck Am Bratwurmeck)

Matériel. . 9 cartes Personnage

Les pannes non bloquantes ou aléatoires :

Avertissement : Nos logiciels évoluent rendant parfois les nouvelles versions incompatibles avec les anciennes.

Algorithmique et Programmation Fonctionnelle

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Plateforme «Inscription en ligne»

CONTENU MISE EN PLACE. 1. Placez le plateau de jeu au centre de la table.

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Mon aide mémoire traitement de texte (Microsoft Word)

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Algèbre binaire et Circuits logiques ( )

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

i7 0 Guide de référence rapide Français Document number: Date:

Examen Médian - 1 heure 30

Corrigé des TD 1 à 5

ENVOI EN NOMBRE DE SMS

Transcription:

Jeu de prise Isola [je12] - Exercice Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 10 avril 2015 Table des matières 1 Présentation du jeu 2 2 Modélisation du jeu 3 2.1 Représentation de l échiquier......................... 3 2.2 Représentation des joueurs.......................... 4 3 Version Joueur(s)/Joueur 5 3.1 Procédure initialiserechiquier........................ 5 3.2 Procédure afficherechiquier......................... 6 3.3 Procédure initialiserjeujj.......................... 7 3.4 Procédure deplacerjoueursurjeujj..................... 10 3.5 Procédure detruirecasesurjeujj....................... 12 3.6 Procédure donnermainsuivant, Fonction partieterminee......... 13 3.7 Procédure jeuisolajj............................. 14 4 Version Joueur(s)/Machine 15 4.1 Procédure initialiserjeujm.......................... 15 4.2 Procédure deplacerjoueursurjeujm..................... 15 4.3 Procédure detruirecasesurjeujm...................... 17 4.4 Procédure jeuisolajm............................. 19 5 Jeu Isola 19 Jeu de prise Isola / pg-isolaa1 (alg) Mots-Clés Jeu avec stratégie. Requis Axiomatique impérative. Cet exercice programme le jeu de prise Isola joueur(s) contre joueur puis joueur(s) contre machine. 1

Unisciel algoprog Jeu de prise Isola / je12 2 1 Présentation du jeu Le jeu Isola Isola est un jeu tactique qui se joue sur un échiquier comprenant n n cases (exemple 8 8 ; à l origine 6 6) avec un pion pour chacun des deux joueurs qui s affrontent. Le but est d isoler le pion adverse pour qu il n ait plus aucune liberté de mouvement. Au début du jeu, les pions sont placés sur l échiquier (par exemple les pions se font face sur les bords opposés). A tour de rôle, chaque joueur déplace son propre pion dans une direction quelconque vers une case contiguë (comme le roi aux échecs) puis détruit une case de son choix. Chaque case détruite ne peut plus être occupée par les pions. L espace de manoeuvre s amenuise : le joueur qui ne peut plus se déplacer est sur une île, d où le nom Isola, et a perdu. Exemple Voici le début d une partie de Isola sur un échiquier 4 4. Lignes et Colonnes sont numérotées à partir de 1. Une position (x,y) désigne la case (colonne x, ligne y). La machine place au hasard les deux joueurs 1 et 2 puis tire au hasard le joueur qui commence : c est au joueur 2. tab1 1 2 3 4 1.... 2. 1.. 3.... 4.. 2. Le joueur 2 se déplace de sa position (3,4) (colonne 3, ligne 4) à la position (2,3) [déplacement Nord-Ouest]. Il décide de détruire la case (3,2). Puis c est au joueur 1 de jouer. tab2 1 2 3 4 1.... 2. 1 X. 3. 2.. 4.... Le joueur 1 se déplace de sa position (2,2) à la position (3,3) [déplacement Sud-Est] puis détruit la case (2,2). Puis c est au joueur 2. tab3 1 2 3 4 1.... 2. X X. 3. 2 1. 4.... Le joueur 2 se déplace de sa position (2,3) à la position (2,4) [déplacement Sud]. Il décide de détruire la case (4,2). Et c est au joueur 1.

Unisciel algoprog Jeu de prise Isola / je12 3 tab4 1 2 3 4 1.... 2. X X X 3.. 1. 4. 2.. Nombre de coups maximum La partie dure au plus n 2 /2 coups à raison de deux cases détruites par coup. Exemple : sur un échiquier 8 8, il y a 32 coups au maximum. Mais généralement la partie se termine au bout de 13 à 18 coups. Si elle se termine avant cela signifie que vous êtes très bon ou très mauvais! Modélisation dans ce problème Il convient de modéliser : L échiquier (c.-à-d. le plateau). Les déplacements (la façon de se déplacer par rapport à une case). Les joueurs (nombre de joueurs et leurs positions sur l échiquier). 2 Modélisation du jeu Cette section modélise l échiquier et les joueurs. La modélisation du déplacement est dans la section @[Version Joueur(s)/Joueur]. 2.1 Représentation de l échiquier L échiquier sera représenté par une structure Echiquier contenant un tableau bidimensionnel mémorisant le plateau et un entier mémorisant la dimension effective de l échiquier. L accès à une case en (x,y) du plateau se fera via une fonction evalcase et la modification par une procédure fixercase. Définissez les constantes NMIN (taille minimale) de valeur 4 et NMAX (taille maximale d un échiquier) de valeur 20. Définissez le type Echiquier, structure contenant : Un tableau bidimensionnel d entiers cb de taille maximale NMAXxNMAX.

Unisciel algoprog Jeu de prise Isola / je12 4 Un entier ndim stockant la taille effective de l échiquier. Validez vos définitions avec la solution. alg @[isolaa1a1.alg] Écrivez une fonction evalcase(jeu,x,y) qui renvoie la valeur de la case en (x,y) (colonne x, ligne y) d un Echiquier jeu. Les coordonnées (x,y) sont supposées valides. Écrivez une procédure fixercase(jeu,x,y,val) qui fixe la valeur val (entier) de la case en (x,y) d un Echiquier jeu. Les coordonnées (x,y) sont supposées valides. Validez votre fonction et procédure avec la solution. alg @[isolaa1a2.alg] 2.2 Représentation des joueurs Les entiers 1, 2, etc. identifient les (numéros des) joueurs. Les joueurs seront représentés par une structure Joueurs contenant un tableau à deux colonnes mémorisant les positions des joueurs et un entier stockant le nombre de joueurs. L accès à la position (x,y) d un joueur se fera via une procédure evalposition et la modification par une procédure fixerposition. Définissez la constante NJOUEURS (nombre maximal de joueurs) de valeur 10. Définissez le type Joueurs, structure contenant : Un tableau d entiers pos de taille NJOUEURSx2 mémorisant les positions. Un entier nj stockant le nombre effectif de joueurs. Validez vos définitions avec la solution.

Unisciel algoprog Jeu de prise Isola / je12 5 alg @[isolaa1b1.alg] Écrivez une procédure evalposition(joueurs,k,x,y) qui restitue la position du joueur k (entier valide) dans (x,y) depuis le tableau des Joueurs joueurs. Écrivez une procédure fixerposition(joueurs,k,x,y) qui fixe la position en (x,y) du joueur k (entier valide) dans le tableau des Joueurs joueurs. Validez vos procédures avec la solution. alg @[isolaa1b2.alg] 3 Version Joueur(s)/Joueur Dans la version joueur(s)/joueur, l ordinateur ne fait que l ordonnanceur du jeu : il demande les paramètres du jeu (taille de l échiquier, nombre de joueurs), initialise le jeu (échiquier, joueurs), affiche l échiquier, tire au hasard le joueur k qui commence, puis tant que la partie n est pas terminée, lit les réponses du joueur k (la nouvelle position, la case à détruire), visualise le nouvel état puis donne la main au joueur suivant. Quand la partie est terminée, il affiche le joueur perdant. Voici une capture écran du début d une partie. 3.1 Procédure initialiserechiquier Définissez les valeurs constantes de la case VIDE=0, la case DETRUITE=-1 et la case du BORD=-2. Rappel : les entiers 1, 2, etc. identifient les (numéros des) joueurs.

Unisciel algoprog Jeu de prise Isola / je12 6 Écrivez une procédure initialiserechiquier(jeu,n) qui fixe la taille effective ndim à l entier n et initialise le tableau cb du plateau d un Echiquier jeu. Le tableau ne doit contenir que des cases VIDEs et des cases de BORD. Validez votre procédure avec la solution. alg @[isolaa1c.alg] 3.2 Procédure afficherechiquier Voici une capture écran dans le cas d un échiquier de dimension 5 avec 3 joueurs. Soient les procédures d entrée/sortie en mode texte de l écran : Procédure clrscr() : efface l écran Procédure gotoxy(x,y) : positionne le curseur en (colonne x, ligne y) alg @[clrscrgotoxya1.alg] Définissez les constantes OFFSET_X de valeur 2 et OFFSET_Y de valeur 2, offsets X et Y d affichage d une case de l échiquier, de sorte qu une case sera toujours affiché au même endroit. Écrivez une procédure affichercase(jeu,x,y) qui affiche la case en (x,y) (coordonnées entières valides) d un Echiquier jeu. Affichez un X pour une case détruite, un. pour une case vide, une * si la case est un bord, sinon sa valeur (numéro du joueur).

Unisciel algoprog Jeu de prise Isola / je12 7 Écrivez une procédure afficherechiquier(jeu) qui affiche un Echiquier jeu. Validez vos procédures avec la solution. alg @[isolaa1d.alg] 3.3 Procédure initialiserjeujj Écrivez une fonction casedansechiquier(jeu,x,y) qui teste et renvoie Vrai si une case en (x,y) est dans le plateau d un Echiquier jeu, Faux sinon. Écrivez une fonction casevide(jeu,x,y) qui teste et renvoie Vrai si une case en (x,y) (coordonnées valides) d un Echiquier jeu est VIDE, Faux sinon. Déduisez une fonction casevalide(jeu,x,y) qui teste et renvoie Vrai si une case en (x,y) d un Echiquier jeu est dans le plateau de l échiquier et est vide, Faux sinon. Soit la fonction aleatoire(n) qui renvoie un entier pseudo-aléatoire dans [0..n-1]. alg Fonction prédéfinie

Unisciel algoprog Jeu de prise Isola / je12 8 Écrivez une procédure placerjoueur(k,jeu) qui place au hasard un joueur k (entier) sur un Echiquier jeu. Écrivez une procédure rechpositionjoueur(k,jeu,xpos,ypos) qui recherche la case d un joueur k (numéro valide) sur un Echiquier jeu et restitue ses coordonnées dans (xpos,ypos). Soit la procédure saisirentier(n,a,b) qui demande et saisit un entier dans n jusqu à ce qu il soit dans l intervalle d entiers [a..b]. Elle affiche l invite : Entier dans [[a]..[b]]? alg @[saisirentiera1.alg] Écrivez une procédure initialiserjeujj(jeu,joueurs) qui initialise un Echiquier jeu et des Joueurs joueurs. La procédure devra : Demander et saisir la taille de l échiquier Initialiser l échiquier Demander et saisir le nombre de joueurs Initialiser le nombre effectif de joueurs Pour chacun des joueurs : Le placer au hasard sur l échiquier Rechercher sa position sur l échiquier Initialiser la position du joueur

Unisciel algoprog Jeu de prise Isola / je12 9 Validez vos fonctions et procédures avec la solution. alg @[isolaa1e.alg] Écrivez une procédure test_initialisationjj qui : Déclare un jeu de type Echiquier et des joueurs de type Joueurs. Initialise le jeu et les joueurs. Affiche l échiquier jeu. Validez votre procédure avec la solution. alg @[pg-isolaa1e.alg]

Unisciel algoprog Jeu de prise Isola / je12 10 3.4 Procédure deplacerjoueursurjeujj Ce problème réalise le déplacement d un joueur humain sur le jeu par rapport au pavé numérique. Définissez la constante entière NVOISINS (nombre de voisins) de valeur 10. Déclarez et initialisez le tableau constant arrdelta des delta de voisinage d une case par rapport au pavé numérique. Aide simple Il faut définir le déplacement relatif par rapport à la case centrale qui vaut 5 sur le pavé numérique. const int arrdelta[nvoisins][2] = { // y,x {0,0}, //0 pas de déplacement {1,-1}, //1 SW {1,0}, //2 Sud... Validez vos définitions avec la solution. alg @[isolaa1f1.alg] Écrivez une procédure calcpositionvoisine(x,y,nv,xpos,ypos) qui calcule et restitue dans (xpos,ypos) la case voisine de la case en (x,y) selon la direction nv (entier). Écrivez une fonction casevoisinevalide(jeu,x,y,nv) qui teste et renvoie Vrai si la case voisine en (x,y) de numéro voisin nv d un Echiquier jeu est valide, Faux sinon.

Unisciel algoprog Jeu de prise Isola / je12 11 Écrivez une procédure demandercasedeplacement(jeu,x,y,xdest,ydest) qui demande la direction de déplacement puis calcule et restitue dans (xpos,ypos) les coordonnées de case voisine de la case en (x,y) d un Echiquier jeu. La direction doit être demandée jusqu à ce que la position destination soit valide. Écrivez une procédure permutercases(jeu,x1,y1,x2,y2) qui permute les cases en (x1,y1) et en (x2,y2) d un Echiquier jeu. Les coordonnées sont supposées valides. Écrivez une procédure deplacerjoueursurjeujj(k,jeu,joueurs) qui déplace le joueur k (entier) sur un Echiquier jeu. La procédure devra : Lire la position (x,y) du joueur Demander la case de destination (xdest,ydest) Permuter les cases en (x,y) et en (xdest,ydest) Fixer sa nouvelle position en (xdest,ydest)

Unisciel algoprog Jeu de prise Isola / je12 12 Validez vos fonctions et procédures avec la solution. alg @[isolaa1f2.alg] Faites un copier/coller de la procédure test_initialisationjj en la procédure test_deplacementjj puis ajoutez l instruction de déplacement du joueur #1 sur le jeu. Validez votre procédure avec la solution. alg @[pg-isolaa1f.alg] 3.5 Procédure detruirecasesurjeujj Écrivez une procédure demandercaseadetruire(jeu,xdest,ydest) qui demande et restitue dans (xdest,ydest) les coordonnées d une case à détruire d un Echiquier jeu. Demandez les coordonnées jusqu à ce qu elles soient valident. Écrivez une procédure detruirecase(jeu,x,y) qui détruit la case en (x,y) (coordonnées valides) d un Echiquier jeu.

Unisciel algoprog Jeu de prise Isola / je12 13 Écrivez une procédure detruirecasesurjeujj(k,jeu,joueurs) qui demande au joueur k (entier) la case à détruire puis la détruit sur un Echiquier jeu. Validez vos procédures avec la solution. alg @[isolaa1g.alg] Faites un copier/coller de la procédure test_initialisationjj en la procédure test_destructionj puis ajoutez l instruction de destruction d une case par le joueur #1. Validez votre procédure avec la solution. alg @[pg-isolaa1g.alg] 3.6 Procédure donnermainsuivant, Fonction partieterminee Écrivez une procédure donnermainsuivant(k,njoueurs) qui donne la main au joueur k (entier) suivant étant donné le nombre de joueurs njoueurs (entier). Écrivez une fonction casebloquee(jeu,x,y) qui teste et renvoie Vrai si la case en (x,y) (coordonnées valides) d un Echiquier jeu est bloquée, Faux sinon. Aide simple Il suffit d une case valide pour qu elle ne soit pas bloquée.

Unisciel algoprog Jeu de prise Isola / je12 14 Écrivez une fonction partieterminee(k,jeu,joueurs) qui teste et renvoie Vrai si la partie est terminée, c.-à-d. si le joueur k (entier) est bloqué sur l Echiquier jeu, Faux sinon. Validez vos fonctions et procédure avec la solution. alg @[isolaa1h.alg] 3.7 Procédure jeuisolajj Écrivez une procédure jeuisolajj qui effectue une partie Joueur(s) contre Joueur. Votre procédure devra : Afficher "Jeu Joueur(s) contre Joueur" en début de procédure Déclarer un jeu de type Echiquier et des joueurs de type Joueurs Initialiser le jeu (échiquier et joueurs) : procédure initialiserjeujj(jeu,joueurs) Afficher l échiquier : procédure afficherechiquier(jeu) Tirer au hasard le joueur k qui commence : fonction aleatoire(n) Itérer tant que la partie n est pas terminée : fonction partieterminee(k,jeu,joueurs) Afficher "Le joueur [k] a perdu..." (où [x] désigne le contenu de x) Complétez la boucle TantQue (la partie n est pas terminée) comme suit : Afficher l échiquier : procédure afficherechiquier(jeu) Afficher "Joueur actif: [k]" Déplacer le joueur k : procédure deplacerjoueursurjeujj(k,jeu,joueurs) Détruire la case proposée par le joueur k : procédure detruirecasesurjeujj(k,jeu,joueurs) Donner la main au joueur k suivant : procédure donnermainsuivant(k,njoueurs) Validez votre procédure avec la solution. alg @[isolaa1i.alg] Validez votre algorithme avec la solution.

Unisciel algoprog Jeu de prise Isola / je12 15 alg @[pg-isolaa1i.alg] 4 Version Joueur(s)/Machine Dans la version solitaire, la machine joue l adversaire. Le programme (stratégie de la machine) utilise la technique dite de «la plongée» pour déterminer la case où il va se rendre et la case qu il va détruire. Nous verrons cette stratégie dans le problème [Déplacement d un joueur machine]. 4.1 Procédure initialiserjeujm Faites un copier/coller de la procédure initialiserjeujj en la procédure initialiserjeujm(jeu,joueurs,njmachines) qui initialise un Echiquier jeu et des Joueurs joueurs comprenant njmachines (entier) joueurs machine. L unique modification, par rapport à la procédure initialiserjeujj, concerne la saisie du nombre de joueurs. Ici la procédure devra : Afficher le nombre de joueurs machine puis Demander le nombre total de joueurs (humain + machine) Validez votre procédure avec la solution. alg @[isolaa1j.alg] 4.2 Procédure deplacerjoueursurjeujm La «technique de la plongée» d un joueur machine est la suivante : il compte pour chacune des huit directions toutes les cases qu il peut atteindre en deux coups (utilisation d une triple boucle) puis il joue la case ayant reçue la meilleure note.

Unisciel algoprog Jeu de prise Isola / je12 16 Écrivez une fonction ncaseslibertes(jeu,x,y) qui calcule et renvoie le nombre de libertés de la case en (x,y) d un Echiquier jeu. Aide simple Pour chacun des voisins : si la case voisine de la case en (x,y) de direction nv est valide alors il y a une liberté de plus. Écrivez une procédure rechcaseoptimale(jeu,x,y,xdest,ydest) qui détermine dans (xdest,ydest) les coordonnées de la case destination voisine de celle en (x,y) qui offre le plus de liberté. S il n en existe plus, c.-à-d. si la position (x,y) est bloquée (ce qui arrive dans le cas d une partie multi-joueurs), retournez la position courante. Aide détaillée var lmax, dmax : Entier // Nombre de liberté et sa direction var xpos, ypos : Entier // Position de la case voisine Début lmax <- 0 Pour nv <- 1 à NVOISINS Faire calcpositionvoisine(x, y, nv, xpos, ypos) Si ( casevalide(jeu, xpos, ypos) ) Alors nlibertes <- ncaseslibertes(jeu, xpos, ypos) Si (nlibertes > lmax) Alors (lmax, dmax) <- (nlibertes, nv) FinSi FinPour calcpositionvoisine(x, y, dmax, xdest, ydest) Fin Faites un copier/coller de la procédure deplacerjoueursurjeujj en la procédure deplacerjoueursurjeujm(k,jeu,joueurs,njmachines) qui déplace le joueur k (entier) sur un Echiquier jeu comprenant njmachines (entier) joueurs machine.

Unisciel algoprog Jeu de prise Isola / je12 17 Aide simple Modifiez la procédure de sorte que : Si le joueur k est un humain : faites-le jouer comme dans la version joueur(s)/joueur. Sinon dans le cas de la machine : déterminez la nouvelle case c.-à-d. celle qui offre le plus de liberté à la machine par appel à la procédure de recherche rechcaseoptimale puis déplacez-la en la nouvelle position. Validez votre fonction et procédures avec la solution. alg @[isolaa1k.alg] 4.3 Procédure detruirecasesurjeujm Ici encore un joueur machine utilise la technique de la plongée. Écrivez une procédure rechcaseadetruirejm(xtir,ytir,jeu,joueurs,njmachines) qui recherche et restitue dans (xtir,ytir) la case à détruire sur un Echiquier jeu comprenant njmachines (entier) joueurs machine. Une machine détruit une case autour d un des joueurs humain uniquement.

Unisciel algoprog Jeu de prise Isola / je12 18 Faites un copier/coller de la procédure detruirecasesurjeujj en la procédure detruirecasesurjeujm(k,jeu,joueurs,njmachines) qui demande au joueur k (entier) la case à détruire puis la détruit sur un Echiquier jeu comprenant njmachines (entier) joueurs machine. Aide simple Modifiez la procédure de sorte que : Si le joueur k est un humain : faites-le jouer comme dans la version joueur(s)/joueur. Sinon dans le cas de la machine : déterminez la case à détruire autour du (d un des) joueur(s) c.-à-d. celle qui offre le plus de liberté à l ennemi par la procédure de recherche rechcaseoptimale puis détruisez-la. Validez vos procédures avec la solution. alg @[isolaa1l.alg]

Unisciel algoprog Jeu de prise Isola / je12 19 4.4 Procédure jeuisolajm Copiez/collez la procédure jeuisolajj en la procédure jeuisolajm qui effectue une partie Joueur(s) contre Machine. Modifiez la procédure de la façon suivante. Elle doit : Afficher "Jeu Joueur(s) contre machine" en début de procédure Déclarer le nombre de joueurs machine (constante njmachines) de valeur 1 Déclarer un jeu de type Echiquier et des joueurs de type Joueurs Initialiser le jeu (échiquier et joueurs) : procédure initialiserjeujm(jeu,joueurs,njmachines) Afficher l échiquier : procédure afficherechiquier(jeu) Tirer au hasard le joueur k qui commence : fonction aleatoire(n) Itérer tant que la partie n est pas terminée : fonction partieterminee(k,jeu,joueurs) Afficher "Le joueur [k] a perdu..." (où [x] désigne le contenu de x) Modifiez l itérative afin d utiliser les procédures pour un jeu Isola Joueur(s)/Machine (suffixe JM) avec njmachines joueurs machine, à savoir : Procédure deplacerjoueursurjeujm(k,jeu,joueurs,njmachines) Procédure detruirecasesurjeujm(k,jeu,joueurs,njmachines) Validez votre procédure avec la solution. alg @[isolaa1m.alg] Validez votre algorithme avec la solution. alg @[pg-isolaa1m.alg] 5 Jeu Isola Écrivez une procédure jeuisola qui demande le type de jeu (1=Joueur(s)/Joueur, 2=Joueur(s)/Machine) puis appelle la procédure jeuisolajj (si 1) ou la procédure jeuisolajm (si 2). Validez votre procédure avec la solution. alg @[pg-isolaa1n.alg]

Unisciel algoprog Jeu de prise Isola / je12 20 Compliquez le jeu en définissant un damier d au plus 15 15, un déplacement de 1 à 3 cases, la possibilité de détruire entre 1 et 5 cases à chaque tour de jeu ou toute autre convention. Ce jeu pourra alors se révéler redoutable surtout si un soupçon de hasard vient corser le tout.