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