Info 111 - Programmation impérative, Semaine 6: Modèle d'exécution, 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 début novembre.

Planning

En amphi, nous étudierons la section A du cours 2 et les sections B, C, D du cours 5.

Nous commencerons par un exemple jouet de piratage par débordement. Cela motivera l'introduction d'un modèle d'exécution rafiné, notamment en ce qui concerne la mémoire (pile + tas). Grâce à celui ci, nous comprendrons mieux le fonctionnement des tableaux. Nous généraliserons ensuite les tableaux avec la notion de collection et introduirons la boucle for each. Enfin, nous verrons comment obtenir des tableaux à deux dimensions à partir des éléments déjà à notre disposition. Ces derniers seront mis en pratique la semaine prochaine.

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

Consignes

  • Avant l'amphi: avoir parcouru le cours (poly papier ou en ligne)
  • Avant le TD: avoir lu le sujet de TD et commencé les exercices
  • Avant le TP: avoir parcouru les autres exercices
    LDD IM et MNSI: avoir travaillé les exercices de TD

Plus vous faites d'exercices en amont des TDs et TPs, plus vous êtes efficaces: cela vous permet en effet de bénéficier de l'aide de vos enseignants lorsque vous en avez le plus besoin.

TD: Premiers pas vers le jeu de Yam's:

TP: Implantation du jeu de Yam's

Préalable:

  • Maîtrisez vous l'exercice de compilation de la semaine 5? Si non, refaites le!
  • Téléchargez le sujet de TP selon la procédure usuelle.

Exercice: Yam's simplifié

Nous allons travailler en parallèle dans une feuille de travail Jupyter yams.ipynb 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.ipynb. Lorsqu'il vous est demandé de compiler du code à la main, ouvrez un nouveau terminal pour cela, faites attention à ne pas quitter Jupyter!

Exercice $\clubsuit$: Yam's complet

Le programme que vous obtenez à la fin de l'exercice 1 est encore loin de représenter le jeu de Yams 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 Yams se termine lorsqu'un joueur a marqué des points pour toutes les figures possibles.

    1. Ajouter dans le 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.

  • 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.