Projet de synthèse : un mini-jeu (3e) Tuto

Projet : un mini-jeu Plus ou moins

Durée estimée
10 minutes
Votre progression

Créez un compte gratuit pour suivre votre avancement et reprendre où vous avez laissé.

Créer un compte

On arrive au bout des tutos Scratch du collège. Pour mettre en pratique tout ce qu'on a vu, on va construire un vrai mini-jeu : le classique « Plus ou moins ». Scratch tire un nombre secret entre $1$ et $100$, et le joueur doit le deviner en le moins de coups possible. C'est un projet court mais qui mobilise six briques différentes — toutes celles des tutos précédents.

Le cahier des charges

Avant de programmer, il faut décrire précisément ce que le jeu doit faire. C'est le réflexe à avoir pour tout projet, et c'est aussi ce qu'on attend au brevet quand on demande de modifier un programme : avoir d'abord le scénario en tête.

Scratch choisit en secret un nombre entier au hasard entre $1$ et $100$la cible
Le joueur tape un nombre au clavierune proposition
Si la proposition est plus petite que la cible, Scratch dit « Plus grand ! »indice
Si la proposition est plus grande que la cible, Scratch dit « Plus petit ! »indice
Si la proposition est égale à la cible, le jeu s'arrêtevictoire
À la fin, Scratch indique le nombre de coups jouésscore

Ce scénario mobilise six briques qu'on a déjà toutes croisées dans les tutos précédents :

Brique Quand Tuto où on l'a vue
Variables Pour stocker la cible, la proposition, le nombre d'essais Variables et compteurs
Hasard Pour tirer la cible Le hasard en Scratch
Saisie utilisateur Pour récupérer la proposition tapée au clavier Si… alors (bloc demander)
Conditions imbriquées Pour distinguer les trois cas (plus petit / plus grand / égal) Si… alors
Compteur Pour compter les essais Variables et compteurs
Boucle conditionnelle Pour répéter jusqu'à ce que le joueur trouve nouveau dans ce tuto

Les variables

On déclare trois variables (catégorie Variables → bouton Créer une variable) :

ciblele nombre secret à deviner
propositionla valeur tapée par le joueur au tour courant
essaiscompteur du nombre de propositions

Au lancement de la partie (drapeau vert), on initialise les trois variables :

Initialisation

Programme Scratch initialisant trois variables au drapeau vert : cible à un nombre aléatoire entre 1 et 100, proposition à 0, essais à 0

La cible est tirée une seule fois, au début de la partie. Les deux autres variables sont mises à $0$ — on les fera évoluer au fil des essais.

Remarque

Pourquoi initialiser proposition à 0 ? Parce que la valeur initiale ne doit pas être égale à la cible. Comme la cible est entre $1$ et $100$, mettre proposition à $0$ garantit qu'on entrera bien dans la boucle pour demander un premier nombre.

La boucle principale

La boucle qui va piloter le jeu doit répéter une action jusqu'à ce que la proposition soit égale à la cible. Scratch a un bloc fait exactement pour ça, dans la catégorie Contrôle : répéter jusqu'à. Il s'utilise comme répéter $N$ fois, sauf qu'on lui donne une condition (bloc hexagonal) au lieu d'un nombre.

répéter jusqu'à …Répète le bloc interne, et s'arrête dès que la condition placée dans l'encoche hexagonale devient vraie

Le squelette est donc :

Squelette de la boucle

Squelette du programme : répéter jusqu'à proposition égal cible (demander un nombre, mettre proposition à réponse, ajouter à essais 1)

À chaque tour : on demande un nombre, on le stocke dans proposition, on incrémente essais de $1$. Quand le joueur tape la bonne valeur, la condition proposition = cible devient vraie et la boucle s'arrête immédiatement.

Attention

