Vous devez rendre
Toute tentative de fraude (plagiat, etc.) sera sanctionnée. Si plusieurs projets ont des sources trop similaires (y compris sur une partie du code uniquement), tous leurs auteurs se verront attribuer la note 0/20. En particulier, il faudra prendre soin de ne pas publier son travail sur un dépôt public (en tout cas pas avant la date de fin de rendu). On évitera également de demander (ou de donner) des conseils trop précis à ses camarades (y compris des promotions précédentes), ces conseils ayant pu être donnés à plusieurs personnes. Les rendus seront comparés deux à deux.
Procédure de dépôt
Vous devez enregistrer
votre archive tgz dans le dépôt dédié au cours IPI (ipi-2020) en vous
connectant à http://exam.ensiie.fr. Ce dépôt sera ouvert
jusqu'au 4 janvier inclus.
Le but de ce projet est d'implanter une plateforme de jeu de plateau.
Ce jeu se présente sous la forme d'un plateau de taille n×n dans lequel sont placés des piles de jetons de couleur, chaque joueur possédant une couleur différente. Initialement aucun jeton n'est présent.
Le jeu se joue à un nombre quelconque de joueurs qui jouent chacun à tour de rôle.
Le but du jeu est d'avoir le plus possible de jetons de sa couleur en haut des piles une fois que le plateau est complètement rempli.
|1 2 3 4 -+------- 1| 2 2 2| 1 3|2 1 1 1 4|2 2 1si le joueur 1 place un jeton sur la case à la ligne 3 et la colonne 2, alors cette case est activée. On retire donc les deux 1 sur cette case, et on place des jetons 1 en (3,1); (2,2); (3,3) et (4,2). Les cases (2,2) et (3, 3) sont activées. On place des jetons sur (2,1); (1,2) et (2,3); ainsi que sur (2,3); (3,4) et (4,3). ((3,2) ayant déjà été activée, on ne place pas de jetons dessus.) Les cases (2,3) et (3,4) sont activées. On place des jetons sur (1,3) et (2,4); ainsi que sur (2,4) et (4,4). Les cases (2,4) et (4,4) sont activées. On place un jeton en (1,4); ainsi qu'en (4,3). Cette dernière case est activée. On place un jeton en (4,2). Cette case est activée. On place un jeton en (4,1). En supposant qu'il y avait des 3 sous les 1 au départ, on obtient le plateau suivant :
|1 2 3 4 -+------- 1| 1 1 1 2|1 3 3|1 3 3 3 4|1 2 3
On travaille dans un premier temps en mode texte.
Au début de la partie, on demande le nombre j de joueurs, puis la taille du plateau n. Chaque joueur est identifié par un entier entre 1 et j qui est sa couleur.
À chaque tour du joueur i,
Si le plateau est rempli, c'est-à-dire qu'il y a au moins un jeton sur chaque case, alors on compte le nombre de jetons au sommet des cases pour chaque joueur et c'est celui qui en a le plus qui gagne.
Exemple d'affichage attendu (n = 5) :
Tour du joueur 1. |1 2 3 4 5 -+--------- 1| 1 1 1 2|1 3 1 3|1 3 3 3 4|1 2 3 2 5| 2 1 3 Quelle case choisissez-vous ? 5 2 2 3 --- Voulez-vous mettre le jeton ici ? n Tour du joueur 1. |1 2 3 4 5 -+--------- 1| 1 1 1 2|1 3 1 3|1 3 3 3 4|1 2 3 2 5| 2 1 3 Quelle case choisissez-vous ? 3 2 3 1 2 1 --- Voulez-vous mettre le jeton ici ? o Tour du joueur 2. |1 2 3 4 5 -+--------- 1| 1 1 1 2|1 3 1 3|1 1 3 3 4|1 2 3 2 5| 2 1 3
Votre programme lira les commandes sur l'entrée standard. En particulier, il devra fonctionner correctement en lisant le fichier suivant partie.txt en entrant
./mon_programme < partie.txt
char buf[256]; . . . fgets(buf, 256, stdin); sscanf(buf, "format", ...);Vous devez avoir lu jusqu'ici avant de commencer.