Vous êtes sur la page 1sur 115

Initiation la programmation oriente

objet avec Alice


version du 26/09/2010
David Roche

Initiation la programmation oriente objet avec Alice

Ce document est publi sous licence Creative Commons


Vous tes libres :
de reproduire, distribuer et communiquer cette cration au public
de modifier cette cration
Selon les conditions suivantes :

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.

A chaque rutilisation ou distribution de cette cration, vous devez faire apparatre


clairement au public les conditions contractuelles de sa mise disposition.

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.

Initiation la programmation oriente objet avec Alice

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.

David Roche enseignant au lyce G Fichet Bonneville (74)

Initiation la programmation oriente objet avec Alice

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.

Initiation la programmation oriente objet avec Alice

Quelques avantages dAlice :

Lgret de lapplication qui ne ncessite pas dordinateurs particulirement puissants ou


volus sur le plan graphique. Il suffit simplement de disposer dune plate-forme Java
(gratuite) installe sur son ordinateur, et denviron 400Mo despace disque pour Alice 2.2
Gratuit du logiciel
Communaut importante dutilisateur (enseignants, enfants, passionns) issus des plus de
1.500 tablissements scolaires utilisateurs du logiciel dans le monde. Cette communaut est
essentiellement anglophone, mais nous allons nous employer dvelopper une communaut
francophone dans le mme esprit dchange de pratiques et dchange dexpriences.
Accessibilit de linterface et du logiciel pour les novices
Exigence du concept, en pleine conformit avec les exigences de la programmation objet.

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 :

Les erreurs de syntaxe


La non visibilit du rsultat

Initiation la programmation oriente objet avec Alice

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.

Alice ouvre lesprit


Heureusement, Alice nest pas quun simple outil dapprentissage la programmation. Cest aussi
un outil qui permet aux lves dapprendre apprendre : le travail par essais successifs, qui est
une base de la programmation, sapplique aussi bien dautres activits, cest une dmarche qui
permet aussi dapprendre mesure les risques et prendre des prcautions en consquence (comme
par exemple effectuer une copie de scurit de son travail avant dy effectuer des changements
importants, ou bien encore dcomposer un travail important en tapes progressives lmentaires
faciles contrler).
Alice permet aussi de mettre en uvre de nouvelles mthodes pdagogiques particulirement
intressantes lre de linformatique et de lInternet : celles notamment reposant sur la progression
de son apprentissage partir de lacquisition dun savoir-faire pr-existant. Ainsi un lve pourra
exercer son acquis et lenrichir en travaillant sur une squence dj ralise par un tiers (quon lui
aura fournie ou quil aura trouv sur un espace communautaire ddi Alice sur Internet) avec pour
objectif de modifier celle-ci pour lenrichir ou ladapter un nouveau besoin. Cest une mthode de
travail largement rpandue dans le monde de la programmation qui permet non seulement
dacqurir rapidement de nouvelles connaissances, mais aussi de confronter et de faire voluer les
siennes, de dcouvrir de nouvelles faons de programmer, etc.
Cette forme de travail permet aussi de dvelopper chez les jeunes un esprit " social " qui les incitera
sinsrer dans des communauts partageant les mmes centres dintrt pour y mettre disposition
leur comptence et certaines de leurs ralisations dans un esprit douverture et de service.

Daniel Bouillot, Dlgu l'action conomique, la formation et la recherche CITIA -

Initiation la programmation oriente objet avec Alice

Sommaire
Chapitre I : Les premiers pas

p8

Exercices chapitre I

p 12

Chapitre II : Premier programme

p 14

Exercices chapitre II

p 25

Chapitre III : Les fonctions et les structures de contrle

p 27

Exercices chapitre III

p 36

Chapitre IV (1er partie) : Les classes, les instances et les mthodes

p 38

Exercices Chapitre IV (1er partie)

p50

Chapitre IV (2e partie) : Les mthodes Class-Level et l'hritage

p 52

Exercices chapitre IV (2e partie)

p 62

Chapitre V : Interaction utilisateur machine

p 64

Exercices chapitre V

p 69

Chapitre VI : Retour sur les fonctions et le couple if/else

p 71

Exercices chapitre VI

p 79

Chapitre VII : L'instruction while

p 81

Exercices chapitre VII

p 87

Chapitre VIII : Les variables

p 89

Exercices chapitre VIII

p 99

Annexe 1 : Les coordonnes dans Alice

p 101

Annexe 2 : Les mthodes move, turn, roll....

p 104

Annexe 3 : La camra

p 108

Annexe 4 : rendre les objets invisibles

p 111

Annexe 5 : Crer ses propres personnages

p 112

Annexe 6 : Nombres alatoires

p 114

Initiation la programmation oriente objet avec Alice

Chapitre I
Les premiers pas

Initiation la programmation oriente objet avec Alice

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

Initiation la programmation oriente objet avec Alice

" ADD OBJECTS " nous donne accs l'diteur de scne.

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.

Initiation la programmation oriente objet avec Alice

11

Exercices chapitre I

Initiation la programmation oriente objet avec Alice

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

