[Squeak-fr] Faire bouger des petits lapins...
Edouard KLEIN
edouard-jo.klein at wanadoo.Fr
Lun 22 Aou 10:55:01 CEST 2005
Bonjour à tous,
Ma prof de bio m'a demandé de réaliser un programme illustrant la
sélection naturelle, tournant sous Windows (beurk), et étant "visuel"
c'est à dire ayant une interface rigolote pour marquer les esprits.
J'ai choisi de faire ça avec Squeak car :
- Squeak est libre
- Squeak marche sur MacOSX (Seul système avec Linux que j'aie à
disposition) et Windows
- Squeak permet de faire des petits visuels rigolos.
- C'est une bonne excuse pour apprendre le Smalltalk...
En langage orienté objet, je connais l'objective-C, j'ai appris la
syntaxe smalltalk sans trop de problèmes, et j'ai commencé à réalisé
le programme en utilisant le principe du modèle-Vue-Contrôleur. Je me
souviens vaguement avoir lu sur internet que ce principe était pas le
meilleur en Smalltalk, mais je n'ai pas exactement saisi la solution
alternative. Il faut dire que je ne m'y suis pas trop penché (honte à
moi).
Le projet est "presque" fini : Il y a deux classe de faites, une qui
s'appelle clapier (la classe contrôleur), l'autre qui s'appelle Lapin
(la classe modèle). Là où je bloque, c'est pour la classe vue.
Clapier et Lapin mettent sans problèmes en oeuvre le principe de la
sélection naturelle : chaque lapin a deux couleurs possibles : marron
ou blanc, et habite soit dans la neige soit dans les bois. Il y a une
boucle de reproduction des lapins, dans laquelle les enfants héritent
aléatoirement du génotype parental et, selon leur génotype à eux,
deviennent marrons ou blanc (se reporter à vos cours de bio de
terminale). Il y a aussi une boucle de prédation qui favorise la mort
des lapins qui font tache sur leur milieu. Tout cela fonctionne à
merveille, et après quelques boucles, la quasi totalité des lapins
présents dans les bois sont marrons, et la quasi totalité de ceux
présents dans la neige sont blancs. Le premier problème est dû au
fait que la sortie du programme a lieu sur un transcript, de la
manière suivante :
Sortie de la boucle d'accouplement des lapins :
Du lapin Blanc dans les bois et de la lapineMarron dans les bois
Dans le milieules boisnait un nouveau lapin avec le génotype#('m' #,
'm')
Du lapin Marron dans les bois et de la lapineMarron dans les bois
Dans le milieules boisnait un nouveau lapin avec le génotype#('m' #,
'm')
Du lapin Marron dans les bois et de la lapineBlanc dans les bois
Dans le milieules boisnait un nouveau lapin avec le génotype#('m' #,
'B')
etc...
Sortie de la boucle de massacre des lapins :
Un lapin Blanc dans les bois sest fait massacre
7
2
Un lapin Marron dans les bois sest fait massacre
3
Un lapin Blanc dans la neige sest fait massacre
(1/3)
Un lapin Marron dans la neige sest fait massacre
1
Un lapin Marron dans les bois sest fait massacre
1
Un lapin Blanc dans les bois sest fait massacre
etc...
Ce type de sortie n'est pas exactement ce qu'il convient de qualifier
de visuel et rigolo. J'avais prévu de faire bouger des petites images
de lapins sur un fond mi bois mi neige. Et c'est là que je bloque.
<mode râleur> <!-- à ignorer par les susceptibles-->
Je trouve que le fait que les classes et méthodes de Squeak ne soient
pas systématiquement documentés comme par exemple le sont celles du
framework Cocoa d'apple en Objective-C est un sérieux handicap pour
les newbies du smalltalk comme moi. Je n'ai par exemple choisi une
OrderedCollection pour ranger mes lapins qu'après moult essais
foireux, alors que les NSMutableArray sont clairement indiqués pas
Apple comme étant les structures dédiées au stockage d'objets.
Ne prenez surtout pas la mouche, ceci est juste une remarque, si je
pensais du mal de Squeak, je ne l'utiliserai pas...
</mode râleur>
Reprenons. Pour finaliser le projet, j'ai besoin de mettre en fond
une image (qui pour l'instant est en jpg mais je peux changer le
format si nécessaire) et de représenter chaque instance de la classe
lapin par une image de lapin, qui pourra se mouvoir sur le fond à la
réception d'un message émanant de l'instance représentée. Comment
faire ?
J'aurais bien cherché tout seul dans le browser, comme je l'ai fait
avec OrderedCollection, mais là où le bât blesse, c'est qu'il
faudrait que j'ai fini le programme demain ou après demain, et donc
je n'ai pas le temps de jouer au testeur fou ou de lire tous les
tutoriels disponibles pour trouver enfin une petite référence à ce
que je cherche. Merci d'avance pour toute l'aide que vous pourriez
m'apporter.
Cordialement
Edouard KLEIN
Plus d'informations sur la liste de diffusion Squeak-fr