21
MasterMind en spécialité i.s.n. Projet pour la spécialité ISN en terminale S, juin 2012 S. Zimmerman – A. Morouche – S. Gentilhomme

MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

MasterMinden spécialité i.s.n.

Projet pour la spécialité ISN en terminale S, juin 2012S. Zimmerman – A. Morouche – S. Gentilhomme

Page 2: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Pourquoi ce sujet ?

Retenant l’idée de J.C. Routier, proposer aux élèves des projets axés sur la création d’un jeu ou d’une application autour de l’image ne sera pas vécu comme ne faire que des maths ou de la physique ! Même si on fait appelle à des notions mathématiques, elles ne seront pas vécues comme telles par les élèves, et le travail semblera ainsi plus ludique.

Nous retenons l’idée des jeux à un ou deux joueurs, et nous viennent à l’esprit quelques jeux assez simples :

Page 3: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Le jeu du nombre mystère

Exemple :

L’ordinateur choisit un nombre compris entre 1 et 9999.

à chaque tour : le joueur propose un nombre

L’ordinateur donne une indication (supérieur ou inférieur).

Obj : trouver le nombre mystère en un minimum de propositions.

Le jeu est assez basique, il est possible de demander la programmation de la solution idéale afin que le joueur compare son résultat et cette dernière (sans toutefois lui indiquer la méthode).

Page 4: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Le jeu de Nim (qui existe sous différentes variantes)

Exemple : Version de base

au départ : un tas de 21 allumettes

à tour de rôle : Chaque joueur retire une à trois allumettes du tas

Objectif : ne pas être celui-qui retire la dernière allumette.

Afin d’amener les élèves à créer une version un peu moins basique, il est possible de moduler le jeu avec 3 paramétres :

le nombre d’allumettes initiales (par ex. de 20 à 50)

le nombre d’allumettes que l’on peut retirer (3 à 6)

choisir le niveau d’intelligence de l’ordinateur (choix aléatoire, avec une méthode infaillible à 100% ou avec un taux de 50%).

Page 5: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Le pendu

Archiclassique, c’est la recherche d’un mot ou d’une expression, qui pourrait être une bonne occasion de manipuler des chaines de caractères.

Les tours de Hanoï

Un jeu sans doute intéressant et peu connu de nos

élèves, qui consiste à faire passer une pile de disques

classés par tailles croissantes, d’un piquet vers un autre

avec un piquet intermédiaire, en conservant toujours un

empilement ordonné.

Page 6: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

L’objectif est à atteindre en un minimum de coups, en respectant deux règles :

on ne peut déplacer plus d'un disque à la fois,

on ne peut placer un disque que sur un autre disque plus grand que lui ou sur un emplacement vide.

Page 7: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Le Mastermind

Exemple :

L’ordinateur choisit P pions de couleurs différentes parmi C couleurs possibles, avec un placement particulier (C > P mais inférieur à 10).

à chaque tour : le joueur propose P pions disposés avec précision.

L’ordinateur donne deux indications :

- le nombre de jetons présents dans la combinaison

- le nombre de jetons correctement placés

Objectif du joueur : Trouver la combinaison gagnante.

Page 8: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Le jeu nous semble assez simple à programmer, et fera intervenir la manipulation de nombres, d’images, etc.

nous retenons donc ce projet, d’abord à deux membres, avec un élargissement avec la venue d’Abdelkrim Morouche nous proposant sa collaboration, trouvant le projet intéressant, avec un rôle de membre ressource.

Page 9: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Première phase de développement

Page 10: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Objectifs:

Définir les caractéristiques du jeu.

Rechercher les algorithmes les plus pertinents afin d’évaluer le niveau de complexité.

Développer un programme de test relativement simple afin de tester les solutions algorithmiques retenues.

Page 11: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Les variables qui caractérisent le jeu

// La grille du jeu n'est rien d'autre qu'un tableau à 2 dimensions

var NbrLignes = 10; // Correspond aussi au nombre maximum d'essais possibles pour // trouver la combinaison (10 par défaut).

var NbrColonnes = 4; // Correspond aussi au nombre de pions dans la combinaison // (4 par défaut)

var NbrMaxiCouleurs = 6; // On limitera le jeu à 6 couleurs au maximum

var NbrCouleurs = 4; // Nombre de couleurs choisies par le joueur pour sa partie // (4 par défaut et sera <= NbrMaxiCouleurs)

var Combinaison = new Array(); // Tableau pour ranger la combinaison secrète.

Page 12: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Les variables pour gérer la partie

var Gagne = false; // Passe à « true » si le joueur trouve la bonne combinaison.

var Proposition = new Array(); // Tableau pour mémoriser la proposition du joueur.

