Header image  
Département Informatique  
    HOME   |  
 
 
Scratch

Le but de ce TP est de vous faire faire une introduction à la programmation à l'aide du logiciel Scratch.

Présentation

Lancez Scratch de la façon suivante : Menu 'Démarrer /  Tous les programmes / Applications des étudiants / Scratch / Scratch'. La fenêtre suivante apparaît :


Fonctionnement 

La zone A contient toutes les instructions de la famille d'instructions sélectionnée en B que vous allez pouvoir glisser dans la zone C afin de constituer votre programme.
Une fois celui-ci assemblé, cliquez sur le drapeau vert de la zone D afin de voir votre programme s'exécuter dans la zone E.

Premiers pas

Faites glisser de la zone A vers la zone C un bloc 'Avancer de 10 pas. Double-cliquez ensuite sur ce dernier bloc, le chat se déplace de 10 points sur l'écran (vers la droite).
Remarquez au passage l'évolution des coordonnées du chat dans la zone suivante :

 

 

A chaque double clic sur l'instruction 'Avancer de 10 pas', la coordonnée x augmente de 10, on dit qu'elle s'incrémente de 10.

Double cliquez ensuite sur la case blanche contenant le nombre 10. Changez alors sa valeur (en mettant 50 par exemple). Exécutez de nouveau l'instruction, votre chat avance maintenant de 50 points. Cette valeur (10, 50, ...) est un paramètre, il permet d'ajuster le comportement de l'instruction (se déplacer de 10 pas ou de 50).

Maintenant, faites glisser un bloc 'tourner de -> 15 degrés' et placez le juste sous le bloc précédent. Vous devez alors voir ceci :

Lâchez alors le bouton de la souris, le bloc 'tourner ...' se colle sous le bloc 'bouger'. Modifiez la valeur de son paramètre 15 pour le faire passer à 90. Ensuite, collez un autre bloc 'avancer ...' dessous avec comme valeur 50 pour le paramètre pas. Vous avez fait une séquence de trois instructions et votre programme doit ressembler à ceci :


