[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