Jeu du pendu [ka07] - Exercice

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

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

1.6- Génération de nombres aléatoires

L exclusion mutuelle distribuée

Introduction à MATLAB R

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

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

Poker. A rendre pour le 25 avril

Algorithmique et Programmation, IMA

Bases Java - Eclipse / Netbeans

TP1 : Initiation à Java et Eclipse

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

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

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

1 Recherche en table par balayage

Programmation Objet - Cours II

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

L authentification de NTX Research au service des Banques

PG208, Projet n 3 : Serveur HTTP évolué

Entraînement au concours ACM-ICPC

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

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

1 Mesure de la performance d un système temps réel : la gigue

La fonction exponentielle

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

Le langage C. Séance n 4

Notions fondamentales du langage C# Version 1.0

Dynamic Host Configuration Protocol

1. Utilisation du logiciel Keepass

Modes opératoires pour le chiffrement symétrique

Algorithmes récursifs

LES DECIMALES DE π BERNARD EGGER

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Introduction aux Systèmes et aux Réseaux, Master 2 CCI

Programmation Visual Basic. Visite guidée d'un programme Visual Basic 6.0

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)

La programmation orientée objet et le langage C++

C f tracée ci- contre est la représentation graphique d une

Continuité et dérivabilité d une fonction


6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

TP 1. Prise en main du langage Python

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

1 Identités pour l enregistrement IMS

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

GUIDE ISAN: 7 Création d un ISAN In-Dev 1

Le signal GPS. Les horloges atomiques à bord des satellites GPS produisent une fréquence fondamentale f o = Mhz

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

programmation S initier à la la Avec des exemples en C, C++, C#, Java et PHP Avec des exemples en C, C++, C#, Java et PHP Claude Delannoy

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

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

CRYPTOGRAPHIE. Signature électronique. E. Bresson. SGDN/DCSSI Laboratoire de cryptographie

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Internautes sous surveillance. Retours de la réalité pour un web meilleur

Baccalauréat ES/L Métropole La Réunion 13 septembre 2013 Corrigé

Conception des bases de données : Modèle Entité-Association

Ressources pour le lycée général et technologique

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

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.

Structurer ses données : les tableaux. Introduction à la programmation

TD n o 8 - Domain Name System (DNS)

Cours de Systèmes d Exploitation

Chap III : Les tableaux

Génie Logiciel avec Ada. 4 février 2013

CESI Bases de données

Sécurité des réseaux IPSec

LOSLIER Mathieu. Filière Informatique et Réseau 1 ère année. TP DNS. Responsable : LOHIER Stephane. Chargé de TD : QUIDELLEUR Aurélie

Bac Blanc Terminale ES - Février 2011 Épreuve de Mathématiques (durée 3 heures)

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Algorithmique avec Algobox

Application 1- VBA : Test de comportements d'investissements

NOTICE D INSTALLATION

COMMANDER A DISTANCE LE ROBOT-PONG ETUDE DE LA TELECOMMANDE (2 nde PARTIE)

Projet Active Object

Sécuriser le e-commerce avec la technologie XCA. «Une sécurité qui inspire la confiance»

TP N 57. Déploiement et renouvellement d une constellation de satellites

Corrigé des TD 1 à 5

TP LINUX Travaux avec Debian ETCH

Probabilités III Introduction à l évaluation d options

BACCALAURÉAT GÉNÉRAL SESSION 2012 OBLIGATOIRE MATHÉMATIQUES. Série S. Durée de l épreuve : 4 heures Coefficient : 7 ENSEIGNEMENT OBLIGATOIRE

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

N IMPRIMER PAS CE DOCUMENT, VOUS POURREZ LE CONSULTER DURANT L INSTALLATION

Surveiller les applications et les services grâce à la surveillance réseau

L EFFET PARALLAXE N EST

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

PROTEGER SA CLE USB AVEC ROHOS MINI-DRIVE

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