Exercice 1.3 (voir l'annexe 1 pour cet exercice)


Placer une poule dans un monde vide de telle faon ce qu'elle ait pour coordonnes (2,0,1) ( peu
prs !).
On veut placer un chat 2 m derrire la poule (il est en train de la poursuivre !). Quelles doivent tre
ses coordonnes ? Placer correctement le chat.
Placer une tortue qui regarde la scne ( la gauche de la poule et du chat).
Enfin, placer un oiseau au milieu du triangle form par la poule, le chat et la tortue 1,5 m audessus du sol
Exercice 1.4
Crer une scne avec un aroport, une tour de contrle, 1 avion au sol et 1 avion en train de
dcoller.

Initiation la programmation oriente objet avec Alice

13

Chapitre II
Premier programme
.

Initiation la programmation oriente objet avec Alice

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 :

Initiation la programmation oriente objet avec Alice

15

Voici la suite du story-board (sans les dessins) :


Scne 2 : Description : Un extra terrestre surgit derrire un rocher
Son : aucun
Texte : l'extra terrestre dit : ?r#'(t&^
Scne 3 :
Description : le robot tourne la tte (360) pour chercher l'extra terrestre
Son : aucun
Texte : aucun
Scne 4 :
Description : Le robot se tourne puis se dirige vers l'extra terrestre. Mais ce dernier disparat
derrire le rocher.
Son : aucun
Texte : aucun
Scne 5 :
Description : le robot se tourne vers la camra, sa tte devient rouge.
Son : aucun
Texte : le robot dit : Houston, nous avons un problme !
du story-board la programmation
Nous allons utiliser une scne toute prte : ouvrir le fichier " chap2-1.a2w "
Vous devriez avoir l'cran :

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

Initiation la programmation oriente objet avec Alice

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

Initiation la programmation oriente objet avec Alice

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 :

Nous allons maintenant pouvoir dposer nos premires instructions :


La scne commence avec l'apparition de l'extra terrestre (AlienOnWheel), cliquer sur
AlienOnWheel,
puis
sur
l'onglet
methods,
puis
dposer
la
mthode
AlienOnWhell.move(direction, amount); dans doInOrder ( la place de Do Nothing), le
programme ouvre alors un menu droulant, choisir up, dans l'autre menu droulant slectionner
1 meter.

Initiation la programmation oriente objet avec Alice

18

Vous devriez alors avoir ceci :

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.

Tout fonctionne comme prvu, notre extra terrestre sort de sa cachette !

Initiation la programmation oriente objet avec Alice

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 :

Enchanons avec la rotation de la tte du robot :


Jusqu' prsent nous avons toujours utilis les mthodes de l'instance alienOnWheels, nous allons
maintenant utiliser une mthode de l'instance spiderRobot.
Mais si nous utilisons la mthode turn pour spiderRobot, c'est le robot en entier qui va tourner
alors que dans notre scnario, cela doit tre uniquement sa tte !
Les utilisateurs d'Alice ont prvu le coup et les objets sont souvent diviss en plusieurs parties.
Pour voir ces parties, il suffit de cliquer sur le + qui se trouve devant spiderRobot.

Initiation la programmation oriente objet avec Alice

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.

Initiation la programmation oriente objet avec Alice

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 :

Initiation la programmation oriente objet avec Alice

22

Cela va mieux, mais ce n'est pas encore gnial.


Il y a un manque de synchronisation entre le mouvement du robot et l'animation de ses pattes.
Il faudrait que le mouvement avant-arrire des pattes soit plus rapide. Utilisons more..
duration-> 0.5 seconds pour chaque mouvement de la patte (pour qu'en tout le mouvement des
pattes dure 1 seconde)

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.

Initiation la programmation oriente objet avec Alice

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

et la tte devient bien rouge.


Il ne nous reste plus qu' envoyer le message Houston (avec duration = 2 seconds)
Attention pas d'accent (systme US) !

Initiation la programmation oriente objet avec Alice

24

Exercices chapitre II

Initiation la programmation oriente objet avec Alice

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

Exerice 2.2 (Pour cet exercice voir l'annexe 2)


Crer un monde (paysage marin) et dposer dans ce monde une le (Environments/Island) et un
poisson. Dans la scne initiale, le poisson sort lgrement de l'eau et se trouve devant l'le.
Programmer la scne suivante :
le poisson tourne en rond devant l'le (1 tour)
le poisson tourne autour de l'le (1 tour)
le poisson saute hors de l'eau avant de disparatre dans les abysses.

scne initiale

Exercice 2.3 (Pour cet exercice voir l'annexe 2)


Crer un monde peupl : d'une petite fille (People/Mana), d'un aimant (Objects/Magnet), d'un
ressort (Objects/Spring), d'un casque de scaphandrier (Objects/divingHelmet), d'une cl
(Objects/windupKey) et d'une voiture (Vehicles/car).
Mana tiens l'aimant dans sa main gauche et dirige ce dernier vers le ressort, le ressort est alors attir
vers l'aimant. Mana reproduit la mme opration avec le casque de scaphandrier et la cl. Elle
dirige alors l'aimant vers la voiture, mais au lieu d'attirer la voiture, c'est la voiture qui attire Mana.
Mana abandonne alors l'aimant, qui reste coll la voiture, et revient en marchant vers la camra.
Programmer cette scne.

scne initiale

Initiation la programmation oriente objet avec Alice

26

chapitre III
Les fonctions et les structures de contrle

Initiation la programmation oriente objet avec Alice

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 :

Initiation la programmation oriente objet avec Alice

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 ?

On constate quelques problmes :


Le robot se dplace trop vite, mais bon, un petit coup de "duration" devrait pouvoir rsoudre
le problme.
L'animation n'est plus vraiment adapte, mais l encore rien qui ne puisse tre rsolu.
Le robot "entre" carrment dans le rocher (il n'y a pas de dtection de collision dans Alice).
L, nous devons plus srieusement nous pencher sur la question :
la fonction "spiderRobot distance to rock" renvoie la distance entre les 2 centres des objets (ici le
robot et le rocher), le rsultat obtenu, mme s'il ne nous convient pas, est tout fait logique.
Pour que cela fonctionne il faudrait, la distance centre rocher centre robot, retrancher la moiti de
la largeur du robot plus la moiti de la largeur du rocher (faites un petit schma pour vous en
convaincre !)
rsum :
distance parcourir par le robot = distance centre robot centre rocher- (largeur du robot/2+largeur
du rocher/2)
Bien videmment, Alice est capable d'effectuer ce genre d'opration avec des fonctions (ne jamais
oublier, qu'au cours de l'excution du programme, Alice "remplace" la fonction par la valeur
renvoye par la fonction).
Il existe des fonctions "largeur des objets" (ex "rock's width" pour la largeur du rocher) et la
possibilit d'effectuer les 4 oprations avec les fonctions (utiliser la fonction "math" du menu
droulant)

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

Initiation la programmation oriente objet avec Alice

29

les structures de contrles


Les boolens
Les valeurs renvoyes par les fonctions ne sont pas forcment des nombres. Une fonction peut aussi
renvoyer un boolen.
Qu'est-ce quun boolen ?
Un boolen peut prendre uniquement 2 valeurs vraies ou faux (true ou false), un peu comme le
binaire. Imaginons la fonction "est une fille", si l'on applique la fonction l'objet "Robert", la
fonction renverra "faux" ( condition que Robert soit un garon !), si l'on applique cette fonction
"Gertrude", la fonction renverra "vrai" ( condition que Gertrude soit une fille).
Autre fonction possible : "a est gal b" (traduction Alice : "a = = b", not le double = qui montre
que l'on a affaire une fonction).
Imaginons le programme suivant:
a=15
b=20
si maintenant on applique la fonction a = = b, elle nous renverra "faux".
Autre programme:
a=15
b=15
la mme fonction renverra "vrai".
Le couple if/else
Comme dit dans l'introduction nous allons pouvoir utiliser l'instruction if couple une fonction
pour "aiguiller" le programme dans une direction ou une autre, exemple :
soit une fonction boolenne (qui renvoie vrai ou faux) : fon1
soient 3 instructions quelconques : inst1,inst2 et inst3
Nous allons trouver la structure suivante :
if fon1 : inst1
else : inst2
inst3
Voil ce qui va se passer :
si la fonction fon1 renvoie "vrai" le programme excutera inst1 puis inst3
si la fonction fon1 renvoie "faux" le programme va excutera inst2 puis inst3
L'instruction inst3 est donc quoiqu'il arrive excute (elle est en dehors du if/else), en revanche le
programme devra "choisir" entre inst1 et inst2 (selon la valeur retourne par fon1)
Le else n'est pas obligatoire, on trouve alors la structure suivante :
if fon1 :inst1
inst3
avec pour rsultat :
si la fonction fon1 renvoie "vrai" le programme excutera inst1 puis inst3
si la fonction fon1 renvoie "faux" le programme excutera uniquement inst3
Initiation la programmation oriente objet avec Alice

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

Initiation la programmation oriente objet avec Alice

31

Bien videmment, l aussi, le else n'est pas obligatoire :

Et dans Alice alors ?


Crer ce genre de structure avec Alice est relativement simple (comme d'habitude !?)

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

Initiation la programmation oriente objet avec Alice

32

Prenons tout de suite un exemple concret :


Revenons une fois de plus notre rencontre robot extra-terrestre.
Aprs avoir t interpel par l'extra-terrestre, le robot se dirige vers ce dernier. De notre point de
vue (le point de vue de la camra), le rocher est trop grand et l'extra-terrestre n'est plus visible. Mais
il n'est pas totalement exclu que la perspective nous trompe et que le robot soit suffisamment grand
pour voir l'extra terrestre par-dessus le rocher.
Nous allons donc modifier le programme comme suit :
Si le robot est plus petit que le rocher alors le robot doit allonger son cou sinon (sous entendu le
robot n'est pas plus petit que le rocher !) : ne rien faire de plus.
Nous allons utiliser la fonction "spiderRobot is shorter than" avec "rock" comme argument. La
fonction nous renverra true si le robot est plus petit et false si le robot n'est pas plus petit.

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 !

Initiation la programmation oriente objet avec Alice

33

Encore quelques fonctions...


D'autres exemples de fonctions renvoyant des boolens :

a = = b a est gal b (si a gal b renvoie true)


a!=b a est diffrent de b
a>b a est suprieur b
a>=b a est suprieur ou gal b
etc..
Pratiquement, comment utilise-t-on ces fonctions dans un if ?
Slectionner le if comme prcdemment (en choisissant true)

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 :

Pour cela nous allons utiliser "Loop".

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 :

Voil cela fonctionne !

Initiation la programmation oriente objet avec Alice

35

Exercices chapitre III

Initiation la programmation oriente objet avec Alice

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.

Initiation la programmation oriente objet avec Alice

37

Chapitre IV (1er partie)


Les classes, les instances et les mthodes

Initiation la programmation oriente objet avec Alice

38

Notion de classe et d'instance


Comme dj dit prcdemment, Alice 2.2 permet l'apprentissage de la programmation oriente
objet. Revenons sur ce concept si important en programmation moderne.
Tous les objets proposs dans Alice sont aussi des objets au sens informatique du terme, on parlera
d'ailleurs plutt de classe au lieu d'objet (vous remarquerez que dans le slecteur d'objet d'Alice, le
nom des objets est prcd du mot class). Le nom d'une classe commence toujours par une
majuscule (et pas seulement dans Alice).
A chaque fois que vous incorporez un objet dans le monde, vous crez une instance de classe. La
classe est en quelque sorte le moule, et l'instance est l'objet que vous fabriquez avec le moule.
Comme pour un moule, il est tout fait possible de crer plusieurs instances diffrentes (dans une
mme scne) toutes issues de la mme classe (vous l'avez d'ailleurs fait ds le premier chapitre :
pour aligner les pingouins, vous avez cr plusieurs instances de la classe pingouin).
Pour vous y retrouver, il est conseill de donner des noms diffrents chaque instance d'une mme
classe (Alice le fait automatiquement en ajoutant des chiffres: penguin, penguin2, .......). Chaque
instance issue d'une mme classe est l'origine identique (tous les objets issus du mme moule sont
identiques), mais par la suite chaque instance pourra avoir "sa propre vie" (rien ne nous empche de
peindre une pice en rouge et une pice en bleu malgr le fait qu'elles sortent du mme moule !).

Nous avons cr 3 instances de la classe "Penguin" (penguin, penguin2,penguin3), qui au dpart


taient toutes identiques. Ensuite, nous avons modifi un des attributs (properties) de penguin3, sa
couleur. Bien videmment, cette modification n'a eu aucune consquence sur les autres instances de
la classe pingouin.
Enfin pour terminer, il faut noter que la classe "World" contient toutes les autres classes, cela a son
importance pour la suite des vnements.
les mthodes
Nous avons dj, de nombreuses reprises, utilis les mthodes; nous allons maintenant un peu
entrer dans les dtails.
Chaque classe (et donc chaque instance de classe) possde des mthodes. Certaines mthodes sont
communes plusieurs classes, on parle alors de "world-level methods" (le nom de ces mthodes
commence par World.). Il existe aussi des mthodes, dites "class-level", qui au contraire, ne peuvent
tre utilises que par une seule classe (nous verrons des exemples plus loin).

Initiation la programmation oriente objet avec Alice

39

Utilisation des world-level-methods


L'criture de nos premiers programmes nous a amen utiliser des mthodes "toutes prtes" par
exemple la mthode "move". Il est possible d'crire ses propres mthodes, ce que nous avons
d'ailleurs dj fait de nombreuses reprises, en crivant la mthode "World.my first method".
Au lieu d'crire le programme dans une seule mthode (dans "World.my first method"), il est
souvent beaucoup plus judicieux de dcomposer le programme en plusieurs mthodes et d'appeler
ces mthodes au moment opportun.
Prenons un exemple simple:
nous allons crer un monde avec un livre et une tortue.
le livre et la tortue se dirigent l'un vers l'autre
la tortue demande au livre s'il veut faire la course, le livre rpond "non, pas aujourd'hui"
le livre et la tortue s'loignent l'un de l'autre

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"

Initiation la programmation oriente objet avec Alice

40

Programmons cette mthode "world.rencontre" :

Rien de spcial signaler, que du connu.


Si nous lanons notre programme, il ne se passera strictement rien, car en faisant preuve d'un peu
d'observation, nous pouvons remarquer que la premire chose que fait Alice au lancement d'un
programme, c'est d'appeler la mthode "world.myfirst method"

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.

Initiation la programmation oriente objet avec Alice

41

Un petit exemple avec la mthode world.rencontre

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 :

Initiation la programmation oriente objet avec Alice

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" !)

Voil, vous pouvez maintenant "admirer" le rsultat.


En programmation, il est trs courant de segmenter un programme en un grand nombre de mthodes
au lieu d'crire une seule mthode "gante". En effet, cela permet :
de grer plusieurs problmes simples au lieu d'avoir grer 1 seul problme complexe
de travailler plusieurs sur un mme programme (moi je m'occupe de la mthode
"rencontre" et toi de la mthode "discussion")
si une action doit se rpter plusieurs fois dans un mme programme, il suffit d'crire une
seule mthode et de faire plusieurs fois appel cette mthode.
De rendre les programmes beaucoup plus clairs (lecture facilite notamment si les mthodes
sont correctement commentes).

Initiation la programmation oriente objet avec Alice

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)

Nous allons crire un programme permettant au personnage de se prsenter. La prsentation se fera


en 3 parties : le personnage donne son nom, le personnage avance vers la camra, le personnage
incline sa tte en guise de salut. Nous allons donc crire 3 mthodes par personnage : une mthode
"identification", une mthode "avance" et une mthode "incline" (toutes ces mthodes devront tre
des "world-class method").
Voici la mthode "identification" pour Gertrude :

Pour tester cette mthode, il suffit de l'appeler dans "world.my first method" comme prcdemment.

Initiation la programmation oriente objet avec Alice

44

Voici la mthode "avance" :

et enfin la mthode "incline":

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 :

Initiation la programmation oriente objet avec Alice

45

Vous devez entrer un nom (ici cela sera "personnage") et le type de paramtre (ici cela sera un
objet)

Vous devez ensuite cliquer-dposer le paramtre nouvellement cr la place de l'objet Gertrude


Attention il existe un 3e Gertrude, mais ce 3e Gertrude n'est pas un objet, mais une chane de
caractre (ce qui s'affiche dans les bulles), pour remplacer ce 3e Gertrude nous aurons crer un
nouveau paramtre.
Nous obtenons donc :

Initiation la programmation oriente objet avec Alice

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.

Initiation la programmation oriente objet avec Alice

47

Compltons la mthode world.my first method avec les appels aux diffrentes mthodes.

Vous pouvez aussi modifier l'ordre des appels aux mthodes

Initiation la programmation oriente objet avec Alice

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.

Initiation la programmation oriente objet avec Alice

49

Exercices chapitre IV
1re partie

Initiation la programmation oriente objet avec Alice

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.

Initiation la programmation oriente objet avec Alice

51

Chapitre IV (2e partie)


Les mthodes Class-Level et l'hritage

Initiation la programmation oriente objet avec Alice

52

les Class-Level method


Nous allons maintenant nous intresser aux Class-Level method. Une Class-Level method est crite
pour une classe donne. Par exemple la mthode penguin.wing_flap est une Class-Level method de
la Class Penguin (on peut remarquer que le nom de la mthode ne commence plus par world, mais
par le nom de la classe et que cette mthode admet un paramtre "times" (nombre de battements
d'aile)).
Voici l'appel de la mthode :

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)

Initiation la programmation oriente objet avec Alice

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 :

Initiation la programmation oriente objet avec Alice

54

et enfin la mthode patinage :

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 ?)

Les Class-Level method et les paramtres


Comme pour les World-Class method, les Class-Level method peuvent admettre des paramtres.
crivons une autre Class-Level method pour la classe IceSkater.
Notre patineuse sait dsormais patiner, nous allons maintenant lui apprendre faire la toupie. Nous
allons utiliser 3 mthodes : une mthode pour prparer la toupie (prepa_toupie), une mthode pour
effectuer la toupie (toupie) et une mthode pour terminer la toupie (fin_toupie). Les mthodes
prepa_toupie et fin_toupie seront des Class-Level method sans paramtre. La mthode toupie sera
une Class-Level method avec un paramtre (le nombre de tours effectuer). De plus, cette mthode
appellera la mthode prepa_toupie et la mthode fin_toupie.

Initiation la programmation oriente objet avec Alice

55

La mthode prepa_toupie :

La mthode fin_toupie :

La mthode toupie avec l'appel aux autres mthodes et le paramtre nbre_tours :

Initiation la programmation oriente objet avec Alice

56

et enfin la mthode World.my first method (patine-toupie-patine) :

cration d'objet et hritage


Notre instance iceSkater (attention je parle bien de l'instance, pas de la classe IceSkater, j'espre que
maintenant, vous faites bien la diffrence !) possde maintenant 2 nouvelles mthodes (nous avons
cr plus de 2 mthodes, mais il n'y en a que 2 directement utilisables : patinage et toupie). Si nous
crons un nouveau monde et que nous utilisons de nouveau la class IceSkater pour crer une
nouvelle instance, nos 2 nouvelles mthodes auront disparu.
Faut-il "s'amuser" rcrire nos mthodes chaque fois que nous crons une instance partir de la
classe IceSkater ? Bien sr que non !
Nous allons utiliser notre instance iceskater (avec ces mtodes supplmentaires), pour crer une
nouvelle classe SuperIceSkateur (nous aurions pu lui donner n'importe quel nom !). Cette nouvelle
classe bnficiera de toutes les mthodes de la classe IceSkater (puisque notre instance iceskater est
issue de la classe IceSkater) mais aussi des nouvelles mthodes que nous venons de crer (patinage
et toupie). Nous dirons que la classe SuperIceSkater descend de la classe IceSkater (classe parent :
Iceskater classe enfant : SuperIceSkater). Nous dirons aussi que la classe SuperIceSkater hrite des
mthodes, des attributs(properties) et des fonctions de la classe IceSkater. Cette notion d'hritage est
trs importante en POO .
La personne qui utilisera la nouvelle classe SuperIceSkater pourra utiliser les mthodes patinage et
toupie sans se soucier le moins du monde du code qu'il a fallu crire pour les programmer. Encore
une fois, nous sommes ici au cur de la POO. Un programme crit avec un langage du type C++,
Java ou Python (qui accepte la POO) fonctionnera exactement sur ce principe.

Initiation la programmation oriente objet avec Alice

57

Assez parl thorie, passons la pratique :


Pour crer notre nouvelle classe SuperIceSkater, il faut renommer notre instance iceskater en
superIceSkater (encore une fois pas de majuscule au dbut du nom, pour l'instant, c'est toujours une
instance pas encore une classe (oui, je sais la diffrence est un peu difficile comprendre, mais
faites un effort, c'est trs important !).
Ensuite, cliquer droit sur superIceSkater et choisir "save object...". Il ne vous reste plus qu'
sauvegarder votre objet (votre nouvelle classe) dans un endroit appropri.

Noter qu'Alice a mis un S la place du s (nous sauvegardons bien une classe !)

Initiation la programmation oriente objet avec Alice

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.

Initiation la programmation oriente objet avec Alice

59

Et comme vous pouvez le constater, notre instance iceSkater possde bien toutes les nouvelles
mthodes :

Quelques rgles respecter


Il ne faut jamais appeller de World-level-method depuis une Class-level-method.

A ne surtout pas faire !

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

Avant cela, ajoutons un pingouin notre scne. Notre nouvelle Class-level-method


(se_tourner_vers) ne comportera qu'une seule instruction :

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.

Comme a, pas d'erreur en cas de cration et d'utilisation d'une nouvelle.


Ensuite, rien de nouveau !

Initiation la programmation oriente objet avec Alice

61

Exercices chapitre IV
2e partie

Initiation la programmation oriente objet avec Alice

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

Initiation la programmation oriente objet avec Alice

63

Chapitre V
Interaction utilisateur - machine

Initiation la programmation oriente objet avec Alice

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 :

Initiation la programmation oriente objet avec Alice

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 :

Et voil, enfin un programme avec de l'I-N-T-E-R-A-C-T-I-V-I-T-E !!


Mthodes, paramtres, Events et if/else
L'tude de l'exemple suivant va nous permettre d'utiliser toutes les notions que nous venons
d'tudier.
Crons une scne avec une instance de la classe Nerd, une instance de la classe Jock et une instance
de la classe Lunchlady

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.

Initiation la programmation oriente objet avec Alice

66

Nous allons crire uniquement 2 mthodes :


appel, qui sera une class level method de la classe Nerd
leve_main qui sera une world level method
Voici la mthode appel :

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.

Initiation la programmation oriente objet avec Alice

67

Voici maintenant la mthode leve_main :

Cette mthode possde un paramtre perso, de type Object


L'appel de cette mthode (et le choix de la valeur attribuer au paramtre perso) se trouve au
niveau du if de la mthode nerd.appel.

Initiation la programmation oriente objet avec Alice

68

Exercices chapitre V

Initiation la programmation oriente objet avec Alice

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 :

le scientifique fou se tourne vers le mixeur

le bras du scientifique se tend vers le mixeur

le mixeur se met tourner sur lui mme.


De plus, un clic sur la tasse entrane :

le scientifique fou se tourne vers la tasse

le bras du scientifique se tend vers la tasse

le liquide prsent dans la tasse disparat


Vous devrez crire le moins de codes possible (faites preuves d'astuces lors de l'criture des
mthodes), n'hsitez pas utiliser des paramtres.
Exercice 5.2
En "hommage" Lewis Carroll (auteur d'Alice aux pays des merveilles), vous allez crer une scne
avec un arbre, un chat (cheshireCat) et un interrupteur (Controls/TwoButtonSwitch).
Le chat, qui est perch dans l'arbre, devient invisible ( part son sourire) en cas d'appui sur le
bouton rouge et doit redevenir visible aprs l'utilisation du bouton vert. Vous devez crire une seule
mthode.
Exercice 5.3
Crer une scne avec un bonhomme de neige et 4 sphres (shapes/sphere) de 4 couleurs diffrentes
(rouge, vert, bleu et jaune). crire un programme permettant au bonhomme de neige de prendre la
couleur de la sphre choisie (on choisira la sphre en cliquant dessus). Un clic sur le bonhomme de
neige doit le faire redevenir blanc. A chaque changement de couleur, le bonhomme de neige doit
"dire" sa couleur.
Exercice 5.4
Crer une scne d'hiver avec un lac gel, un joueur de hockey, une crosse de hockey, un palet de
hockey et un but de hockey. Placer 3 sphres colores (vert, rouge, jaune). Le joueur s'entrane
frapper au but. L'utilisateur contrle le dclenchement et la puissance du tir en cliquant sur une des
sphres (vert : faible, rouge : moyen, jaune : fort). L'appui sur la barre d'espace doit ramener le palet
sa position d'origine.

Initiation la programmation oriente objet avec Alice

70

Chapitre VI
Retour sur les fonctions et le couple if/else

Initiation la programmation oriente objet avec Alice

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 :

Mais le rsultat n'est pas la hauteur de nos esprances !


En effet, il ne faut pas oublier que le move se fait par rapport aux axes ports par le ballon, or, les
axes du ballon tournent (mthode turn). Il nous faut donc utiliser AsSeenBy :

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 :

Initiation la programmation oriente objet avec Alice

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 :

Nous allons maintenant remplacer le 1 par distance/(2x3,14x(largeur de la balle/2)) car largeur de la


balle/2 est tout simplement le rayon de la balle. On a donc distance/(3,14xlargeur de la balle) :

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 :

Initiation la programmation oriente objet avec Alice

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 :

Voil l'appel de la fonction :

Voil, cela fonctionne.


Retour sur le couple if/else
Nous allons crer une simulation de contrle de trafic arien :
Crons une scne avec un aroport (ventuellement une tour de contrle), un avion et un
hlicoptre.

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.

Initiation la programmation oriente objet avec Alice

74

Commenons par l'criture de la fonction "trop_pret" :


Notre fonction devra renvoyer un boolen

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:

Initiation la programmation oriente objet avec Alice

75

Utilisons la fonction a<b (appartient world), les valeurs (ici 2 et 1 n'ont aucune importance)

Nous pouvons maintenant utiliser la fonction "helicopter distance above"

Il n'y a plus qu' choisir la distance de scurit (ici par exemple 4 m)

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

Initiation la programmation oriente objet avec Alice

76

Nous devons faire des tests pour savoir qui est au-dessus et qui est en dessous :

Si l'hlicoptre est au-dessus, l'hlicoptre monte de 2 m et l'avion descend de 2 m sinon l'avion


monte de 2 m et l'hlicoptre descend de 2 m.
Il nous reste crire la world.my first method :

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.

Initiation la programmation oriente objet avec Alice

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.

Initiation la programmation oriente objet avec Alice

78

Exercices chapitre VI

Initiation la programmation oriente objet avec Alice

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.

Initiation la programmation oriente objet avec Alice

80

Chapitre VII
L'instruction while

Initiation la programmation oriente objet avec Alice

81

Retour sur l'instruction loop


Nous avons dj entre-aperu l'instruction loop dans le chapitre 3, commenons donc par quelques
rappels :
Si vous avez besoin de rpter plusieurs fois la mme instruction (ou le mme groupe
d'instructions), vous devez utiliser la fonction loop.
Crons un monde avec un lapin.

Programmons une mthode (trs simple) pour faire sauter le lapin :

Pour faire sauter le lapin plusieurs fois, il suffit d'utiliser loop :

le lapin sautera 4 fois...


Nous pouvons aussi placer une boucle (loop) dans une boucle :
Rajoutons un pingouin notre monde et crivons un programme pour que le lapin accomplisse 3
sauts et qu'aprs chaque srie de 3 sauts, le pingouin dise : Encore, encore ! et effectue ensuite
un tour sur lui mme.

Initiation la programmation oriente objet avec Alice

82

Crons mthode pingouin_action (trs trs simple) :

Crons la mthode lapin_saut (toujours trs simple) :

et maintenant les appels des mthodes :

Pourquoi le premier Loop 3 times est en dehors du Loop global (2 times) ?


Noter aussi que 3 times peut-tre remplac par une fonction qui renverra le nombre de fois que
la boucle devra s'excuter :

Initiation la programmation oriente objet avec Alice

83

Un loop un peu particulier : l'instruction while


En anglais while veut dire tant que . While est une boucle, mais une boucle un peu spciale :
while est toujours associ une fonction qui renvoie un boolen. Tant que cette fonction renverra
vrai , les instructions prsentes dans le while seront excutes.
Crons un monde avec un pingouin et une tortue. Nous pouvons alors crire le programme suivant :

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

Initiation la programmation oriente objet avec Alice

84

Pour le reste, en utilisera le gestionnaire d'vnements

Voil, le rsultat est presque le mme ! A vous de trouver la diffrence.


Revenons maintenant sur Begin et End :
Quand la fonction du while devient vraie avant d'excuter ou d'appeler une mthode (avec
During ), il est possible d'appeler (d'excuter) une autre mthode. De la mme manire pour
terminer le while (la fonction du while vient de devenir fausse), nous pouvons appeler une autre
mthode grce End . Un petit exemple :

Je pense que l'exemple parle de lui mme, analysez-le !


NB : Il sera dans la plupart des cas beaucoup plus propre de crer des mthodes (ici c'est inutile,
le programme est trop simple) et de les appeler avec Begin, During et End.
Autre exemple qui peut s'avrer trs utile (notamment pour faire des jeux !) : while any key is
pressed (tant qu'une touche est presse)
Pour accder cette instruction, il faut d'abord choisir when any key is typed......

Il faut ensuite faire clic droit sur When any key....... , choisir change to et slectionner
While any key is ...

Initiation la programmation oriente objet avec Alice

85

Vous pouvez alors complter Begin , During et End comme prcdemment

Voici un petit exemple tout simple

Initiation la programmation oriente objet avec Alice

86

Exercice chapitre VII

Initiation la programmation oriente objet avec Alice

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.

Initiation la programmation oriente objet avec Alice

88

Chapitre VIII
Les variables

Initiation la programmation oriente objet avec Alice

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

Initiation la programmation oriente objet avec Alice

90

Crer ses propres variables d'instance


Cration d'un chrono
Chaque instance possde des variables, mais vous pouvez aussi crer les vtres. Nous allons
prendre un exemple : la cration d'un chrono.
Nous allons utiliser un texte en 3D, ce texte est une instance (un objet) comme un autre il possde
donc des mthodes et des variables (de toute faon, en POO, tout est objet !
Au dpart la variable "text" de "3D text" est gale zro.

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"

Initiation la programmation oriente objet avec Alice

91

Appuyer sur "create new varialbe"

et entrer le nom de la nouvelle variable (temps) dans le champ prvu cet effet (Name). On laissera
"Number" slectionn.

Voil nous avons cr une nouvelle variable de type nombre :

Vous remarquerez que par dfaut temps = 1

Initiation la programmation oriente objet avec Alice

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 :

Pour avoir cette ligne, il faut :


"Enmener" la variable "text" dans le "Do in order", choisir "default string" dans le menu.
"Dposer" la fonction "what a string" (vous la trouverez dans l'onglet "function" de "world") la
place de "default string" choisir "chrono" puis "chrono.temps" dans le menu droulant. N'oubliez
pas le "duration=0".

Initiation la programmation oriente objet avec Alice

93

Ensuite nous allons ajouter un "wait 1 second"

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.

Initiation la programmation oriente objet avec Alice

94

Nous allons crer une variable de l'objet "Hare" de type boolen : parle On_Off (qui sera false au
dpart)

Cette variable sera utilise dans "Events" :

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 :

On peut difficilement faire plus simple.

Initiation la programmation oriente objet avec Alice

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" :

Nous appellerons cette variable : essai

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

Initiation la programmation oriente objet avec Alice

96

Ecrivons un petit programme : Crons une mthode "compteur"

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 :

Nous avons cr une variable d'instance : "var_text"


Initiation la programmation oriente objet avec Alice

97

Le reste du programme n'est quasiment pas modifi

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.

Initiation la programmation oriente objet avec Alice

98

Exercices chapitre VIII

Initiation la programmation oriente objet avec Alice

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

Initiation la programmation oriente objet avec Alice

100

Annexe 1 : Les coordonnes dans Alice


Petit intermde de mathmatiques :
Vous savez sans doute qu'un point en mathmatique possde 2 coordonnes, une abscisse (x) et une
ordonne (y)

x
Dans Alice, il y a 3 dimensions, donc 3 coordonnes : x, y et z

coordonnes de l'objet (1,0.5,0)


Les coordonnes sont visibles en slectionnant l'onglet " properties " (dans l'onglet properties, on va
trouver tous les attributs de l'objet concern).
Qui dit coordonnes, dit origine (point de coordonne 0,0,0). L'origine est situe au centre du
monde. Les coordonnes des objets sont donc toujours donnes par rapport au centre du monde.
Mais o se trouve le centre du monde ?

Initiation la programmation oriente objet avec Alice

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 :

" quad view " du pingouin

" single view " du pingouin


Nous pouvons lire les coordonnes du pingouin :

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

Initiation la programmation oriente objet avec Alice

102

Si notre ordinateur avait t anglo-saxon, on aurait eu : 1.44,0.58,0.62 (le point correspond la


sparation entre la partie entire et la partie dcimale, la virgule correspondant la sparation entre
les coordonnes). Mais dans notre systme : des virgules, que des virgules, il faut faire avec !!

Initiation la programmation oriente objet avec Alice

103

Annexe 2 : Les mthodes move, turn, roll


La mthode move et le systme d'axes
Nous avons dj abord le problme des coordonnes d'un objet, mais dveloppons un peu le sujet :
comme dj dit auparavant chaque objet possde 3 axes, un rouge, un vert et un bleu. Le bleu
correspond avant arrire (la flche de l'axe est vers l'avant), le rouge correspond gauche-droite
(la flche est vers la droite) et le vert correspond haut-bas (flche vers le haut).
La mthode move permet de se dplacer :
vers la gauche (left)
vers la droite (right)
vers le haut (up)
vers le bas (down)
vers l'avant (forward)
vers l'arrire (backward)

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 !

Initiation la programmation oriente objet avec Alice

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)

Dsormais les axes du pingouin et de la balle sont aligns.


Il existe une deuxime manire pour associer 2 objets au cours d'un dplacement, la properties
vehicle :

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.

Initiation la programmation oriente objet avec Alice

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

Voil, admirez le rsultat (le bateau est rentr dans le phare).

Initiation la programmation oriente objet avec Alice

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 :

Initiation la programmation oriente objet avec Alice

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"

Initiation la programmation oriente objet avec Alice

109

Passons maintenant la programmation :


Utilisons la fonction "set point of view to" pour regarder la scne de face pendant 3 secondes puis
de dos aussi pendant 3 secondes

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

Initiation la programmation oriente objet avec Alice

110

Annexe 4 : Rendre les objets invisibles


Nous allons ici aborder 2 attributs (properties) qui, mme s'ils ne sont pas fondamentaux, peuvent
tre intressants utiliser : "opacity" et "isShowing"
Opacity
Opacity va nous permettre de modifier la transparence d'un objet de 0% (compltement transparent)
100 % (compltement opaque), toutes les valeurs intermdiaires tant possibles. Choisir une
valeur intermdiaire peut vous permettre de "simuler" un fantme (un spectre).Comme tous les
attributs, opacity peut-tre modifie dans un programme (glisser-dposer) :

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

Initiation la programmation oriente objet avec Alice

111

Annexe 5 : Crer ses propres personnages


Vous pouvez crer vos propres personnages en allant dans la galerie People

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 :

Initiation la programmation oriente objet avec Alice

112

Enfin pour terminer, Alice propose une importante collection de mthodes pour chaque personnage
cr, n'hsitez pas les utiliser.

Initiation la programmation oriente objet avec Alice

113

Annexe 6 : Nombres alatoires


En programmation, il est relativement courant d'avoir besoin de nombres tirs au hasard par
l'ordinateur (un exemple trs simple, un programme qui simulera un lanc de ds devra avoir une
instruction qui tirera au hasard un nombre entre 1 et 6).
Dans Alice, il existe bien videmment une fonction qui vous permet de tirer au hasard un nombre.
Vous trouverez cette fonction dans les fonctions de "world"

C'est la fonction "random number"


Un petit exemple pour illustrer cela :
Placer le personnage Mana. Utilisons-la class level method "mana.walk", choisir un nombre (par
exemple 3) comme paramtre (MoveAmt). Remplacer alors 3 par la fonction "random number"

Choisir "more..." pour donner l'encadrement de la valeur alatoire (minimum et maximum):

Ici la fonction random number renverra un nombre compris entre 1 et 5


Lancer le programme plusieurs fois, vous pouvez alors constater que Mana parcourt une distance
diffrente chaque fois.

Initiation la programmation oriente objet avec Alice

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"

Initiation la programmation oriente objet avec Alice

115

Vous aimerez peut-être aussi