[Tutor PyCZ] Had - jeste jednou

Jiri Vit jirivit na jirivit.com
Úterý Květen 2 21:44:24 CEST 2006


Zdravim Python-tutor,

protoze jsem se tu nedavno rozplyval nad OOP vzorama bez konkretnich
prikladu, udelal jsem pro inspiraci vlastni verzi hada, ktery se tu  
nedavno objevil,
pricemz jsem pouzil OOP vzor Mediator (prostrednik).

Vyhody tohoto modelu v hadovi:
- trida mediator (ve hre Direktor) zprostredkovava komunikaci mezi hernimi  
objekty
- tridy hernich objektu reprezentuji samostatne datove entity o mohou se  
ladit samostatne i v interpretu
- tridy hernich objektu se navzajem neznaji, znaji jen sveho mediatora
- eventy z klavesnice obsluhuje take az mediator, tridy hernich objektu o  
nich nic nevi
- trida s instanci Console je jen dalsim hernim objektem, ktery mediator  
ridi - lze tak program
     lehce predelat do jineho GUI, aniz by se muselo cokoliv menit v  
tridach hernich objektu.	
- mediator reaguje ve chvili, kdy se nejaky herni objekt zmeni vyvola zmenu

Mozne nevyhody, ktere mohou casem vyplynout z tohoto modelu:
- s rostoucim poctem hernich objektu se trida mediator zvetsuje a je stale  
slozitejsi
- v teto konkretni implementaci mediator vytvari objekty "natvrdo". To by  
slo
obejit lepsim komunikacnim modelem mezi mediatorem a jeho podrizenym  
stadem :)
a vytvorenim seznamu tak, aby se ovecky mohly dynamicky prihlasovat ke  
svemu mediatorovi
(pro zajemce doporucuji prostudovat OOP vzor Observer)

hada si muzete vyzkouset odsud:
http://jirivit.com/download/python/had/had.py

PS: dekuji Martinovi Petrovi za inspiraci ;-)

Jirka Vit

------- Forwarded message -------
From: "Jiri Vit" <jirivit na jirivit.com>
To: "Konference Tutor portalu PyCZ" <tutor na py.cz>
Cc:
Subject: Re: [Tutor PyCZ] Zachytavani udalosti v cyklu
Date: Mon, 03 Apr 2006 11:10:59 +0200

Mas pravdu, Geone ;-)

Ovsem i tak si stojim za MVC modelem, ty objekty v aplikaci jsou na
sobe prilis zavisle.

Jirka

On Mon, 03 Apr 2006 07:50:25 +0200, geon <geon na post.cz> wrote:

> Martin Petr napsal(a):
>> vysledku se to projevuje tak, ze pokud rychle stisknu napr. sipku nahoru
>> a vpravo, had
>> pri vodorovnem pohybu vlevo neudela obrat o 180°, ale udelat takovej
>> zvlastni pohyb :o)
>>
> Zkusil jsem si tu hru zpomalit a ten zvláštní pohyb je, že prostě had
> udělal krok navíc. Koukal jsem na ten hlavní cyklus a tam je vše OK -
> při každém cyklu se přečte vstup a pohne hadem. To by mělo být přeci v
> pořádku! A taky že je. Pak mne napadlo, že může být chyba v modulu
> Console. Nechal jsem si vypisovat události v getKeyPress a ejhle co jsme
> dostal:
>
> <KeyPress Event at 9c49e0>  *
> <KeyRelease Event at 9c49e0>*
> <KeyPress Event at 9c49e0>  *         @
> <KeyRelease Event at 9c49e0>*
>                             *
>
> (ty tečky to je můj had ;-) ). Každá klávesa vrací dvě události: stisk a
> uvolnění. Takže řešení je nasnadě. Musíš z fronty událostí klávesy
> odebrat vždy 2 události a vrátit tu první, tu druhou zahodit.
>
> Python forever!
>




Další informace o konferenci Tutor