SOMMAIRE ÉTAPES OBLIGATOIRES. Récupérer le connecteur... 3

sommaire ÉTAPES OBLIGATOIRES Récupérer le connecteur... 3

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

Transcription:

Jeu du pendu [ka07] - Exercice Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 24 octobre 2016 Table des matières 1 Présentation du jeu 2 2 Algorithmique, Programmation 2 2.1 Classe Joueur................................. 2 2.2 Classe Pendu................................. 3 2.3 Classe Humain................................ 4 2.4 Classe Machine................................ 5 C++ - Jeu du pendu (TP) Mots-Clés Jeux de logique, Classes abstraites Requis Classes, Pointeurs, Héritage, Polymorphisme d inclusion Fichiers Pendaison Difficulté (2 h) Objectif Cet exercice réalise une version orientée objet polymorphique du jeu du Pendu. 1

Unisciel algoprog Jeu du pendu [ka07] 2 1 Présentation du jeu La version officielle du «Jeu du Pendu» se joue à plusieurs personnes. Vous supposerez ici que le jeu se joue à deux. L un des joueurs commence par proposer un mot à deviner. Supposez que l autre joueurs ne voit pas ce mot. Il n en connait au départ que la longueur. Ce deuxième joueur propose ensuite une lettre. Si cette lettre est présente dans le mot, toutes ses occurrences sont indiquées. Sinon, ce joueur «progresse» sur le chemin de la pendaison. Au bout d un certain nombre NMAX étapes, il a perdu : il est «pendu». La partie se termine lorsque chacun des deux joueurs a proposé à l autre un mot à deviner. Chaque joueur qui parvient à en pendre un autre gagne un point. Chaque joueur qui trouve un mot (c.-à-d. propose la dernière lettre à trouver) gagne un point. A la fin de la partie, gagne celui qui est encore en vie et a le plus de points. Au terme de la pendaison (NMAX-ème étape), le pendu pourrait ressembler à un petit pendu (ici 12 essais) : / _O_ I / \ _/ \ #e= 12 On peut choisir ici un affichage totalement différent. Le but n étant pas de perdre de temps à essayer de faire un joli dessin (ce qui compte c est que chaque joueur voit clairement à chaque tour de jeu à quel stade il en est), vous pouvez utiliser la classe PendaisonC1 fournie en téléchargement qui permet l affichage du pendu. Plusieurs joueurs Le jeu du pendu pouvant se jouer à plusieurs joueurs (un qui propose le mot et les autres essayant à tour de rôle de le deviner), la solution proposée ne fait pas d hypothèse sur le nombre de joueurs. 2 Algorithmique, Programmation 2.1 Classe Joueur Créez une classe de base Joueur représentant les joueurs. Incluez : Le nom (chaîne de caractères) du joueur. Le numéro de l étape (entier positif) atteinte par le joueur. Le nombre de points (entier positif) gagné par le joueur.

Unisciel algoprog Jeu du pendu [ka07] 3 Écrivez un constructeur à un paramètre (le nom du joueur) initialisant les attributs. Écrivez une méthode incrpoints qui incrémente le nombre de points du joueur. Écrivez une méthode incretape qui incrémente le nombre d étapes du joueur. Écrivez une méthode abstraite proposermot qui permet au joueur de proposer un mot (à faire deviner à l autre). Écrivez une méthode abstraite proposerlettre qui permet au joueur de proposer une lettre (lorsqu il essaie de deviner un mot). 2.2 Classe Pendu Créez une classe JeuPendu permettant de jouer une partie de «pendu». Incluez parmi ses attributs : Le mot à-deviner (chaîne de caractères). La tentative (chaîne de caractères) (c.-à-d. le mot tenté) de l adversaire. Un vecteur de pointeurs sur Joueur. Écrivez un constructeur prenant en paramètre un vecteur de pointeurs sur Joueur. Écrivez une méthode interne initadeviner(k) qui permet au joueur numéro k de proposer un mot à deviner. Aide simple Ce mot sert à initialiser le mot à-deviner et est généré grâce à la méthode proposermot de la classe Joueur. Écrivez une méthode interne inittentative qui initialise la tentative avec des blancs soulignés ('_'). Exemple : Si à-deviner vaut «test», la tentative vaudra. Écrivez une méthode interne estdansmot(c) qui teste et renvoie Vrai si une lettre c (caractère) se trouve dans le mot à-deviner. Écrivez une méthode interne incluredansmot(c) qui remplace le blanc souligné correspondant dans la tentative par la lettre qui se trouve dans le mot à-deviner.