var NbrEssais = 0; // Mémorise le nombre de propositions faites par l'utilisateur.

var NbrCoulPlacees = 0; // Nombre de couleurs bien placées dans la proposition

var NbrCoulBonnes = 0; // Nombre de couleurs bonnes mais mal placées

Page 13: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Algorithme «Tirage aléatoire d’une combinaison secrète »

for(var i=0 ; i < NbrColonnes ; i++){

Combinaison[i] = Math.round(Math.random()*(NbrCouleurs - 1) + 1)

}

Cet algorithme va générée la combinaison gagnante avec des pions qui peuvent être de même couleur.

Page 14: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Dans une première ébauche, nous avions imaginé une combinaison secrète avec des pions différents, ce qui avait amené à un algorithme de cette forme :POUR i ALLANT DE 0 A NbPions – 1

TestCouleurValide = 0 // VARIABLE BOOLEENNETANT QUE TestCouleurValide = 0 FAIRE

CombGagn [i] = PartieEntière (NbreAléatoire () * NbCouleurs)TestCouleurValide = 1POUR j ALLANT DE 0 A i – 1

SI CombGagn [i] == CombGagn [j]TestCouleurValide =0

FIN SIFIN POUR

FIN TANT QUEFIN POUR

for(var i=0 ; i < NbrColonnes ; i++){ TestCoulValide = TRUE;

while (TestCoulValide = TRUE) { Combinaison[i] = Math.round(Math.random()*(NbrCouleurs - 1) + 1);

for (var j = 0 ; j < i-1 ; j ++) { TestCoulValide=(Combinaison[i]==Combinaison[j]);

}}

}

Page 15: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Algorithme «Tester la proposition du joueur par rapport à la

combinaison secrète  »

// Une copie de la Proposition et de la combinaison secrète qu'on pourra modifier

var CopieS = new Array() ;

var CopieP = new Array() ;

for (var i=0 ; i<NbrColonnes ; i++)

{

CopieP[i] = Proposition[i];

CopieS[i] = Combinaison[i];

}

// Réinitialisation pour un nouveau test

NbrCoulPlacees = 0;

NbrCoulBonnes = 0;

Page 16: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

// 1er test : On teste si des couleurs sont bonnes (c’est-à-dire bien placées).

for ( i=0 ; i<NbrColonnes ; i++) {

if (CopieP[i] == CopieS[i]){

NbrCoulPlacees++; // Une couleur de plus de bien placée

CopieS[i] = 'x'; // On écrase cette couleur, on ne la // recompte pas comme étant bonne

// mais mal placée CopieP[i] = 'y'; // dans le second test

}}

Page 17: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

// 2nd test: On teste si une couleur est bonne mais mal placée

for ( i = 0; i < NbrColonnes; i++ ){

for (j =0; j < NbrColonnes; j++ ){

if(CopieS[i] == CopieP[j]){

NbrCoulBonnes++; // Une couleur bonne

CopieS[i] = 'x'; // on écrase cette couleur

CopieP[j] = 'y‘; // on ne la compte plus}

}}

// On conclut sur les testsif(NbrCoulPlacees == NbrColonnes) // Si toutes les

couleurs sont bien placées, Gagne = true; // la partie est gagnée.

NbrEssais++; // Le joueur a testé une fois de plus une proposition

Page 18: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

– Une première version en mode texte nous a permis de tester et de mettre au point l’algorithme qui est au cœur du jeu, à savoir la comparaison d’une proposition par rapport à la combinaison secrète ; la proposition rentrée au clavier sous la forme d’une chaine de caractères est convertie en tableau.

– Cette première version est disponible dans le dossier nommé « MASTERMIND_ver1 ».

Page 19: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Deuxième phase de développement

Page 20: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

Objectifs : Développer une couche graphique et l’intégrer au programme

Séparation des éléments selon leur nature dans des fichiers différents :

• Les variables dans un fichier JS

• Les fonctions dans un fichier JS

• Le programme principal dans un fichier JS

• Page HTML basique permettant de tester le programme

Page 21: MasterMind en spécialité i.s.n. - ISN - fiches d'activitéisn.fil.univ-lille1.fr/projets/mastermind/Documents/Mastermind.pdf · Projet pour la spécialité ISN en terminale S, juin

ConclusionUne expérience enrichissante sur le plan informatique avec réinvestissement de nombreuses connaissances acquises au cours des séquences « Algorithmique & Programmation » , avec un apport bénéfique pour toutes les ressources mises en œuvre par Abdelkrim

Une association qui a amené à maturité un projet réaliste pour des élèves de lycée

Un bénéfice personnel quand au travail par projet, encore quelque peu éloigné de nos modes d’enseignement plus classique en lycée, pour des disciplines générales (mathématiques, sciences physiques).