[Squeak-fr] Faire bouger des petits lapins...

stéphane ducasse ducasse at iam.unibe.ch
Lun 22 Aou 20:33:24 CEST 2005


On 22 août 05, at 10:55, Edouard KLEIN wrote:

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

C'est clair.
Plusieurs points:
     - il y a des livres gratuits en ligne a
         http://www.iam.unibe.ch/~ducasse/Books.html
     - http://www.iam.unibe.ch/~ducasse/FreeBooks.html
Commence par Smalltalk by Example.

     - demande dans les mailing-list
     - il y a des tests parfois.
     - si tu as qq millions d'euros je peux bien t'assurer que l'on  
peut obtenir un bien meilleur squeak
     - maintenant tu peux aussi contribuer en ecrivant des tests par  
exemple, je sais que c'est pas la reponse
     mais si personne ne fait rien, rien n'arrivera.
     Si tu ecris des tests, je les relirai et te donnerai du retour.

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

Tu peux faire un drag and drop de ton desktop sur le fond.
maintenant tu prends une image jpeg ou png et tu la mets sur les  
desktop de squeak, tu la selectionnes
et puis tu regardes dans le halo rouge:
     - set as background (tu peux chercher toutes les methodes qui  
contiennent le texte 'set as...' tu tapes les texte dans un browser
     le selectionne puis menu more... find methods....

     - sinon tu inspect: -> donc tu apprends que la class de sketch  
et sketchmorph
     dans la class sketchmorph tu vois la methode

addCustomMenuItems: aCustomMenu hand: aHandMorph
     "Add custom menu items"

     super addCustomMenuItems: aCustomMenu hand: aHandMorph.
     aCustomMenu add: 'restore base graphic' translated target: self  
action: #restoreBaseGraphicFromMenu.
     aCustomMenu add: 'call this my base graphic' translated target:  
self action: #callThisBaseGraphic.
     aCustomMenu add: 'choose new graphic...' translated target: self  
action: #chooseNewGraphic.
     aCustomMenu addLine.
     aCustomMenu add: 'set as background' translated target:  
rotatedForm action: #setAsBackground.
     self addPaintingItemsTo: aCustomMenu hand: aHandMorph

donc tu cherhces la methodes setAsBackground
tu vois quelle n'est pas sur SketchMorph
mais sur Form
tu essaies dans l'inspecteur
         self asForm setAsBackGround

ca ne marche pas

         self form setAsBackGround marche....


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


je veux bien voir ton programme a la fin :)
>
> Cordialement
>
> Edouard KLEIN
>
>
> _______________________________________________
> Squeak-fr mailing list
> Squeak-fr at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/listinfo/squeak-fr
>
>



Plus d'informations sur la liste de diffusion Squeak-fr