Académique Documents
Professionnel Documents
Culture Documents
Paternit. Vous devez citer le nom de l'auteur original de la manire indique par l'auteur de
l'uvre ou le titulaire des droits qui vous confre cette autorisation (mais pas d'une manire qui
suggrerait qu'ils vous soutiennent ou approuvent votre utilisation de l'uvre).
Pas d'Utilisation Commerciale. Vous n'avez pas le droit d'utiliser cette cration des fins
commerciales.
Chacune de ces conditions peut tre leve si vous obtenez l'autorisation du titulaire des
droits sur cette uvre.
Rien dans ce contrat ne diminue ou ne restreint le droit moral de l'auteur ou des auteurs.
Notes de l'auteur :
Ce document est grandement inspir du livre de Wanda P. Dann, Stephen Cooper et Randy Pausch
Learning to program with Alice (Pearson, Practice Hall), mais il n'en constitue pas une traduction.
Alice est gratuitement tlchargeable sur www.alice.org
Ce document a t utilis par trois enseignants du lyce G Fichet de Bonneville (Nicolas Bechet,
David Berthier et moi mme) pour initier des lves (3 groupes de 20 lves) de seconde, la
programmation oriente objet pendant l'anne scolaire 2009-2010. Un grand merci Nicolas pour le
temps consacr amliorer ce document.
Un cours destin aux lves de premire faisant le lien entre Alice et la programmation en Java est
en cours de prparation.
Prface
Alice ?
Alice est un logiciel " open source " qui a t ralis lUniversit de Carnegie Mellon
(Pittsburgh Pennsylvanie USA), dans le cadre dune dmarche pdagogique visant motiver des
lves de collges ou de lyce sinitier la programmation.
Le principe dAlice est de permettre la construction dune scne 3D incluant des dcors, des
personnages (humains ou humanodes), des animaux, des objets, du texte, du son ou dautres
lments issus de bibliothques fournies avec le logiciel et pouvant tre enrichies partir dInternet
ou bien avec des crations labores avec des logiciels spcialiss tels que 3D Studio par exemple.
Outre ces lments, lutilisateur dAlice dispose aussi de la possibilit de placer et de faire voluer
une camra et de rgler des questions dclairage, de cadrage, etc.
A tous les lments sont associs des " mthodes ", cest dire des commandes ou des
actions agissant sur tout ou partie de llment : agrandir un objet, le tourner, dplacer une camra,
plier un bras, faire marcher un personnage, etc. Chaque mthode peut disposer de paramtres (par
exemple : distance parcourir, angle de rotation). De nouvelles mthodes plus ou moins
complexes peuvent tre cres ou modifies. Certaines actions peuvent tre contrles partir du
clavier ou de la souris qui disposent donc de leurs propres mthodes (appuyer sur une touche, clic
droit, etc).
La programmation dune squence 3D anime commence donc en gnral par lcriture dun projet
(scnario, storyboard ou autre forme de cahier des charges), puis par la slection et la mise en place
des diffrents lments sur la scne, et enfin la programmation de ces diffrents lments par
glisser-dposer puis paramtrage des mthodes. La vrification du bon droul de la programmation
seffectue en " jouant " la squence lcran. Il est ensuite possible dexporter cette squence sous
forme dimages, de vido, ou encore de fichier partageable par dautres utilisateurs dAlice.
Apprendre la programmation
Lapprentissage de la programmation est un domaine pdagogique particulirement intressant
permettant de donner aux lves lexprience de systmes complexes en dveloppant un mode de
pense structur, mthodique et rigoureux quils pourront ensuite mettre en uvre dans de
nombreuses autres matires de la Biologie lconomie, mais aussi dans la vie pratique, que ce soit
au contact des appareils technologiques de la vie courante, ou bien de systmes complexes dont le
fonctionnement dpend de celui de ses lments constitutifs et de leurs interactions (automobile,
mto, organisation de la production dans une usine, plan de dveloppement conomique,
laboration dune politique environnementale,).
La pratique de la programmation permet de se trouver confront des problmes plus ou moins
complexes ncessitant la fois une dmarche logique base sur lanalyse, une approche par
hypothses, essais successifs et limination, une capacit imaginative, un esprit dinitiative propice
lauto-apprentissage et enfin le dveloppement de qualits plus gnriques telles que la patience,
louverture desprit, ladaptabilit, la prcision.
Enfin la programmation sappuie sur des langages qui ont leur vocabulaire et leur syntaxe, elle
renforce donc la formation de lesprit aux pratiques linguistiques. Dune faon plus directe, les
lves, sans forcment se trouver une vocation pour les mtiers de linformatique, seront confronts
tout au long de leur vie lenvironnement informatique et nombre dentre eux seront appels
collaborer de faon troite avec des professionnels de linformatique ou encore de mettre
directement en application leurs savoir-faire en programmation, comme par exemple dans le cadre
de la mise en place de formules sous tableur Excel, de la manipulation dinformations issues de
bases de donnes marketing ou commerciales, ou de la prparation dun e-mailing.
Mais lapprentissage de la programmation est aussi potentiellement porteur de frustrations ! Les
ttonnements pour obtenir un rsultat satisfaisant peuvent tre longs et striles, la patience trop
malmene, les problmes jugs trop complexes, leurs rsolutions trop obscures. Do la conception
du logiciel Alice, un outil de programmation dans un environnement 3D permettant de manipuler
des objets et des personnages afin de raliser des squences animes, voire des jeux interactifs.
Alice a t pens afin de lever deux des principaux obstacles rencontrs par les programmeurs
dbutants :
Pour cela, la programmation seffectue par glisser-dposer de blocs de code incluant les concepts
classiques abords dans ce domaine : itrations et boucles, branchements conditionnels, mthodes,
paramtres, variables, tableaux et rcursivit. De plus, lapprenant peut tout moment observer le
rsultat, ajuster et corriger ses erreurs, en visualisant lanimation 3D en cours de ralisation.
Sommaire
Chapitre I : Les premiers pas
p8
Exercices chapitre I
p 12
p 14
Exercices chapitre II
p 25
p 27
p 36
p 38
p50
p 52
p 62
p 64
Exercices chapitre V
p 69
p 71
Exercices chapitre VI
p 79
p 81
p 87
p 89
p 99
p 101
p 104
Annexe 3 : La camra
p 108
p 111
p 112
p 114
Chapitre I
Les premiers pas
Alice 2.2 va vous permettre de crer un monde virtuel rempli de personnages de toutes sortes.
l'ouverture du logiciel, vous devez choisir un monde vide (ou un monde dj partiellement peupl)
" Templates " permet d'ouvrir un monde vide, " Textbook " permet d'ouvrir un monde partiellement peupl
Une fois " le monde " vide choisi, il faut le peupler avec des personnages ou des objets inanims
(dans les 2 cas, nous avons affaire des instances de classe au sens de la POO, chaque objet ayant
des mthodes, des fonctions et des attributs (variables)).
Le bouton " ADD OBJECTS " permet d'ajouter des objets (personnages ou objets inanims).
La premire chose faire est de choisir un objet parmi la collection propose (il existe aussi d'autres
objets sur le net). L'objet est plac dans le monde par cliquer-dplacer-dposer.
Vous pouvez modifier la taille et la position de vos objets (voir schma ci-dessus " contrle objet ").
En 3D, vous pouvez dplacer vos objets (translation), vers le haut, vers le bas, vers la gauche, vers
la droite, vers l'avant et vers l'arrire. Vous pouvez aussi faire tourner vos objets (rotation autour de
l'axe des X, l'axe des Y et l'axe des Z). Bien sr tout cela est tester.
Pour vous reprer dans cet univers 3D (ce qui est loin d'tre vident ! ), vous pouvez utiliser, dans
l'diteur de scne, la vue " quad view "
Une fois votre scne mise en place cliquez sur " DONE "
Initiation la programmation oriente objet avec Alice
10
Pour chaque objet, leur crateur a dfini un centre, ce centre correspond souvent au centre
gomtrique de l'objet (plutt centre de masse), mais pas forcment : pour les personnages, le centre
de l'objet se trouve entre les 2 pieds, pour la batte de baseball, le centre se trouve au niveau du
manche....bref, voir au cas par cas.
Le centre de l'objet est trs important, car les coordonnes d'un objet sont donnes par rapport au
centre de l'objet.
11
Exercices chapitre I
12
Voici quelques exercices pour vous entrainer maitriser la mise en place d'une scne dans Alice 2.2
Dans ces exercices il est indispensable d'utiliser la vue " quad view "
Exercice 1.1
Dans un paysage enneig, placer 2 ranges de 3 pingouins serrs les uns contre les autres (une
rookerie).
Exercice 1.2
Reproduire la scne suivante (personnage : MaleBalletDancer).
13
Chapitre II
Premier programme
.
14
Placer les personnages dans une scne, c'est bien, animer une scne, c'est mieux ! Nous allons donc,
dans ce chapitre, crire notre premier programme.
Scnario et story-board
Avant d'aborder l'criture d'un programme dans Alice, il va falloir nous familiariser avec l'criture
des scnarios et des story-boards. Nous allons commencer par un petit exemple relativement simple,
mais au contenu trs riche :
Scnario : La scne se droule sur la Lune, un robot (terrien), vient juste de descendre de son
vaisseau spatial, quand il est interpel par un extra terrestre qui jusqu' prsent tait cach derrire
un rocher. Surpris, le robot tourne la tte vers l'intrus et se prcipite vers lui, mais trop tard, l'extra
terrestre a disparu !
Le robot tourne alors la tte vers la camra; en signe de danger cette dernire devient rouge. Le
robot dit la phrase reste clbre (Apollo 13) :
Houston, nous avons un problme !
Maintenant que la trame de l'histoire est connue, il nous faut passer au story-board :
Le story-board va nous permettre de dcouper notre histoire en scne.
Il comportera : le numro de la scne, un dessin de la scne (non obligatoire), une description de la
scne, les ventuels sons et les ventuels textes. Pour notre premire scne, cela pourrait donner
ceci :
15
Tous les acteurs sont dj en place (l'extra terrestre est cach derrire un rocher).
Comme dj dit auparavant, Alice est 100 % objet, avec Alice, on ne fait qu'une seule chose :
manipuler des objets. Qui dit POO dit classe, instance, mthodes, attributs, fonctions. Alice a dj
cr les instances dont nous aurons besoin (spiderRobot, rock, rock2, alienOnWheels et
lunarlander).
16
Chacune de ces instances possde ses propres mthodes, ses propres attributs et ses propres
fonctions.
Voici par exemple, une partie des mthodes de l'instance spiderRobot :
Nous allons crer une nouvelle mthode pour la classe World grce la fentre
World.myfirstmethod (une fois cr, nous aurons une mthode de la classe World qui aura
pour nom myfirstmethod .)
Nous reviendrons sur les dtails plus tard, pour l'instant, vous devez juste savoir que nous allons
remplacer Do Nothing par des instructions (qui pourront tre des mthodes ou des fonctions (oui,
des mthodes dans une mthode !) mais pas seulement).
17
Quand nous lancerons notre programme, la premire chose que fera Alice, c'est d'appeler notre
mthode World.myfirstmethod .
Car comme nous le montre l'image ci-dessus : When the world starts , do World.myfirstmethod ( );
(nous reviendrons aussi plus en dtail sur la fentre Events plus tard.)
Dernire chose avant d'entrer dans le vif du sujet, il existe 2 faons d'excuter les instructions : l'une
aprs l'autre ou plusieurs en mme temps. Pour les excuter l'une aprs l'autre il faudra utiliser
DoInOrder et DoTogether pour les excuter toutes en mme temps.
La premire chose faire et de dposer DoInOrder la place de DoNothing
Ceci tant fait, vous devriez avoir ceci :
18
Nous avons utilis la mthode move de alienOnWheels avec pour argument UP (vers le haut) et
1 meter (d'une distance d'un mtre).
Vous devriez ici prendre conscience de la puissance d'Alice, car faire bouger un objet de 1 mtre
vers le haut est d'une simplicit enfantine.
Le programme vous propose automatiquement les arguments lis la mthode employe, d'autres
arguments optionnels sont disponibles (more...)) !
Nous pouvons d'ores et dj tester notre programme en cliquant sur le bouton Play.
19
Pour la deuxime instruction, nous utiliserons la mthode say (toujours pour alienOnWheels),
dans le menu droulant, slectionner other... et entrer votre texte dans la fentre.
Nous pourrions tester l'effet de notre deuxime instruction, mais avant nous allons choisir la dure
d'affichage de notre texte en slectionnant ...more-> duration-> 2 seconds.
et voil le rsultat :
20
Slectionner head (comme ci-dessus), il suffit maintenant de slectionner la mthode turn dans
l'onglet methods.Choisir alors LEFT puis 1 revolution puis dans more... choisir duration
et 2 seconds.
Le robot doit maintenant se tourner vers l'extra terrestre. Pour ce faire, on slectionne la mthode
turnToFace (se tourner vers) de l'instance spiderRobot, comme target choisir
alienOnWheels-> the entire alienOnWheels (on aurait pu choisir seulement une partie de
alienOnWheels)
Faisons avancer le robot droit devant lui (FORWARD) sur 1 mtre. Pour cela nous allons utiliser
la mthode move de spiderRobot.
Aprs avoir test cette nouvelle instruction, il est vident que le dplacement du robot n'est pas trs
naturel (les pattes ne bougent pas). Essayons d'amliorer cela.
Pour spiderRobot, il n'existe pas de mthode marcher, nous devons la programmer nous mme.
Il faut en mme temps avancer et bouger les pattes, pour se faire nous allons utiliser doTogheter
la place de doInOrder (faire ensemble la place de faire dans l'ordre).
Effaons la dernire ligne ajoute et dposons doTogheter la place.
21
Nous allons ajouter la mthode move comme indiqu prcdemment et appliquer la mthode
turn vers l'avant sur 0,1 rvolution puis vers l'arrire toujours sur 0,1 rvolution la jointure entre
les 2 parties de la patte arrire droite (la rotule) (ouf !), mme chose pour la patte avant gauche (par
souci de simplicit nous n'animerons que 2 pattes sur 4).
Tout cela est un peu compliqu expliquer, alors voyons, ce que cela donne l'cran :
Testons, cela ! Horreur, cela ne fonctionne pas (on dit qu'il y a un bug !) Nous venons tout
simplement de faire une erreur de programmation (une erreur de logique !)
Rflchissons un peu :
finalement, il est tout fait normal que cela ne fonctionne pas, en effet nous demandons au robot de
tourner en mme temps la jambe vers l'avant et vers l'arrire, bref de ne rien faire !!
Pour que cela fonctionne il faut, dans un premier temps qu'il tourne vers l'avant puis ensuite vers
l'arrire. Ce mot ensuite doit immdiatement vous faire penser doInOrder. Cela sera un
doInOrder dans un doTogheter ! Je vous laisse rflchir tout cela !
Voil le code corrig :
22
L'extra terrestre doit se cacher (mouvement inverse de celui du dpart), on applique donc la
mthode MOVE DOWN 1 meterde alienOnWheels.
Pour que ce mouvement vers le bas se fasse pendant le mouvement du robot, il faut veiller ce que
cette instruction soit dans le doTogether du mouvement du robot (voir les diffrentes couleurs de
fond)
Dans notre story-board, le robot doit maintenant se tourner vers la camra. On va donc utiliser la
mthode turn to face de spiderRobot avec l'argument camera.
23
La tte du robot doit maintenant devenir rouge. Nous allons modifier un des attributs de la tte du
robot (avec Alice pour accder aux attributs d'une instance, il faut cliquer sur l'onglet properties),
l'attribut color.
Dplacer l'attribut color la suite de nos instructions et choisir RED
24
Exercices chapitre II
25
Exercice 2.1
Robert, Gertrude et Davina sont 3 bonshommes de neige. Robert a toujours eu un petit faible pour
Gertrude, mais n'a jamais eu le courage de lui dclarer sa flamme. La scne dbute alors que
Gertrude et Davina sont en pleine discussion.Robert choisit ce moment pour se faire remarquer par
Gertrude ( vous de voir comment !). Gertrude se retourne pour faire face Robert et reprend sa
conversation avec Davina sans le moindre mot pour ce pauvre Robert.
crire la fin de ce scnario, crire un story-board, programmer la scne.
Dbut de la scne
scne initiale
scne initiale
26
chapitre III
Les fonctions et les structures de contrle
27
Jusqu' prsent, tous nos programmes crits avec Alice taient linaires ( chaque excution toutes
les instructions taient toujours parcourues dans le mme ordre).
Pourtant, programmer, c'est souvent demander l'ordinateur de choisir les instructions excuter.
Nous allons maintenant tudier une technique permettant d'aiguiller le droulement du programme
dans diffrentes directions, en fonction des circonstances rencontres. Pour ce faire, nous devons
disposer d'instructions capables de tester une certaine condition et de modifier le comportement du
programme en consquence.
La plus simple de ces instructions conditionnelles est l'instruction if. If en anglais signifie " si ".
Nous allons donc avoir une structure du type : " si ceci est vrai alors fait cela ". Mais avant d'tudier
ces conditions, nous devons d'abord nous arrter sur les fonctions dans Alice 2.2.
les fonctions dans Alice
Nous avons dj utilis l'onglet "properties", l'onglet "methods", il nous reste donc dcouvrir
l'onglet "functions"
Les fonctions ressemblent fortement aux mthodes, on peut mme dire que les fonctions sont des
mthodes qui renvoient des valeurs. Quand vous utiliserez une fonction, le rsultat de l'excution
sera forcment une valeur (alors qu'une mthode ne renvoie aucune valeur : la mthode "move"
dplace un objet, mais ne retourne aucune valeur).
Par valeur je n'entends pas forcment un nombre, en effet une valeur peut tre un boolen (voir plus
loin), une chane de caractre (suite de caractre) ou bien sr, un nombre.
Un petit exemple s'impose :
reprenons l'exemple du robot et de l'extra terrestre. Le robot avance d'un mtre vers le rocher, mais
pourquoi un mtre ? Pourquoi pas 2, 3 ou 4 mtres ? Tout simplement parce qu'avec un cela
fonctionne ! Si j'avais pris une trop grande valeur, mon robot aurait pntr dans le rocher !
Comment faire pour que le robot s'arrte juste au bord du rocher ? Il faut dans un premier temps
connatre la distance robot-rocher. C'est l que les fonctions entrent dans la dance. En effet, il existe
une fonction qui retourne comme valeur la distance entre 2 objets :
28
Nous allons utiliser la fonction "spiderRobot distance to" avec l'argument "rock", nous aurons alors
la distance entre le robot et le rocher. Mais o placer cette fonction ?
Il ne faut pas oublier qu'une fonction renvoie une valeur, tout se passe comme si au moment de
l'excution du programme, Alice remplaait la fonction (ici "spiderRobot distance to rock") par la
valeur retourne par cette mme fonction.
O avons-nous besoin de cette valeur ?
Dans la fonction "move" (pour remplacer nos "1 meter"), nous allons donc remplacer "1 meter" par
la fonction "spiderRobot distance to rock" dans la mthode "spiderRobot move foreward......".
Simple, non ?
Pour les oprations il faut d'abord mettre une valeur quelconque (par exemple : "spiderRobot
distance to rock-1") puis remplacer la valeur quelconque par la fonction qui nous intresse (ici on
remplace "1" par "spiderRobot's width").
29
30
diagramme
Les programmeurs font souvent appel des schmas pour reprsenter la structure de leurs
programmes. Ces schmas sont tellement courants que certains symboles sont standardiss :
On utilise aussi le rond qui signifie "la suite du programme sur une autre page"
le programme :
if condition :
instruction A
else :
instruction B
suite du programme.......
Se traduit donc
31
Il suffit (une fois de plus) de faire un "glisser-dposer" et de choisir "true" dans le menu droulant.
Ensuite, il faut remplacer "true" par la fonction qui nous intresse (cette fonction devra bien sr
renvoyer un boolen).
32
Il ne reste plus qu' complter la ligne juste en dessous du if (le robot allonge son cou puis reprend
sa position initiale). La ligne en-dessous du else restant vide (sinon : ne rien faire de plus)
Dans ce cas prcis, la fonction renvoie true chaque excution : le robot est plus petit que le
rocher !
Mais juste pour voir ce qui se passe, modifier (suffisamment) la taille du rocher pour que la fonction
"spiderRobot is shorter than rock" renvoie " false ", constatez par vous mme le rsultat : le cou du
robot ne s'allonge pas !
33
slectionner la fonction qui vous intresse (par exemple avec a<b choisir une valeur pour a et une
valeur pour b.
Remplacer une des 2 valeurs par une autre fonction (en effet dans l'tat actuel des choses la
fonction renvoie toujours true, car 1 est bien infrieur 2, l'intrt du if est donc plus que limit ! )
On peut par exemple remplacer le 1 par une fonction qui donne la taille du robot (spiderRobot's
height) :
Voil, si la taille du robot est infrieure 2 l'instruction sous le if sera excute (la fonction a<b
renverra true)
Initiation la programmation oriente objet avec Alice
34
les rptitions
Parfois, il est ncessaire de rpter plusieurs fois la mme instruction (on pourrait recopier plusieurs
fois la mme instruction, mais bon .....).
Une fois de plus, revenons notre robot et notre extraterrestre !
Dans la dernire version de notre programme " ftiche ", l'animation du robot n'est pas (plus) trs
raliste, car ce dernier parcourt une grande distance en n'effectuant qu'un seul "pas". Si nous
voulons amliorer cette situation, il faudrait revenir la situation prcdente o le robot n'avanait
que d'un mtre.
Mais bon, sommes-nous condamns ne faire avancer notre robot que d'un mtre ?
Bien sr que non, si nous voulons que notre robot avance de 3 mtres, il suffit de rpter 3 fois le
Dotogether suivant :
Glisser-dposer "Loop" juste avant le Do together en choisissant "other..." et "3" (les instructions
dans la boucle seront excutes 3 fois)
On obtient donc :
35
36
Exercice 3.1
Crer une scne avec un loup et une vache. Le loup doit se diriger vers la vache jusqu' qu'il y ait
contact entre les 2 animaux.
Exercice 3.2
Crer une scne avec "skatergirl" et "Pj" ( rechercher dans "People"). Faites sauter en l'air ces 2
personnages, sachant qu'ils sont tous les deux capable de s'lever de de leur taille.
Exercice 3.3
Un dragon ("Medieval") est intrigu par la prsence d'un ballon et dcide de se diriger vers lui.
Arriv 30 m du centre du ballon, il dcide d'en faire le tour 3 fois pour mieux l'examiner, la fin
de chaque tour le dragon essaye d'interpeler les occupants du ballon en leur criant "Hello".
Dsespr, le dragon dcide de se diriger vers la camra. crire le programme correspondant cette
scne.
Exercice 3.4
Crer un monde avec un bonhomme de neige et un tabouret (Kitchen)
Le bonhomme de neige doit se diriger vers le tabouret. Vous devrez utiliser une boucle (Loop). La
fonction "distance to" devra tre utilise pour dterminer le nombre de rptitions de la boucle. Il
faut savoir que la fonction "distance to" renverra une valeur entire (sans les dcimales) si elle est
utilise comme paramtre de "loop". Dplacer le bonhomme de neige pour vrifier que votre
programme fonctionne quelque soit la position de dpart du bonhomme de neige.
37
38
39
Bien videmment, nous pourrions trs bien crire le programme dans sa totalit dans la mthode
"World.my first method" comme nous l'avons toujours fait jusqu' prsent (c'est sans doute la bonne
mthode dans un cas aussi simple), mais pour illustrer notre propos nous allons scinder notre
programme en 3 parties en crant 3 mthodes (une par tape).
Ces mthodes seront forcment des "world-class method" car elles concernent 2 classes diffrentes
(Class Tortoise et Class Hare). Passons la pratique :
En prenant bien soin de slectionner World (ce sont des "world-class method"), cliquer sur "create
new method". Nous allons nommer cette premire mthode "rencontre"
40
Or, la mthode "world.myfirst method" est pour l'instant vide. Passons la programmation de la 2e
mthode, nous reviendrons sur ce point plus tard.
Avant d'attaquer la deuxime mthode, faisons une petite parenthse et parlons un peu des
commentaires. En programmation, il est trs important de commenter ses programmes pour
expliquer d'ventuels lecteurs ce que l'on a voulu faire. Pour ajouter un commentaire, il faut
cliquer sur "//" en bas gauche.
41
Vous pouvez ajouter des commentaires o bon vous semble, fin de la parenthse.
Revenons maintenant notre seconde mthode.
Nous allons crer une mthode "discussion" (toujours une "world-class method")
En suivant le mme cheminement que prcdemment nous arrivons :
42
et pour la 3e mthode ("separation ", attention pas d'accent pour le nom des mthodes) :
Pour lancer nos 3 mthodes (l'une aprs l'autre) nous pourrions modifier "Events". Nous allons
plutt choisir une deuxime stratgie :
Quand Alice excute un programme, il lance par dfaut la mthode "world.my first method" (on
dira plutt qu'Alice appelle la mthode "world.my first method"). Il est possible d'appeler une
mthode dans une autre mthode.
Nous allons donc complter la mthode "world.my first method" avec des appels aux mthodes
"world.rencontre", "world.discussion" et "world.separation" (une fois de plus tout se fait avec du
"cliquer-dplacer" !)
43
En bref, il faudra privilgier cette faon de travailler (c'est plus qu'un conseil !!).
Tout dveloppement srieux devra forcment passer par la phase "fragmentation du problme" et
"mise en place de la liste des mthodes crire".
mthodes et paramtres
Crons une scne avec 2 personnages : class Pj et class Mana.L'instance cre partir de la class
Mana se nommera Gertrude et l'instance cre partir de la class Pj se nommera Robert (on
renommera donc les 2 instances)
Pour tester cette mthode, il suffit de l'appeler dans "world.my first method" comme prcdemment.
44
Et maintenant il n'y a plus qu' rcrire exactement les mmes mthodes, mais cette fois-ci pour
Robert ! Eh bien non ! Il y a beaucoup plus pratique faire :
En effet, si l'on regarde toutes ces mthodes de plus prt, seules 2 choses vont changer : l'instance
concerne (c'tait Gertrude, cela sera Robert) et la chane de caractre (Gertrude dit :"je m'appelle
Gertrude" et Robert dira :"je m'appelle Robert"). Cela vaut-il vraiment le coup de tout rcrire pour
si peu ?
Pour viter cela, nous allons utiliser les paramtres des mthodes. L'ide c'est d'crire une seule
mthode (pour les 2 instances) en remplaant ce qui doit changer d'une instance l'autre par un
paramtre.
Crons un paramtre pour la mthode identification :
45
Vous devez entrer un nom (ici cela sera "personnage") et le type de paramtre (ici cela sera un
objet)
46
Crons un deuxime paramtre de type String (chane en anglais) on le nommera "nom". Il devra
remplacer le 3e "Gertrude" :
"personnage" et "nom" seront remplacs par les valeurs dsires au moment de l'appel de la
mthode world.identification (dans world.my first method)
Alice vous demandera par quoi voulez-vous remplacer les paramtres personnage et nom au
moment du cliquer-dposer de la mthode identification dans world.my first method.
Vous pouvez d'ores et dj tester le programme avec uniquement la mthode identification.
Il nous reste modifier les autres mthodes en crant un paramtre nom de type objet pour la
mthode avance et un paramtre nom_tete (attention pas d'accent) de type objet pour la mthode
incline.
47
Compltons la mthode world.my first method avec les appels aux diffrentes mthodes.
48
Vous pouvez aussi crer un paramtre "distance" de type nombre, si vous voulez dcider de la
distance faire parcourir au personnage au moment de l'appel de la mthode avance.
49
Exercices chapitre IV
1re partie
50
Exercice 4.1
Un paysage enneig, un bonhomme de neige, une bonnefemme de neige. Le bonhomme de neige
salut la bonnefemme de neige en enlevant puis en remettant son chapeau. La bonnefemme de neige
lui repond avec le mme geste.
Ecrire une World-level-method permettant au bonhomme de neige et la bonnefemme de neige de
se saluer comme dcrit ci-dessus (attention une seule mthode pour les deux !). Pourquoi n'crit-on
pas une Class-level-method ?
Exercice 4.2
Composer une scne avec un magicien, une assistante de magicien, un lapin et une table.
L'assistante du magicien est allonge sur la table. Ecrire une mthode "levitation" permettant au
magicien de faire voler (lvitation) aussi bien le lapin que l'assistante.
Exercice 4.3
Placer 4 dragons au sol pour qu'ils forment un losange. Crer une mthode "vol_du_dragon"
permettant 2 dragons d'changer leur place. Les dplacements devront se faire en volant. Les
dragons ne devront pas voler la mme altitude cause du risque de collision. La mthode
"vol_du_dragon" devra comporter 4 paramtres.
51
52
Nous allons ajouter une Class-Level method qui permettra une instance de la classe IceSkater de
patiner, car comme vous pouvez le constater la classe IceSkater ne possde pas ce genre de
mthode. Dit autrement, nous allons apprendre la patineuse patiner !
Le patinage est un mouvement complexe simuler, car il fait appel plusieurs parties du corps.
Pour patiner, la patineuse doit faire glisser vers l'avant sa jambe gauche puis faire glisser vers
l'avant sa jambe droite, la difficult rside dans le fait que le haut du corps doit aussi suivre ce
mouvement.
En programmation quand on a affaire un problme complexe, on essaye de le fragmenter en
plusieurs problmes moins complexes. Ce n'est donc pas une mthode que nous allons crer, mais
trois :
Une mthode patinage, qui fera avancer la patineuse et qui servira appeler tour tour les 2 autres
mthodes (patinagegauche et patinagedroite).
Crons la mthode patinagegauche :
Dans un premier temps, slectionnez l'instance iceskater puis cliquez sur "create new method ",
appelez-la " patinagegauche ", voil, vous avez cr votre premire Class-Level method (vous
pouvez constater que le nom de la mthode commence bien par IceSkater)
53
Il ne nous reste plus qu' complter notre mthode (il ny a rien de spcial dire, que du connu, sauf
l'instruction wait) :
Voici patinagedroite :
54
N'oublions pas la mthode world.my first method (si vous voulez avoir le temps d'admirer la
patineuse, pourquoi ne pas faire appel une petite boucle ?)
55
La mthode prepa_toupie :
La mthode fin_toupie :
56
57
58
Si maintenant vous (ou un autre) dsire utiliser notre nouvelle classe SuperIceSkater, il suffira de
cliquer sur "File" (menu du haut), et de choisir "Import" dans le menu droulant :
Et voici un nouveau monde avec une instance superIceSkater issue de notre nouvelle classe
SuperIceSkater.
59
Et comme vous pouvez le constater, notre instance iceSkater possde bien toutes les nouvelles
mthodes :
Prenons un exemple simple : nous programmons une nouvelle Class-level-method pour une
instance toto (issue de la classe Toto) : toto.methode1.
La mthode toto.methode1 fait appel une World-class-method : World.bonjour (programme par
nos soins).
Crons une nouvelle classe SuperToto partir de l'instance toto.
Si nous essayons d'utiliser notre nouvelle classe SuperToto dans un autre monde (un nouveau
programme), Alice nous renverra un mchant message d'erreur : "World.bonjour non dfinie". En
effet dans notre nouveau programme la mthode World.bonjour n'existe pas , d'o le message
d'erreur.
Dans le mme genre, il ne faut jamais utiliser une instance dans une Class-level-method :
Retrouvons notre superIceSkater. Nous allons crire une nouvelle Class-level-method pour
superIceSkater extrmement (ridiculement ?) simple qui aura pour seul intert, de vous montrer, ce
qu'il ne faut surtout pas faire.
Initiation la programmation oriente objet avec Alice
60
Imaginons maintenant qu'extrmement fier de notre nouvelle mthode, nous dcidions de crer une
nouvelle classe SuperSuperIceSkater pour pouvoir profiter de cette nouvelle mthode !!
Et l, catastrophe :
En bref, Alice vous dit :"penguin, connat pas !". En effet dans votre nouveau programme l'instance
penguin n'existe pas. Voil pourquoi il ne faut surtout pas utiliser une instance dans une Class-level
method.
Comment faire alors ?
Il faut tout simplement utiliser un paramtre de type objet la place de l'instance penguin.
61
Exercices chapitre IV
2e partie
62
Exercice 4.4
Crer un monde avec un cadenas combinaisons ( rechercher dans objects)
Coder 6 Class-level-method :
un_cran_a_gauche (tourne la roue du cadenas d'un cran vers la gauche)
un_cran_a_droite (tourne la roue du cadenas d'un cran vers la gauche)
un_tour_a_droite (tourne la roue du cadenas d'un tour vers la droite)
un_tour_a_gauche (tourne la roue du cadenas d'un tour vers la gauche)
ouvrir (ouvre le cadenas)
fermer (ferme le cadenas)
Une fois les mthodes codes, crer une nouvelle classe qui hritera de la classe Combolock (par
exemple CombolockPlus)
Exercice 4.5
Exercice libre : choisir un objet, crer pour lui une nouvelle class-level-method (avec au moins 1
paramtre), partir de l'instance prcdente, crer une nouvelle classe. Imaginer une scne
permettant d'illustrer l'utilisation de votre nouvelle classe (et surtout de votre nouvelle mthode).
63
Chapitre V
Interaction utilisateur - machine
64
Nos programmes commencent tre complexes, mais jusqu' prsent, il manque l'essentiel :
l'I-N-T-E-R-A-C-T-I-V-I-T-E. L'utilisateur est pour l'instant uniquement spectateur, or, dans la
plupart des programmes, il interagit avec la machine par l'intermdiaire de la souris et du clavier.
Pour grer cette interaction homme-machine, tous les programmes modernes sont pourvus d'un
observateur d'vnements. L'observateur d'vnements surveille en permanence les priphriques
d'entres (clavier et souris dans la plupart des cas) et ragit en consquence lors de l'utilisation de
ces priphriques.
et Alice
Bien videmment, Alice possde un observateur d'vnements. On "programme" l'observateur
d'vnements d'Alice grce la fentre "Events" (la fentre "Events" est un peu plus qu'un "simple"
observateur d'vnements, car c'est dans cette fentre que l'on trouve le fameux "When the world
starts, do world.my first method"
Dans la fentre vous allez pouvoir choisir les actions entreprendre (souvent l'appel d'une mthode)
en cas :
d'appui sur une touche du clavier
d'action avec la souris (clique sur un objet, dplacement,......)
Prenons un exemple trs simple :
Nous allons crer 2 vnements : "cliquer sur A" et "clic de souris sur l'instance penguin".
L'vnement "cliquer sur A" appellera une mthode "penguin.saut" et l'vnement "clic de souris
sur l'instance penguin " appellera la mthode "penguin.dit_bonjour".
Pour crer un vnement, il faut cliquer sur......"create new event", ensuite, il ne reste plus qu'
complter :
65
Pour obtenir ceci, il faut avoir au pralable cr les Class-level method saut et dit_bonjour.
Il nous reste justement complter ces 2 mthodes :
L'ide est trs simple : si l'utilisateur clique sur lunchLady (que nous appellerons par la suite
Gertrude), nerd devra dire : Gertrude , une pause, levez la main . Gertrude devra alors lever
puis baisser la main.
Si l'utilisateur clique sur jock (que nous appellerons par la suite Robert), nerd devra dire : Robert
, une pause, levez la main . Robert devra alors lever puis baisser la main.
Tout cela semble relativement simple raliser, mais nous allons essayer d'tre le plus propre
possible , notamment en utilisant au maximum les paramtres des mthodes.
66
Vous remarquerez la prsence d'un paramtre de type String, nom_perso. Ce paramtre est utilis
ds la premire ligne de la mthode.
Cette mthode est appele par l'observateur d'vnements Events
En cas de clic sur lunchLady, la mthode nerd.appel est appele avec le paramtre nom_perso gal
Gertrude .
En cas de clic sur jock, la mthode nerd.appel est appele avec le paramtre nom_perso gal
Robert.
67
68
Exercices chapitre V
69
Exercice 5.1
Crer une scne avec un scientifique fou, une table (Furniture), un mixeur (Kitchen/Blender) et une
tasse (Kitchen/Mug). Placer le scientifique fou derrire la table, le mixeur et la tasse sur la table.
crire un programme permettant qu'un clic sur le mixeur entrane les vnements suivants :
70
Chapitre VI
Retour sur les fonctions et le couple if/else
71
Nous avons plusieurs reprises utilis les fonctions proposes par Alice. Il est peut-tre bon de
rappeler qu'une fonction renvoie une valeur (au contraire d'une mthode). Il est bien videmment
possible de crer ses propres fonctions dans Alice et comme les mthodes, ces fonctions peuvent
utiliser des paramtres.
Les fonctions dans Alice ressemblent vraiment aux fonctions en mathmatiques (y = 3x+2 si x = 3
alors y = 11, on a bien une valeur d'entre (3), qui correspond un paramtre dans Alice, et une
valeur de sortie (11)).
Crer ses propres fonctions dans Alice
Nous allons chercher simuler un ballon qui roule. La premire ide qui nous vient est d'utiliser la
mthode move et la mthode turn dans un do together :
Le rsultat est correct, mais si nous dcidons de changer la distance parcourue par le ballon, nous
devrons aussi modifier le nombre de tours effectus par le ballon : tout cela n'est pas trs propre !
Faisons un peu de maths (ou de physique !) : le ballon ne glissant pas sur le sol, quelle est la
distance parcourue par le ballon quand il effectue un tour ? Alors ?
La rponse est : la circonfrence du ballon, c'est dire 2R (R tant le rayon du ballon).
Si le ballon parcourt une distance d, combien de tours doit-il effectuer ? (De plus en plus dur !).
Une petit produit en croix nous permet de trouver : nbre de tour = d/2R.
Revenons Alice, nous allons crer une fonction nbre_de_tours :
Cette fonction sera utilise par la classe toyball, on slectionne donc l'instance toyball, l'onglet
functions et enfin on clique sur create new function.On obtient alors :
72
Remarquez que la fonction cre apparat ct des mthodes (nous avons cr une
class-level-method balle_qui_roule), il faut aussi remarquer le Return la fin de la fonction. Pour
l'instant la fonction renvoie comme valeur 1, nous allons maintenant remplacer le 1. Mais avant a,
nous devons crer un paramtre distance :
Remarquez que nous avons uniquement complt la partie return de la fonction (ce qui est renvoy),
nous aurions pu aussi crire des instructions juste au-dessus (nous verrons des exemples plus tard).
Nous allons maintenant utiliser la fonction nbre_de_tours dans la class level method balle qui
roule :
73
Nous pouvons mme utiliser un paramtre pour la mthode balle_qui_roule qui nous permettra de
choisir la distance parcourir lors de l'appel de la mthode dans world.my first method :
L'ide est de crer un programme permettant d'viter les collisions entre l'hlicoptre et l'avion.
Si la diffrence d'altitude entre l'avion et l'hlicoptre est trop faible, le programme devra modifier
l'altitude d'un ds deux engins. Voici l'ide :
Cration d'une fonction "trop_pret" qui renvoie vrai si les 2 engins sont trop prt et faux si la
distance de scurit est respecte. Une mthode "modif_alt" qui modifie l'altitude. La mthode
world my first method appelle la mthode "modif_alt" (si besoin est !) puis fait avancer les 2
engins.
74
Si la diffrence d'altitude entre les 2 engins est infrieure une certaine valeur, la fonction devra
renvoyer "true" sinon elle renverra "false". Cette diffrence d'altitude sera donne par la fonction
appartenant l'instance helicopter : "helicopter distance above". Nous devons respecter un certain
ordre pour arriver au rsultat attendu:
75
Utilisons la fonction a<b (appartient world), les valeurs (ici 2 et 1 n'ont aucune importance)
Le dernier Return ne peut pas tre supprim, mais cela n'a aucune importance, car il n'est jamais
excut.
Passons maintenant l'criture de la mthode "modif_alt":
Crons une world level method
76
Nous devons faire des tests pour savoir qui est au-dessus et qui est en dessous :
Visiblement le programme fonctionne trs bien quand l'hlicoptre est au-dessus de l'avion. En
revanche quand l'hlicoptre est en-dessous de l'avion, la fonction "modif_alt" est
systmatiquement appele (quelque soit la diffrence d'altitude entre les 2 engins). Nous avons donc
affaire un bug. Essayons de comprendre pourquoi :
Le problme vient de la fonction "helicopter distance above navyjet" utilise dans notre fonction
"trop_pret". En effet, si l'hlicoptre est 10 m au-dessus de l'avion, la fonction "helicopter distance
above navyjet" renverra la valeur 10.
En revanche si l'hlicoptre est 10 m en dessous de l'avion, la fonction "helicopter distance above
navyjet" renverra la valeur 10. Si vous rflchissez un peu notre problme vient de l.
En effet - 10 est bien infrieur 4, il est donc logique que notre fonction "trop_pret" retourne "true"
alors que la diffrence d'altitude est suprieure au 4 m "rglementaire".
Pour que cela fonctionne, il faudrait que la fonction "helicopter distance above navyjet" renvoie 10
au lieu de -10, dit autrement, il faudrait supprimer le signe moins.
77
Les mathmatiques vont venir notre secours. Il existe en effet une fonction mathmatique qui
supprime justement les signes moins : la valeur absolue. Valeur absolue de -10 est gale 10.
Il faut donc demander Alice de prendre la valeur absolue de "helicopter distance above navyjet".
Pour cela il suffit d'ajouter "absolute value of a" (fonction de world) devant "helicopter distance
above navyjet".
Notre programme fonctionne maintenant correctement (il reste un petit bug dans le calcul de la
diffrence d'altitude, parfois l'hlicoptre semble au-dessus, et pourtant, c'est lui qui descend, mais
l, on ne peut pas y faire grand-chose, c'est un bug dans Alice !)
Voil, maintenant, on peut ventuellement mettre des paramtres (de type objet) la place de
navyJet et d'helicopter, on peut aussi remplacer la distance de scurit par un paramtre de type
nombre, mais bon, tout cela, on l'a dj vu auparavant et je vous laisse vous dbrouiller tout seul.
78
Exercices chapitre VI
79
Exercice 6.1
Crer un monde avec une voiture et une route. Vous devez crire un programme permettant la
voiture d'avancer de faon raliste sur la route (en faisant tourner les roues correctement).
Exercice 6.2
Crer un monde avec un pingouin. Ecrire une fonction permettant au pingouin de se dplacer (en
glissant) alatoirement. Pour cela, il faudra crire une mthode "deplacement". A chaque appel de
cette mthode le pingouin devra se dplacer (ce dplacement ne devra pas se limiter un simple
avant-arrire ou un simple gauche-droite, il devra tre plus complexe). Pour vous aider, je vous
signale qu'un move foreward avec un nombre ngatif comme argument entraine un mouvement vers
l'arrire (mme principe pour les mouvements gauche-droite).
Exercice 6.3
Crer un monde avec une mare ronde (choisir "Class circle" dans "Shapes", puis colorer le cercle en
bleu). Placer une abeille (Class Bee, ne pas hsiter la grossir) au-dessus de la mare. Ecrire une
mthode permettant l'abeille de dcrire une trajectoire circulaire au dessus de la mare (interdiction
d'utiliser "asSeenBy"), la circonfrence du cercle dcrit par l'abeille devra tre identique la
circonfrence de la mare.
Exercice 6.4
Nous allons crer un programme permettant de travailler son vocabulaire en Anglais. Crer un
monde avec un chat (Class Sitting_cat). Placer devant le chat 3 mots en 3D (les mots en 3D sont des
objects comme les autres) : cat, dog et bird. Au cas o l'lve clique sur la bonne rponse (le bon
mot en 3D), le chat devra dire :"Bravo tu es le meilleur". Si l'lve clique sur n'importe quoi
d'autres, le chat devra hocher la tte et dire "Non, essaye encore une fois". Pour arriver vos fins,
vous devrez crer une fonction "cestbon" qui renverra true en cas de bonne rponse et false en cas
de mauvaise.
80
Chapitre VII
L'instruction while
81
82
83
Attention, une erreur de logique peut faire tomber le programme dans une boucle infinie (une
fonction qui renvoie toujours vrai).
While peut aussi tre utilis dans le gestionnaire d'vnements avec par exemple while something
is true :
Appuyer sur create new event puis slectionner while something is true :
Je reviendrais plus tard sur Begin, During et End. Pour l'instant nous allons rcrire le programme
du pingouin et de la tortue en utilisant le gestionnaire d'vnements :
world.myfirstmethod sera uniquement utilis pour tourner le pingouin vers la tortue
84
Il faut ensuite faire clic droit sur When any key....... , choisir change to et slectionner
While any key is ...
85
86
87
Exercice 7.1
Ecrire un programme permettant de faire "tomber" le brouillard sur une scne par un simple appui
sur la touche espace (le brouillard se lve ds que la touche espace est relche). Un personnage (de
votre choix) devra annoncer l'arrive du brouillard (juste avant que le brouillard "tombe").
Exercice 7.2
Crer une scne avec un bonhomme de neige et une bonne femme de neige. L'utilisateur doit
pouvoir contrler le bonhomme de neige (avant, arrire, tourner gauche, tourner droite). Le
bonhomme de neige est extrmement timide, il devient rouge quand il s'approche un peu trop prs
de la bonne femme de neige et redevient blanc quand il s'en loigne.
88
Chapitre VIII
Les variables
89
Dans ce dernier chapitre, nous allons aborder le sujet des variables. La notion de variable est trs
importante en programmation, voil pourquoi, il me parait important de prciser quelques notions
gnralistes avant d'entrer dans le vif du sujet :
Un programme passe son temps traiter des donnes. Pour pouvoir traiter ces donnes,
l'ordinateur doit les ranger dans sa mmoire (la RAM).
La RAM se compose de cases dans lesquelles nous allons ranger ces donnes (une donne dans une
case). Chaque case a une adresse (ce qui permet au processeur de savoir o sont ranges les
donnes).
Alors, qu'est-ce quune variable ?
Eh bien c'est une petite information (une donne) temporaire que l'on stocke dans une case de la
RAM. On dit qu'elle est "variable" car c'est une valeur qui peut changer pendant le droulement du
programme.
Une variable est constitue de 2 choses :
Elle a une valeur : c'est la donne qu'elle stocke (par exemple le nombre 5 ou la suite de
caractres (chaine de caractres) bonjour )
Elle a un nom : c'est ce qui permet de la reconnatre.
Les variables dans Alice
Sans le savoir, vous avez dj de nombreuses reprises utiliss des variables dans Alice. Avez-vous
dj utilis l'onglet "Properties" ? Oui, donc vous avez dj utilis des variables !
En POO chaque instance va possder des mthodes (vu et revu.....) et des variables (que l'on appelle
aussi des attributs, mais par souci de simplicit, je n'utiliserai que le terme de variable). Par
exemple, dans Alice, le pingouin possde la mthode wing_flap
et la variable "color"
Comme dj dit plus haut: instance d'un objet = des variables + des mthodes (ou fonctions) dans
Alice, mais cette ide est vraie en POO plus gnralement.
Enfin, il faut savoir que la valeur d'une variable peut tre modifie en utilisant une mthode (vous
avez dj eu faire ce genre de choses de nombreuses reprises).
90
Puisque nous voulons crer un chrono, nous allons renommer l'instance 3D text en "chrono" (nous
aurions trs bien pu laisser 3D Text, mais bon, je trouve cela plus logique de changer le nom)
Il est maintenant temps de crer une nouvelle variable pour chrono : "temps"
91
et entrer le nom de la nouvelle variable (temps) dans le champ prvu cet effet (Name). On laissera
"Number" slectionn.
92
Nous allons maintenant crer une nouvelle mthode (une classe level method) pour "chrono", on
l'appellera "temps_ecoule".
Nous allons utiliser un while dans notre mthode : "tant que "temps" est infrieur 61" suivit d'un
"do in order"
Pourquoi chrono.temps < 61 ? Tout simplement parce que notre chrono devra fonctionner pendant 1
minute (alors pourquoi pas 60 ? Rflchissez bien la question, vous allez trouver vous mme la
rponse !!). Par la suite, nous remplacerons 61 par un paramtre. Par ailleurs vous remarquerez que
comme temps est une variable de l'instance chrono on crira chrono.temps.
Qu'allons nous mettre dans le "Do in order" ?
Premire chose, notre variable temps est de type "number" alors que la variable "text" est de type
"string" (chaine de caractre). Or, la premire chose que nous voulons faire c'est d'utiliser la valeur
contenue dans la variable "temps" et de l'afficher l'cran grce la variable "text", il faut donc,
transformer le nombre contenu dans la variable "temps" en chaine de caractre, puis d'associer cette
chaine de caractre la variable "text".
Tout ceci a l'air compliqu, mais dans Alice cela se fait en une seule ligne :
93
Enfin, nous allons terminer notre boucle en augmentant la valeur de l'attribut "temps" d'une unit.
Pour obtenir cette dernire ligne, il faut "emmener" l'attribut "temps" dans le "Do in order" et
choisir "increment chrono.temps by 1" dans le menu droulant. L aussi, ne pas oublier le
"duration = 0"
Je pense que tout cela est limpide et ne demande aucune explication supplmentaire !!
Il ne reste plus qu' appeler la mthode "temps_ecoule" depuis la mthode "world.my first method"
Je vous laisse le soin de modifier la mthode "temps_ecoule" pour que la dure chronomtre soit
dfinie dans un paramtre au moment de l'appel de la mthode.
Utilisation des boolens
Un petit exemple pour montrer l'utilit des variables de type boolens :
Crons un monde avec un livre. L'ide de base est trs simple : en appuyant sur la barre espace le
livre doit se mettre parler (blablabla), si vous appuyez de nouveau sur la barre espace, le livre
devra arrter de parler.
Le programme n'est pas si simple crire, car l'appui sur la barre espace devra dclencher ou arrter
les paroles. Alors, comment faire ?
Nous allons crer une variable de type boolen qui sera vraie si le livre est dj en train de parler et
fausse si le livre est silencieux.
94
Nous allons crer une variable de l'objet "Hare" de type boolen : parle On_Off (qui sera false au
dpart)
Tant que la variable parle On_Off est false, la mthode parle n'est pas appele, tant que parle
On_Off est true la mthode parle est appele en permanence (utilisation du while).
Voici d'ailleurs la mthode parle :
95
Il nous reste maintenant tudier la mthode choix. C'est cette mthode qui fera basculer l'attribut
parle On_Off de false true et vice versa. C'est la mthode la plus complexe, mais aussi la plus
intressante :
Les variables dans les mthodes ou les fonctions : les variables locales
Pour l'instant nos variables sont associes une instance de classe. Il existe dans Alice d'autres
types de variables : les variables locales.
Les variables sont associes des mthodes, crons une variable locale dans la mthode "world my
first method" en cliquant sur "create new variable" :
Comme vous pouvez le constater, notre variable est de type "number", mais elle aurait pu tre de
type "Boolean", "Object" ou autre.
Les variables locales s'utilisent de la mme faon que les variables d'instance, mais, chose trs
importante, elles n'existent que dans la mthode o elles ont t cr (d'o leur nom de locale !).
A partir du moment o vous "quittez" une mthode, la variable locale est "dtruite".
96
Nous avons cr une variable locale "var_compteur", sinon le programme ne pose pas de problme.
Cette mthode est appele dans le gestionnaire d'vnements avec un while :
Tant que la touche "entre" reste appuye, nous "restons" dans la mthode "compteur". Si nous
relchons la touche "entre", nous sortons de la mthode "compteur", la variable "var_compteur" est
"dtruite". Si nous appuyons de nouveau sur la touche "entre" la variable "var_compteur" est
re-cr avec la valeur de dpart, pratiquement, le compteur est remis zro.
Ecrivons le mme programme avec une variable d'instance la place de la variable locale :
97
Pourtant cela change tout : la variable d'instance "var_text" n'est pas une variable locale, elle n'est
donc pas "dtruite" en cas de "sortie" de la mthode "compteur", le compteur ne redmarre donc pas
zro.
98
99
Exercice 8.1
Crer une scne avec un lapin et un pingouin. Un clic sur le lapin fait augmenter le score du lapin
d'une unit (le score sera un texte 3D). Mme chose pour le pingouin (cet exercice pourra par la
suite vous servir pour dvelopper des jeux plus compexes)
Exercice 8.2
Crer une scne avec un mange (Amusement Park/Carousel) et un bouton (Controls/Button). Au
dpart le mange est arrt. Une pression sur le bouton devra mettre le mange en rotation, une
nouvelle pression sur ce mme bouton devra l'arrter. L'animation du dmarrage et de l'arrt du
mange devra tre raliste.
Exercice 8.3
Vous allez crer un "jeu" pdagogique destin aux enfants de l'cole primaire :
L'enfant verra apparatre sur l'cran un animal (un chameau, une vache ou un pingouin), au-dessus
de l'animal, l'enfant aura 3 choix possibles (texte en 3D) : "Camel", "cow" ou "penguin"
Si l'enfant clique sur le bon mot (celui qui correspond l'animal affich), on verra apparatre
"Bravo" et un nouvel animal s'affichera la place du prcdent. Dans le cas contraire on verra
apparatre "Faux essaye encore une fois".
Attention le choix de l'animal afficher (vache, chameau ou pingouin) devra tre alatoire (gr par
le hasard)
Cet exercice est vraiment complexe (malgr les apparences) soyez donc trs mthodique dans votre
dmarche.
Exercice 8.4
Complter l'exercice prcdent avec un affichage de score (bonne rponse 1, mauvaise rponse 1,
le score ne pouvant pas tre ngatif.)
100
x
Dans Alice, il y a 3 dimensions, donc 3 coordonnes : x, y et z
101
Pour le savoir, il faut cliquer sur " ground ", on voit apparatre 3 axes (un rouge, un vert et un bleu),
le centre du monde se trouve l'intersection de ces 3 axes.
Sur cette image on voit les 3 axes (le bleu, le rouge et le vert) (on voit aussi un pingouin !).
Nous pouvons maintenant dterminer les coordonnes d'un objet :
Ici le pingouin a pour coordonnes : 1,44 mtres par rapport l'axe rouge, 0,58 mtre par rapport
l'axe vert et 0,62 mtre par rapport l'axe bleu.
La premire coordonne correspond donc l'axe rouge, la deuxime coordonne correspond l'axe
vert et la troisime coordonne correspond l'axe bleu. En maths on a (x,y,z) pour les coordonnes
d'un point, dans Alice on aura donc (rouge,vert,bleu).
Petit problme (cela ne vous aura sans doute pas chapp !) :
Alice nous donne : " position: 1,44, 0,58, 0,62 " que de virgules !!!
102
103
Il faut bien savoir que chaque objet possde son propre systme d'axes, et que la gauche pour un
objet n'est pas forcement la gauche pour un autre objet.
Voici 3 personnages A,B et C (vus du dessus), on leur applique chacun la mthode MOVE
LEFT
Vous pouvez constater que les objets ne vont pas du tout se dplacer dans la mme direction alors
qu'on leur a appliqu la mme mthode (move left).
Cela complique donc normment les choses si l'on veut dplacer 2 objets dans la mme direction !
En fait, pas vraiment, car les concepteurs d'Alice ont pens au problme !
104
Prenons un exemple :
Crer une scne avec un pingouin et une balle (toyball1 dans sports), mettre le pingouin sur la
balle.
Faire avancer le pingouin et la balle de 1 m vers l'avant (MOVE FOREWARD). Comme vous
pouvez le constater, la balle et le pingouin ne prennent pas la mme direction.
Nous allons synchroniser les systmes d'axes du ballon et du pingouin, pour ce faire nous
utiliserons la mthode orient to: toyball.orient to(penguin)
Pour illustrer l'utilisation de cette mthode, crons une scne avec une tortue et un pingouin (le
pingouin est sur le dos de la tortue)
La mthode MOVE applique turtle dplacera aussi le pingouin.
105
La mthode TURN
la mthode turn peut tre applique :
gauche
droite
vers l'avant
vers l'arrire
La mthode TURN LEFT entranera une rotation de l'objet autour de l'axe vert, vers la gauche
La mthode TURN RIGHT entranera une rotation de l'objet autour de l'axe vert, vers la droite
La mthode TURN FOREWARD entranera une rotation de l'objet autour de l'axe rouge, vers
l'avant.
La mthode TURN BACKWARD entranera une rotation de l'objet autour de l'axe rouge, vers
l'arrire.
La mthode ROLL
la mthode roll peut (seulement) tre applique :
gauche
droite
La mthode ROLL LEFT entranera une rotation de l'objet autour de l'axe bleu, vers la gauche
La mthode ROLL RIGHT entranera une rotation de l'objet autour de l'axe bleu, vers la droite
Attention : Il ne faut jamais oublier que la rotation d'un objet entranera une rotation des axes
associs l'objet. Il faut donc tre attentif en cas de rotation successive ou en cas de rotation suivie
d'une translation, voici un exemple :
Crer un monde avec un hlicoptre. Appliquer la mthode ROLL LEFT 0.15 revolutions de
ce dernier. la suite, appliquer la mthode MOVE UP 1 meters. L'hlicoptre part sur le ct
au lieu de s'lever, encore un bug !!?
Non, cela est tout fait normal, MOVE UP, se fait selon l'axe vert de l'hlico, or cet axe
tourn en mme temps que l'hlico (avec la mthode ROLL), donc l'hlico, monte en suivant
l'axe vert, c'est--dire sur le ct !
Le paramtre asSeenby suivi de world demande Alice d'utiliser les axes lis world ( la
place des axes de l'hlico) seulement pour la mthode associe asSeenby (ici MOVE UP)
Vous pouvez constater que maintenant l'hlico monte la verticale (au lieu de partir sur le ct).
La mthode point at
La mthode point at ressemble un peu la mthode turn to face vu prcdemment. Elle permet
de faire pointer l'axe bleu (forward) d'un objet 1 vers le centre d'un objet 2.
Initiation la programmation oriente objet avec Alice
106
La mthode move to
La mthode move to permet de dplacer un objet 1 de telle faon ce que le centre de
l'objet 1 concide avec le centre de l'objet 2.
Pour illustrer ces 2 mthodes, un petit exemple s'impose :
Crer un environnement marin avec un phare et un bateau. Aligner le bateau sur le phare (mthode
point at) et dplacer le bateau jusqu'au centre du phare (mthode move to).
107
Annexe 3 : La camra
Pendant la mise en place d'une scne, vous pouvez dplacer la camra l'aide des touches :
Ces touches ne sont pas utilisables pendant l'excution d'un programme. Alors, comment faire des
effets de camra ?
Nous allons utiliser des objets factices (de faux objets, des objets invisibles). Ces objets seront
placs lors de la mise en place de la scne. Il suffira ensuite d'associer la camra l'un de ces objets
grce la mthode "set point of view to", pour que la camra "filme" la scne depuis l'objet factice
choisi. Bien videmment, au cours d'une mme scne, on pourra changer de point de vue en
changeant d'objet factice. L'objet factice peut tre considr comme le trpied d'une camra. Avec
plusieurs objets factices, vous aurez votre disposition plusieurs trpieds et donc plusieurs
possibilits pour placer votre camra.
Encore une fois un bon exemple vaut mieux qu'un long discours :
Crer une scne avec un skateboarder et une rampe.
Nous allons placer 2 trpieds (invisibles), 1 qui nous permettra de voir le skateboarder de face et
l'autre qui nous permettra de le voir de dos.
Slectionner "ADD OBJECTS", puis "more controls >>", vous devez alors avoir l'cran :
108
Cliquer sur "drop dummy at camera" pour dposer votre 1er objet factice l'endroit o se trouve la
camra. Un dossier Dummy Objects apparat dans la fentre des objets. Ouvrir ce dossier, vous
constatez qu'un nouvel objet nomm "dummy" est apparu. Renommer cet objet en "vue_de_face".
Dplacer votre camra ( l'aide des touches de direction) de faon voir le skateboarder de dos.
Cliquer de nouveau sur "drop dummy at camera", un 2e "dummy" apparat dans la liste renommer
le en "vue_de_dos"
109
Voil comment obtenir des effets de camra. Je vous laisse dcouvrir par vous-mme l'utilisation de
"drop dummy at selected objet" car le principe est le mme.
Il existe une autre possibilit pour "jouer" avec la camra :
Vous pouvez aussi obliger la camra se dplacer en mme temps qu'un objet en modifiant le
"vehicle property" de la camra. Reprenons notre scne Robot-ET et arrangeons-nous pour que la
camra suive le robot lors de son dplacement vers le rocher (voir le fichier act 3-5c.a2w).
110
isShowing
Nous pouvons aussi utiliser isShowing la place de opacity (opacity ne fonctionne pas sur mac !)
isShowing fonctionne en tout ou rien, il peut prendre uniquement 2 valeurs : true et false. Si
isShowing = true, l'objet est compltement opaque, si isShowing=false, l'objet est invisible. Bien
videmment comme pour opacity, isShowing peut-tre utilis dans un programme (combin un if,
cela peut donner des choses intressantes).
111
Pour "fabriquer" un homme choisir hebuilder et pour fabriquer une femme choisir shebuilder.
Vous vous retrouvez alors avec des milliers de combinaisons possibles, faites votre choix :
112
Enfin pour terminer, Alice propose une importante collection de mthodes pour chaque personnage
cr, n'hsitez pas les utiliser.
113
114
Ici, la fonction random number renvoie un nombre qui ne sera pas forcment un entier (on pourrait
avoir 1,2 ou 4,8). Si vous avez besoin d'un entier (par exemple pour une simulation de lanc de ds)
vous devez utiliser encore une fois "more..." de la fonction "random number" et choisir "true" pour
"integerOnly"
115