Attention au sens de la condition : répéter jusqu'à s'arrête quand la condition devient vraie (c'est l'inverse d'un tant que). Ici, on veut sortir quand la proposition est égale à la cible, donc la condition à mettre est bien proposition = cible.

Indiquer plus grand ou plus petit

Pour l'instant, le joueur tape des nombres « à l'aveugle ». On ajoute maintenant l'indice : après chaque proposition, Scratch indique si elle est plus petite ou plus grande que la cible. On utilise pour ça une instruction conditionnelle si … alors … sinon (cf. tuto Si… alors).

Trois cas se présentent : proposition > cible, proposition < cible, ou proposition = cible. Comme on est déjà à l'intérieur de répéter jusqu'à proposition = cible, le troisième cas ne demande aucune action : la boucle va sortir au prochain test. Il reste deux cas à distinguer.

Boucle complète avec les indices

Boucle complète : répéter jusqu'à proposition égale cible, demander un nombre, stocker, incrémenter essais, puis si proposition supérieure à cible dire Plus petit, sinon dire Plus grand

Le bloc si … alors … sinon est imbriqué dans son propre sinon — c'est une technique classique quand on veut distinguer plus de deux cas. Si la proposition est plus grande, on dit « Plus petit ! » ; sinon (donc elle est plus petite ou égale), on regarde si elle est strictement plus petite et on dit « Plus grand ! » ; le dernier cas (égalité) ne déclenche aucun message car la boucle va sortir.

Annoncer la fin et le score

Une fois la boucle terminée, le joueur a trouvé. Il reste à annoncer la victoire et le nombre d'essais joués. Pour assembler du texte et la valeur d'une variable dans un seul message, on utilise le bloc regroupement (catégorie Opérateurs, bloc rond avec deux champs).

Programme complet

Programme complet du jeu Plus ou moins : initialisation des trois variables, boucle répéter jusqu'à, propositions plus petit ou plus grand, message final avec score

Projet : Plus ou moins .sb3
?
Ouvre-le dans Scratch en ligne via Fichier → Importer depuis votre ordinateur.

Scène Scratch montrant le chat qui annonce Bravo Tu as trouvé en 6 coups après une partie gagnée

Remarque

Stratégie optimale et dichotomie. La meilleure stratégie pour ce jeu est de toujours proposer le milieu de l'intervalle restant : à chaque essai, on divise par $2$ le nombre de valeurs possibles. C'est la dichotomie.

Pour $100$ valeurs au départ : après $1$ essai il reste $\leq 50$ valeurs, après $2$ essais $\leq 25$, après $3$ essais $\leq 13$, puis $7$, $4$, $2$, $1$. En $7$ essais maximum on tombe forcément sur la cible (car $2^7 = 128 > 100$). Plus généralement, pour deviner un nombre entre $1$ et $N$, il faut au plus $\log_2(N)$ essais — un grand classique des questions algorithmiques.

Récapitulatif

Brique Bloc Scratch utilisé
Variable globale mettre … à …
Compteur ajouter à … 1
Hasard nombre aléatoire entre … et …
Saisie clavier demander … et attendre + réponse
Boucle conditionnelle répéter jusqu'à …
Conditions imbriquées si … alors … sinon dans si … alors … sinon
Comparaison … = …, … > …, … < …
Concaténation de texte regroupe … et …

À toi de jouer

Le jeu actuel est patient : si le joueur tape mal, il peut continuer indéfiniment. Modifier le programme pour limiter à $7$ essais. Au-delà, le jeu doit afficher « Perdu ! La cible était (cible) ».

Pistes :

  • Ajouter une variable essaisMax initialisée à $7$.
  • Changer la condition de sortie : la boucle s'arrête quand proposition = cible ou essais $\geq$ essaisMax.
  • Après la boucle, si proposition est toujours différente de cible, dire « Perdu ! La cible était (cible) » ; sinon dire « Bravo ! Trouvé en (essais) coups. ».

Corrigé

On ajoute une variable essaisMax (= $7$). La condition de sortie de la boucle combine deux tests avec l'opérateur logique ou (catégorie Opérateurs).

Programme du jeu modifié avec une limite de 7 essais : la boucle répéter jusqu'à utilise l'opérateur ou pour combiner deux conditions, et un si alors sinon final distingue victoire et défaite

Le test essais > 6 devient vrai dès qu'on a fait $7$ propositions infructueuses (puisqu'on incrémente essais à chaque tour avant le test). On peut aussi écrire essais = essaisMax, qui revient au même.

Projet : Plus ou moins avec limite d'essais .sb3
?
Ouvre-le dans Scratch en ligne via Fichier → Importer depuis votre ordinateur.

Astuce

Variante de niveau 2 — Le fichier ci-dessous propose une variante avec borne configurable : Scratch commence par demander la borne maximale au joueur (par exemple $50$ pour un jeu plus court, $500$ pour un défi plus long), puis tire la cible entre $1$ et cette borne. Tout le reste du programme reste identique.

Projet : Plus ou moins (borne au choix) .sb3
?
Ouvre-le dans Scratch en ligne via Fichier → Importer depuis votre ordinateur.

Remarque

C'est la fin de la série Tutos Scratch du collège. Pour faire le point sur les notions algorithmiques attendues au brevet, consulter le cours Scratch et algorithmes (3e). Les sept tutos précédents restent accessibles à tout moment depuis le menu Tutos de la barre supérieure.