ڋ:Kc@shdZdZdZdZdZddkTdd"dYZd d#d YZd d$d YZdd k Z ddk Tde i i fdYZ de i i fdYZde i i fdYZdd%dYZdd&dYZdefdYZdd'dYZdd(dYZdd)dYZd Zed!jo end S(*cCs |GHdS(N((tmsg((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pytDebugsiiiii(t*t EventManagercBsDeZdZdZdZdZdZdZdZRS(shthis object is responsible for coordinating most communication between the Model, View, and Controller.cCs;ddkl}||_g|_g|_g|_dS(Ni(tWeakKeyDictionary(tweakrefRt listenerst eventQueuetlistenersToAddtlistenersToRemove(tselfR((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyt__init__s    cCs|ii|dS(N(Rtappend(R tlistener((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pytRegisterListenerscCsWx|iD]}d|i|}d}|itjo t}n|itjo|itjo t}n|itjot|itjodddk}|i}t|idd}|io |i}nh|d6} t| }nJ|itjo1|itjo!|id|_|iin |itjoO|itjo?|ipqn|ii\} } t|i| | }n|itjoS|it joC|ipqnt!} |ii"} t#|i| d| }nG|itjoS|it$joC|ipqnt%} |ii"} t#|i| d| }n|itjoS|it&joC|ipqnt'} |ii"} t#|i| d| }n|itjoS|it(joC|ipqnt)} |ii"} t#|i| d| }n|itjo t*}n|o|i+i,|qqWndS(NiiiidR(-RtPlayerJoinEventR#R tplayerRR"R!t GameSyncEventtgameRtpygameRtgetR ttypetQUITt QuitEventtKEYDOWNtkeytK_ESCAPEtK_ptrandomtRandomtstrt randrangetPlayerJoinRequesttK_otreversetK_ct GetPlaceDatatCharactorPlaceRequesttK_UPt DIRECTION_UPt GetMoveDatatCharactorMoveRequesttK_DOWNtDIRECTION_DOWNtK_LEFTtDIRECTION_LEFTtK_RIGHTtDIRECTION_RIGHTtGameStartRequestRR(R RR't_[1]tptevR1trngRt playerDatat charactortsectort directiontdata((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRVs  6                  N(RRRR R R(((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyREs tCPUSpinnerControllercBs)eZdZdZdZdZRS(s...cCs&||_|ii|d|_dS(Ni(RRt keepGoing(R R((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyR s cCs/x(|iot}|ii|qWdS(N(RPRRR(R R((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pytRuns  cCs!t|to t|_ndS(N(RR,tFalseRP(R R((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRs(RRRR RQR(((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyROs  NtStatusBarSpritecBs&eZddZdZdZRS(cCstiii||||_|ii|tiidd|_d|_ |ii |i dd|_ |i i |_ |i iddS( Nit.iiii(iii(ii(R(tspritetSpriteR RRtfonttFontR ttexttrendertimagetget_recttrecttmove_ip(R Rtgroup((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyR s  cCsD|ii|idd|_|ii|_|iiddS(Niiii(iii(ii(RWRZRYR[R\R]R^(R ((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pytupdatescCs$t|tp|i|_ndS(N(RRRRY(R R((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRsN(RRR R R`R(((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRSs t SectorSpritecBseZddZRS(cCsEtiii||tid|_|iid||_dS(Niii(ii(iii(R(RURVR tSurfaceR[tfillRL(R RLR_((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyR sN(RRR R (((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRastCharactorSpritecBs&eZdZdddZdZRS(icCstiii||tid}|i}|idtii||dd||_ |i |_ t i |_t i d7_ ||_d|_dS(Ni@ii i(i@i@(iiii(i i (R(RURVR Rbt convert_alphaRctdrawtcircleR[R\R]RdtcountertorderRKR tmoveTo(R RKR_tcolort charactorSurf((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyR s     cCsC|io5|i|i_d|_|ii|i|indS(N(RjR]tcenterR R^Ri(R ((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyR` s  N(iii(RRRhR R R`(((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRdst PygameViewcBsGeZdZdZdZdZdZdZdZRS(cCs||_|ii|ddg|_titiid|_tiidti |ii |_ |i i dti idd}d}|i|dd}|i i|dd }|i|dd}|i i|dd|ifd }|i|dd}|i i|dd |ifd }|i|dd}|i i|dd |if|ii|i dtiitii|_tii|_dS(Niiiis Example GameisPress SPACE BAR to startis P for new players C for new charactoris O to switch playersi(iii(iii(ii(iii(iii(ii(iii(iii(iii(ii(RRtcharactorColorsR(tinittdisplaytset_modetwindowt set_captionRbtget_sizet backgroundRcRWRXR RZtblitt get_linesizetflipRUt RenderUpdatest backSpritest frontSprites(R RRWRYttextImg((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyR s2  ### cCs|iid |ii|id tiitid }d}xw|iD]l}|djo|i dd}nd}|i d d}|d7}t ||i }||_ d}qRWt|i|i }dS(Niii iiiii(iii(ii(ii iiii(RvRcRsRwR(RqRytRecttsectorstmoveRaR{R]R RSR(R tgameMapt squareRecttcolumnRLt newSpritetstatusBarSprite((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pytShowMap4s       cCsh|i}|p dGHdS|i|}|pt|i}n|i|}|ii|i_dS(Ns*Charactor is not in a sector. cannot show(RLtGetCharactorSpriteRdR|tGetSectorSpriteR]Rm(R RKRLtcharactorSpritet sectorSprite((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyt ShowCharactorNs cCs:|i|}|i}|i|}|ii|_dS(N(RRLRR]RmRj(R RKRRLR((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyt MoveCharactor[s cCs_x&|iD]}|i|jo|Sq W|id}dG|GH|iit||i|S(Nis new color: (R|RKRoR7Rd(R RKtstcol((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRds     cCs=x6|iD]+}t|do|i|jo|Sq WdS(NRL(R{thasattrRL(R RLR((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRps  c Cst|to|ii|i|i|ii|i|i|ii|ii|ii|i}|ii|i}||}t i i|nt|t o|i }|i |nt|to|i|int|to|i|int|to}dG|G|iiGH|i}|itijodS|i |i x6|iD]'}x|iD]}|i|qWqtWndS(Ns!Pygame View syncing to game state(RRR{tclearRsRvR|R`RfR(Rqt MapBuiltEventtmapRtCharactorPlaceEventRRKtCharactorMoveEventRR&R't__dict__tstatetGametSTATE_PREPARINGR#t charactors( R Rt dirtyRects1t dirtyRects2t dirtyRectsRR'R%RK((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRws6       ( RRR RRRRRR(((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRns !  RcBsDeZdZdZdZdZdZdZdZdZ RS(s...t preparingtrunningtpausedcCsJ||_|ii|ti|_g|_d|_t||_dS(Ni( RRRRRR#t maxPlayerstMapR(R R((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyR s     cCs9|iiti|_t|}|ii|dS(N(RtBuildRt STATE_RUNNINGRtGameStartedEventRR(R RH((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pytStarts   cCs=|ii||i|t|}|ii|dS(N(R#R tSetGameR$RR(R R%RH((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyt AddPlayers  cCst|to%|itijo|iq5nt|top|itijo dGHdSt|i|i jo dGHdSt |i }|i |i |i|ndS(Ns%Players can not join after Game startsMaximum players already joined(RRERRRRR5RR#RtPlayerRtSetDatat playerDictR(R RR%((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRs( RRRRRt STATE_PAUSEDR RRR(((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRs  RcBsMeZdZdZdZdZdZdZdZdZ RS(s...cCsA||_d|_d|_|ii|t|g|_dS(Nt(RR R'RRt CharactorR(R R((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyR s    cCsd|it|fS(Ns(Rtid(R ((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyt__str__scCs3|id}|ii}|i|i}||gS(Ni(RR'RRtstartSectorIndex(R RKRRL((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyR9s  cCs|idgS(Ni(R(R ((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyR=scCs ||_dS(N(R'(R R'((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRscCs|d|_dS(NR(R(R R((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRscCsdS(N((R R((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRs( RRRR RR9R=RRR(((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRs     RcBsGeZdZdZdZdZdZdZdZdZ RS(s...iicCs2||_|ii|d|_ti|_dS(N(RRR RLRtSTATE_INACTIVER(R R((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyR s  cCsdt|S(Ns(R(R ((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRscCsh|itijodS|ii|o9|ii|}||_t|}|ii|ndS(N( RRRRLt MovePossiblet neighborsRRR(R RMt newSectorRH((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pytMove s  cCs5||_ti|_t|}|ii|dS(N(RLRt STATE_ACTIVERRRR(R RLRH((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pytPlaces   cCslt|to$|i|jo|i|in5t|to$|i|jo|i|indS(N(RR:RKRRLR>RRM(R R((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRs ( RRRRRR RRRR(((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyRs   RcBs,eZdZdZdZdZdZRS(s...iicCs+||_ti|_g|_d|_dS(Ni(RRRRRR(R R((sB/home/sjbrown/work/writing_games_tutorial/code_examples/example.pyR /s   cCsx-tdD]}|iit|iq W|id|idit<|id|idit<|id|idit<|id|idit<|id|id it<|id|id it<|id|idit<|id|idit<|id|idit<|id|idit<|id |idit<|id |idit<|id|idit<|id|idit<|id|idit<|id|idit<|id|id it<|id |id it<|id|idit <|id|idit <|id|idit <|id|idit <|id |idit <|id |id it s,  9v   4(/8