Unisciel algoprog Jeu du pendu [ka07] 4 Soit la classe Pendaison qui affiche la pendaison d ordre n. Chaque ligne du tableau interne correspond à l affichage devant se faire à l étape d une pendaison. C++ @[Pendaison.hpp] Écrivez une méthode interne devinermot(k) qui, étant donné l indice du joueur k ayant proposé le mot à-deviner, permet à l autre d essayer de deviner le mot caché. La méthode fait réessayer le joueur tant que le mot n est pas deviné ou qu il n a pas été pendu. Aide simple Utilisez la méthode Joueur::proposerLettre pour permettre au joueur qui doit deviner le mot de proposer une lettre. A chaque étape, c est soit le mot partiellement deviné qui est affiché (succès), soit la progression de la figure du pendu (échec). Pour réaliser l affichage de la pendaison d ordre n, appelez la méthode Pendaison::afficher(n). Écrivez une méthode jouer qui permet à chaque joueur de proposer à l autre un mot à deviner. Écrivez une méthode afficher qui affiche le résultat de la partie. 2.3 Classe Humain Ce problème définit la classe du joueur humain et réalise le jeu du pendu de deux joueurs humains. Créez une classe (concrète) Humain dérivée de la classe Joueur qui permet de modéliser les joueurs humains. Écrivez la méthode abstraite proposermot qui se contentera de lire une chaîne depuis le terminal et de la renvoyer. Écrivez la méthode abstraite proposerlettre qui se contentera de lire un caractère depuis le terminal et de le renvoyer. Écrivez une procédure jeu_contrehumain qui permet à deux joueurs humains de s affronter. Testez.

Unisciel algoprog Jeu du pendu [ka07] 5 2.4 Classe Machine On souhaite maintenant faire en sorte qu un des joueurs puisse être l ordinateur. Si c est le cas, les méthodes abstraites de la classe Joueur ne se contenteront plus de lire le mot ou la lettre mais les génèreront automatiquement. Afin de générer des mots valides, un joueur machine dispose d un dictionnaire de mots (tableau de chaînes de caractères) qui sera chargé au lancement du programme et qui sera fourni au constructeur. Créez une classe (concrète) Machine dérivée de classe Joueur qui contient un vecteur de mots (chaîne de caractères). Fournissez un constructeur permettant de mémoriser le dictionnaire. Écrivez la méthode abstraite proposermot de la façon suivante : 1. Générez aléatoirement un entier u [1..n] (où n désigne la taille du dictionnaire). 2. Retournez le u-ème mot du dictionnaire. La fonction rand(), définie dans la bibliothèque <cstdlib>, renvoie un entier pseudoaléatoire dans [0..RAND_MAX]. Utilisez le modulo pour projeter l entier dans l intervalle souhaité. L initialisation du générateur de nombres pseudo-aléatoires (ici avec l horloge système) s effectuera dans le programme principal avec l instruction : srand(time(0)); La fonction srand est définie dans la bibliothèque <cstdlib> et la fonction time dans la bibliothèque <ctime>. Écrivez la méthode pure proposerlettre de la façon suivante : 1. Générez aléatoirement un entier p [0..25]. 2. Retournez la p-ème lettre correspondante. La p-ème lettre minuscule est donné par l expression : char(int( a )+p) Écrivez une procédure jeu_contremachine qui permet à un joueur humain d affronter un joueur machine. Testez.