Si vous exécutez votre programme, votre chat commence par se déplacer de 50 points suivant sa direction courante (indiquée par le trait bleu sur le dessin du chat , 0° étant l'orientation vers le haut, 90° vers la droite). Ensuite, l'instruction suivante fait tourner le chat de 90 degrés dans le sens horaire et la dernière instruction le fait alors avancer de nouveau de 50 pas.

Sauvez votre premier script en cliquant sur le bouton Save puis en sélectionnant le disque Z et en mettant le nom tuto1.

Question : lorsque le chat est aux coordonnées  x = -30, y = 40 et orientation = -180°, après exécution du programme, quelles seront les nouvelles coordonnées?
Avant de tester avec votre programme,  déplacez le chat en cliquant dessus dans la zone E avec le bouton gauche (et en le maintenant enfoncé). Pour l'orientation, cliquez puis ajustez la position du trait bleu sur le dessin du chat.

Labyrinthe

Question :  chargez le fichier suivant : labyrinthe.sb dans votre compte (sur le disque Z:). Ouvrez ce fichier sous Scratch en cliquant sur le bouton Open, puis en sélectionnant le disque Z puis le fichier. Faites alors un script (série d'instructions) permettant à la tortue (le triangle bleu) d'aller sur le point vert. Pour cela, vous utiliserez le fait que les cases sont séparées de 60 pas.

Dessin d'un carré

Rechargez votre premier script (tuto1.sb) en cliquant sur le bouton Open. Dans la zone B, sélectionnez la famille d'instructions 'stylo'. Faite glisser l'instruction 'abaisser le stylo' et mettez la quelque part dans la zone de programme (zone C). Faites alors glisser le bloc précédent constitué des trois instructions afin de l'assembler sous le nouveau bloc.
Ensuite, sélectionnez la famille 'Contrôle', puis faites glisser un bloc  sous lequel vous assemblerez les 4 autres blocs.
Vous devez obtenir le programme suivant :

Pour lancer ce programme, vous devez maintenant cliquer sur le drapeau vert se trouvant dans le coin haut droit de Scratch . Vous constaterez alors que la fait d'avoir ajouté une instruction abaissant le stylo fait que le chat laisse la trace du chemin qu'il a parcouru.

Question : Faites un programme permettant de dessiner un carré de 50 points (pas) de coté.

Répéter

Lors de la question précédente, vous avez pu constater qu'il était assez laborieux de dessiner un carré, il fallait mettre beaucoup d'instructions, que dire si l'on avait demandé de dessiner un dodécagone (12 cotés égaux)! Or on constate que les instructions sont répétitives : on se déplace puis l'on tourne et ainsi de suite.
On va donc utiliser le bloc 'répéter ... fois' se trouvant dans la famille 'Contrôle. C'est notre premier exemple de structure itérative.
Faites le programme suivant (attention à bien mettre les bonnes valeurs pour les paramètres et un bloc 'effacer tout' en première instruction).



Exécutez ce programme et constatez que vous avez le dessin d'un carré. Le programme fait les choses suivantes :
Après avoir effacé l'écran de toute trace du dessin précédent, on met le stylo en position basse puis on va répéter 4 fois les 2 instructions consistant à faire avancer le stylo de 50 pas puis à changer son orientation de 90°.

Question : Modifiez les paramètres des instructions afin de dessiner : un triangle équilatéral, un hexagone (6 cotés), un dodécagone (12 cotés).

Variable

On voudrait faire un programme permettant de tracer un n'importe_quoi_gone c'est à dire une figure géométrique ayant n cotés, avec n pouvant varier entre 3 et 20 (par exemple).
Pour cela, sélectionnez la famille d'instructions 'Variables'. Cliquez alors sur le bouton 'Nouvelle variable' et dans la fenêtre qui apparait, entrez dans le champ 'Variable name' le nom 'nombre de cotés' (par exemple).



Dans la zone E apparaît alors cette petite fenêtre  indiquant la valeur (ici 0) stockée dans la variable. Une variable est comme une boite servant à stocker quelque chose (ici la valeur 0) et afin de pouvoir récupérer plus tard le contenu de cette boite, on va lui donner un nom pour la distinguer des autres boites (variables) qui seront présentes également.
Cliquez avec le bouton droit sur cette zone pour faire apparaître un menu vous permettant de choisir l'option 'potentiomètrer'
Recliquez alors avec le bouton droit sur cette zone pour faire apparaitre un nouveau menu et sélectionnez l'option 'définir le min et le max du potentiomère' et dans la fenêtre qui apparait mettez la valeur 3 dans min et la valeur 20 dans max. Votre variable est alors munie d'un slider (curseur en Français) permettant d'ajuster sa valeur entre 3 et 20 . Cela permettra, avant de lancer le programme, de spécifier le nombre de cotés de la figure géométrique que l'on souhaite tracer.
Glissez alors la variable afin de la mettre à la place du paramètre permettant de spécifier les nombre de répétitions de l'instruction 'répéter'. Vous devez alors obtenir ceci :
Avec une rotation de 30°, si vous réglez la position de la variable 'nombre de cotés' sur 8, vous obtiendrez la figure suivante :



Afin d'obtenir une figure géométrique fermée, il convient d'ajuster l'angle de rotation au nombre de côtés. Ainsi pour un carré (4 cotés), on doit tourner de 90°. Pour un hexagone (6 cotés), on doit tourner de 60° et donc pour n cotés, on doit tourner de 360/n°.
Créez donc une autre variable, nommée 'angle'. Juste après l'instruction 'abaisser le stylo', insérez une instruction 'mettre angle à 0' . A la place de la valeur de 0, il va falloir mettre le résultat du calcul 360/nombre de cotés. Pour cela, sélectionnez la famille d'instructions 'Nombres'. Faites glisser un bloc diviser à la place de la valeur 0 puis mettez la valeur 360 dans la première partie de ce bloc et la variable 'nombre de cotés' dans la deuxième. Vous devez avoir alors ceci :
Pour finir, mettez la variable 'angle' comme paramètre de l'instruction 'tourner'. Votre programme est alors le suivant :


Répéter de répéter

On peut imbriquer les instructions répéter les unes dans les autres.

Question
: Pour le programme suivant, avant de l'exécuter, essayez de prévoir son résultat, ce qui sera dessiné à l'écran :



Question : Faites un programme permettant de dessiner le motif suivant :


Les tests

On souhaite réaliser un programme où l'ordinateur "pense" à un nombre entre 1 et 4. Le joueur propose alors une valeur entre 1 et 4. Si sa proposition correspond au nombre "pensé" par l'ordinateur, le chat doit dire "gagné" sinon il doit dire "perdu".

Pour cela, vous allez devoir commencer par créer 2 variables : 'nbproposé' et 'nbMystérieux'. Associez un slider entre 1 et 4 à la variable 'nbProposé'.
Ensuite, dans la famille d'instructions 'Contrôle', vous allez utiliser une nouvelle instruction permettant de faire des tests : le bloc 'si ... sinon ....'
Le principe de cette structure conditionnelle est de tester une condition, si cette condition est vraie, on fait un bloc d'instructions sinon, si elle est fausse, on fait l'autre bloc d'instructions.
Vous allez aussi devoir utiliser 2 nouveaux blocs appartenant à la famille 'Nombres' : le bloc permettant de tester l'égalité ou non entre 2 variables et le bloc permettant de générer un nombre aléatoire entre 2 valeurs  et aussi un nouveau bloc se trouvant dans la famille 'Apparence' : le bloc 'dire Hello'.
Réalisez alors le programme suivant :

Exécutez ce programme et constatez que quand les contenus des 2 variables ('nbMystérieux' et 'nbProposé') sont identiques, le chat dit "gagné', sinon il dit "perdu".

Question : modifiez ce programme pour tester si le nombre proposé est plus petit que le nombre mystérieux, auquel cas il faudra dire "plus grand" sinon on dira "plus petit". 

Question : dites ce que fait le programme suivant :


Rebond

On souhaite écrire un programme dans lequel une balle va rebondir indéfiniment sur des murs.
Pour cela, nous avons besoin de nouvelles instructions. Commencez par récupérer le plateau de jeu et la balle sous la forme d'un projet que vous allez ouvrir à l'aide de bouton 'open' de Scratch.  
Pour commencer, l'instruction 'Contrôle / Répéter indéfiniment' va permettre, comme son nom l'indique, de répéter indéfiniment et non pas un nombre données de fois un bloc d'instructions.
Le bloc 'Mouvement / changer x par ...' va permettre d'augmenter la valeur courante de x (position horizontale de la balle) d'une certaine valeur.
Le programme suivant déplace donc la balle vers la droite jusqu'à ce qu'elle sorte de l'écran.
 
Maintenant, il s'agit de détecter la collision de la balle avec le bord rouge. pour cela, on va utiliser une instruction conditionnelle 'Contrôle / Si' et dans son test, on va mettre un test de couleur que l'on trouve dans la famille 'Capteurs'. Ce bloc va tester si une couleur, choisie à l'aide de la pipette, se trouve au dessus d'une autre couleur .
Faites alors le programme suivant :

Lancez le programme et constatez que lorsque le bord est atteint, le message correspondant s'affiche.
Pour finir, il s'agit d'inverser le sens de déplacement jusqu'à heurter l'autre mur.
Pour cela, on va utiliser une nouvelle variable 'sensX' qui aura comme valeur soit 1 soit -1 suivant que l'on souhaite se déplacer vers la droite ou vers la gauche. Pour inverser le sens, il suffira de multiplier la valeur du sens actuel par -1. S'il valait 1, il va passer à -1, s'il valait -1, il va passer à 1.
Voici le programme correspondant :

Pour arrêter le programme, cliquez sur l'hexagone rouge (en haut à droite).

Question : récupérez ce nouveau plateau de jeu et faites un programme où la balle se déplace en diagonale et rebondit sur les bords rouges et verts.

Des blocs de codes

On souhaite faire un programme permettant de dessiner simplement la figure suivante.

Pour cela, on va faire un bloc d'instructions permettant de dessiner un carré puis on va appeler ce bloc d'instructions 6 fois de suite en se déplaçant stylo levé entre chaque carré.
On va commencer par mettre un bloc 'Contrôle / quand je reçois ...' En cliquant sur la liste déroulante, on a la possibilité de choisir l'option 'new...' afin de créer un premier message. Donnons lui le nom 'carré'.
Créez alors le bloc d'instructions correspondant au message 'carré' :


Créez alors le programme de la façon suivante :

Notez la présence du bloc 'Contrôle / Envoyer à tous ... et attendre' qui aura pour but d'envoyer le message 'carré'. Le bloc d'instructions qui était en attente de la réception du message 'carré' s'active alors pour dessiner un carré à l'écran. Sitôt fini, le programme principal passe alors à l'instruction suivante ('relever le stylo'), puis 'bouger ...', puis 'abaisser le stylo' jusqu'à de nouveau envoyer le message 'carré', provoquant le dessin d'un nouveau carré un peu plus loin.

Question : Que dessine le programme suivant?


Question
: Faites un programme permettant de dessiner des carrés de taille décroissante.


Question : Et un programme permettant de dessiner une étoile.

Question : Chargez le fichier suivant : labyrinthe_automatique. 

Faites un script permettant à la tortue d'aller automatiquement sur le point vert.

Pour cela, vous allez utiliser les 2 "moustaches" (en noir et en bleu) afin de détecter s'il y a un mur en face et/ou sur le coté de la tortue. L'algorithme permettant de trouver le point vert consiste à toujours maintenir le contact entre la moustache noire et les murs (en rouge). Si le contact est perdu, faire tourner la tortue de 90° sur sa droite puis la faire avancer d'une case. Si la moustache bleue touche un mur, faire tourner la tortue de 90° sur sa gauche.

 

Star Wars

Vous allez réaliser un jeu où un vaisseau spatial piloté par votre souris devra éviter le plus longtemps possible des vaisseaux ennemis lui tombant dessus.

Commencez par charger le fichier suivant contenant l'image du fond ainsi que les 3 acteurs (vaisseau, alien1 et alien2).

Déplacement du vaisseau

Sélectionnez l'objet vaisseau comme indiqué ci-dessus afin de créer ses scripts (programmes).

Ajoutez un script qui, quand le drapeau vert est pressé, fasse que la position horizontale du vaisseau suive indéfiniment le mouvement de la souris. Pour cela, vous utiliserez, entre autre, les briques suivantes : pour mettre la position X de l'objet à une certaine coordonnée et pour récupérer la position X de la souris. Testez.

Chute des vaisseaux Aliens

Sélectionnez l'objet alien1 pour lui ajouter des scripts.

Ajoutez un script qui, quand le drapeau vert est pressé, fasse que l'alien1 bouge de 2 pas indéfiniment. Les pas seront fait suivant sa direction qui est de -180°, vers le bas. Utilisez pour cela la nouvelle brique . Faites de même pour l'alien2 avec une vitesse de chute de 4. Testez.

Pluie d'Aliens

Lors de l'étape précédente, une fois que les aliens ont chu, ils restent bloqué en bas de la fenêtre. Ajoutez un nouveau script pour chacun des aliens afin de tester indéfiniment si un bord (edge) est touché auquel cas on va remettre l'alien à une position X aléatoire (entre -200 et +200) et à une position Y de 130 (en haut de l'écran).

Vous utiliserez pour cela les nouvelles briques suivantes :

  • qui permet, en déroulant le menu, , de tester si un des bords de l'écran est touché
  • qui permet de répéter indéfiniment le test qui, s'il est vrai, exécute les instructions mises dans le bloc.
  • qui permet de mettre l'objet aux coordonnées x,y spécifiées (ici x=-29, y=-129). Les coordonnées X peuvent varier de -240 (à gauche) à 240 et Y de -180 (en bas) à 180.
  • qui tire un nombre aléatoire compris ici entre 1 et 10.

Collision

Vous allez ajouter un autre script à chacun des aliens de manière à ce qu'ils testent indéfiniment s'ils touchent le vaisseau, auquel cas tous les scripts doivent s'arrêter (le jeu est terminé).

Utilisez pour cela la nouvelle brique suivante (en plus de celles vues précédemment) qui permet d'arrêter tous les scripts.

Score

Pour finir, après avoir sélectionné l'objet 'vaisseau', ajoutez un dernier script qui, quand le drapeau vert est pressé, incrémente une variable score (incrémente = lui ajoute 1) toutes les secondes.

Utilisez les nouvelles briques et

Le jeu est maintenant complet. S'il vous reste du temps, essayez d'ajouter les options suivantes :

  • Faire en sorte que les vitesses de chute augmentent au bout d'un certain temps.
  • Faire que la direction de chute varie aléatoirement (entre -160° et -200°)
  • Faire que le vaisseau ait 3 vies et que donc, quand une collision a lieu, on retire une vie et le jeu continue, et cela jusqu'à ce qu'il n'y ait plus de vie.
  • Défendez-vous, faites en sorte qu'en cliquant avec la souris un missile parte en direction des aliens. S'ils sont touchés, ils doivent disparaitre et cela vous rapporte des points s'ajoutant à votre score.
  • .... à vous d'imaginer d'autres options...

.