Semaine 6 : modèle de mémoire, collections, consolidation

Semaine 6 : modèle de mémoire, collections, consolidation#

Les semaines précédentes nous avons successivement empilé de nombreux éléments de la programmation impérative: variables, conditionnelles, boucles, fonctions, tableaux. Cette semaine est consacrée à la consolidation de ces éléments, en vue du partiel fin octobre.

En cours, nous commencerons par un exemple jouet de piratage par débordement. Cela motivera l’introduction d’un modèle de mémoire raffiné (pile + tas) pour mieux comprendre l’allocation des tableaux. Nous généraliserons ensuite les tableaux avec la notion de collections et introduirons la boucle for each.

En TD et TP, nous combinerons tout ce que nous avons vu jusqu’ici pour implanter le jeu de Yams.

Cours#

  1. Prélude : exemple jouet de piratage par débordement

  2. Modèle de mémoire et tableaux

  3. Collections

TD : premiers pas vers le jeu de Yam’s#

Notes aux enseignants

Ce TP reprend, et étend, ce qui aura été vu en TD. Encouragez les élèves à faire les exercices de TP par eux-mêmes, sans consulter les solutions du TD, afin qu’ils vérifient qu’ils ont bien compris les exercices.

Encouragez-les aussi à faire sérieusement la partie compilation : le projet de fin de semestre sera à faire sous forme de code traditionnel (fichiers .cpp); il faut donc que les élèves s’habituent à la compilation.

Si certains élèves écrasent par inadvertance le fichier yams.cpp fourni, ils peuvent télécharger le fichier d’origine en consultant le sujet depuis le tableau de bord.

Si on souhaite que la fonction rand produise des valeurs différentes lors d’exécutions successives du programme yams.cpp, il faut mettre l’instruction srand(time(0)); en début du main (cette instruction est donnée dans une cellule de la feuille Jupyter yams.cpp, juste avant l’exercice 1 de la feuille).

TP : Implantation du jeu de Yam’s#

Exercice 0 : Jupyter : jeter sa souris

Exercice 1 : Yam’s simplifié

Nous allons travailler en parallèle dans une feuille Jupyter yams.md et dans un fichier source yams.cpp afin, à la fin du TP, d’obtenir un exécutable autonome permettant de jouer une partie de Yam’s simplifiée.

Ouvrez la feuille yams.md et suivez les instructions.

Exercice 2 : Interlude: boucles imbriquées

Exercice 3 : ♣ Yam’s complet

Le programme que vous obtenez à la fin de l’exercice 1 est encore loin de représenter le jeu de Yam’s réel.

Dans cet exercice nous vous proposons plusieurs extensions (dont certaines déjà évoquées dans le sujet de TD) qui vous permettront de vous en approcher.

Vous pouvez utiliser Jupyter pour prototyper vos fonctions, mais vous devez au final implémenter ces extensions dans votre programme compilé (fichier yams.cpp).

  • Dans le vrai jeu de Yam’s, le joueur peut relancer jusqu’à trois fois un ou plusieurs dés avant de choisir une figure.

    1. Ajouter une fonction vector<int> relance(int nde, vector<int> des) qui « relance » le dé choisi en premier argument et le remplace donc par un nouveau nombre aléatoire entre 1 et 6.

    2. Dans la boucle de jeu, ajouter les instructions nécessaires pour que le joueur puisse choisir jusqu’à trois dés à relancer et les relancer.

  • La partie de Yam’s se termine lorsqu’un joueur a marqué des points pour toutes les figures possibles.

    1. Ajouter dans la fonction main un tableau de score contenant une case pour chaque figure.

    2. Lorsque le joueur choisit une figure, les points qu’il gagne doivent être stockés dans la partie correspondante du tableau. Une fois une case du tableau remplie, elle ne peut plus être modifiée.

    3. La partie se termine lorsque toutes les cases du tableau sont remplies. Le score du joueur correspond à la somme des cases du tableau.

  • Raccourcis : permettre à l’utilisateur d’utiliser des raccourcis pour nommer les figures: b pour brelan, y pour yams, …

  • C’est un peu triste de jouer tout seul! Modifiez la boucle principale pour alterner les tours entre 2 joueurs dont les scores seront stockés dans deux tableaux de score distincts. La partie s’arrête lorsqu’un joueur a fini de remplir son tableau de score. On compare alors le score de chaque joueur pour désigner le gagnant.

  • Si vous êtes très motivés vous pouvez transformer une dernière fois votre programme afin de rendre possible des parties entre un nombre quelconque de joueurs. Pour cela vous aurez besoin d’utiliser un tableau de tableaux de scores. Ce tableau contiendra un tableau de score pour chaque joueur présent dans la partie.