ž AÄS7c@sÓddlZddlmZddlTdd„Zdd„ZGdd „d ƒZd d „Zd d „Zdd„Z dd„Z dd„Z ee e e gZ e dkrÏeedƒƒZe edƒndS(iN(usleep(u*cCs!t|jƒ||jƒ|ƒS(uAreturn a Point that is a translation of point by deltas dx and dy(uPointugetXugetY(upointudxudy((umovingSmileyEnd.pyu translatesu translatecCs9tj|jƒ|jƒd|jƒ|jƒdƒS(u-return the distance between point1 and point2i(umathusqrtugetXugetY(upoint1upoint2((umovingSmileyEnd.pyudistance sudistancecBsk|EeZdZdZddddd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dS(uSmileyu“ A Smiley is a smiley-face object that is capable of moving. FIELDS: centerPoint: center of this smiley dx, dy, amount the smiley moves each step size: radius of this smiley isSmiling, isMOving: booleans indicating current dynamic state. parts: a list of all of the drawable parts. others: the individual drawable parts i(uredutruecCs||_||_||_||_||_d|_t||ƒ|_t t||ƒ|ƒ|_ |j j |ƒ|j j dƒt t |j| d| dƒ|dƒ|_t t |j|d| dƒ|dƒ|_tt |j| d|dƒt |j|d|dƒƒ|_tt |j| d|dƒt |j| d|dƒƒ|_tt |j|d|dƒt |j|d|dƒƒ|_|sà|jjd|jdƒ|jjd|jdƒn|j |j|j|j|j|j|jg|_dS(NiiiiiT(udxudyusizeucoloru isSmilinguTrueuisMovinguPointu centerPointuCircleuheadusetFillusetWidthu translateuleftEyeurightEyeuLineu smileBaseu smileLeftu smileRightumoveuparts(uselfuinitXuinitYudxudyusizeucoloru isSmiling((umovingSmileyEnd.pyu__init__s,      /.#$#uSmiley.__init__cCs%x|jD]}|j|ƒq WdS(u$draw this smiley in the given windowN(upartsudraw(uselfuwinupart((umovingSmileyEnd.pyudraw8su Smiley.drawcCs:|jr6x*|jD]}|j|j|jƒqWndS(N(uisMovingupartsumoveudxudy(uselfupart((umovingSmileyEnd.pyumove=s u Smiley.movecCs#t|j|jƒ|j|jkS(N(udistanceu centerPointusize(uselfuother((umovingSmileyEnd.pyu collideWithBsuSmiley.collideWithcCs d|_dS(NF(uFalseuisMoving(uself((umovingSmileyEnd.pyustopEsu Smiley.stopcCsAd|_|jjd|jdƒ|jjd|jdƒdS(NiiF(uFalseu isSmilingu smileLeftumoveusizeu smileRight(uself((umovingSmileyEnd.pyufrownHs u Smiley.frownN( u__name__u __module__u __qualname__u__doc__u__init__udrawumoveu collideWithustopufrown(u __locals__((umovingSmileyEnd.pyuSmileys     uSmileycCs¿tddddƒ}tddddddd ƒ}tdddƒ}||g}|j|ƒ|j|ƒx9td ƒD]+}x|D]}|jƒq…Wtd ƒqxW|jƒ|jƒdS( Ni2ii‚ii<ugreenuiiFgš™™™™™©?F( uSmileyuFalseuGraphWinudrawurangeumoveusleepugetMouseuclose(us1us2uwinusmileysuius((umovingSmileyEnd.pyuscene1Ms     uscene1c CsÃtdddƒ}ttddƒdƒ}|jdƒ|jdƒ|jdƒ|jd ƒd }x1|D])}|j|ƒ|jrk|d 7}qkqkWxôt |ƒD]æ}|d kr»PnxÀ|D]¸}|j ƒx¥t t |ƒƒD]‘}xˆt |d t |ƒƒD]m}||j ||ƒrxM||gD]<}||jr/||j ƒ||jƒ|d 8}q/q/WqqWqåWqÂWtjdƒq¥W|d kr«|j|ƒn|jƒ|jƒdS(u–move the smileys in the list until time runs out or until all have collided (and therefore stopped). Notice the frowns after collisions!uiiÈi(uPileUp!!iuarialuboldublue3iigð?g8@NgUUUUUU¥?(uGraphWinuTextuPointusetSizeusetFaceusetStyleusetFilludrawuisMovingurangeumoveulenu collideWithufrownustoputimeusleepugetMouseuclose( usmileysustepsuwinutu moverCountusuiujuk((umovingSmileyEnd.pyurunCollisionScene[s:               urunCollisionScenec Cskttddddƒtddddddƒtd d ddd d ƒtd dddddƒgdƒdS(Ni2ii‚iÈiii<ugreeni,iFiiuorangei^ii(ublue1i–iÿÿÿÿ(urunCollisionSceneuSmiley(((umovingSmileyEnd.pyuscene2‡s uscene2c Cskttddddƒtddddddƒtd d ddd d ƒtd d ddddƒgdƒdS(Ni2ii‚iÈiii<ugreeni,iFiuorangei^ii(ublue1iþÿÿÿ(urunCollisionSceneuSmiley(((umovingSmileyEnd.pyuscene3s uscene3c Cskttddddƒtddddddƒtd d dd d dƒtd dddddƒgdƒdS(Ni2ii‚iÈiii<ugreeni,iFiiiuorangei^ii(ublue1iÿÿÿÿ(urunCollisionSceneuSmiley(((umovingSmileyEnd.pyuscene4–s uscene4u__main__u*Which scene do you want? (1, 2, 3, or 4): i(umathutimeusleepu zellegraphicsu translateudistanceuSmileyuscene1urunCollisionSceneuscene2uscene3uscene4uscenesu__name__uintuinputuscene(((umovingSmileyEnd.pyus    <  ,