[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