Ahoj,
hru jsem nezkoušel, ale ten kód se mi ani trochu nelíbí. Určitě bych ho nenazval "idiomatic python".
if (self.ball_x + self.ballvx > co[0]
and self.ball_x + self.ballvx < co[2]
and self.ball_y > co[1]
and self.ball_y < co[3])
Proč ne raději takto?
if all(( self.ball_x + self.ballvx > co[0], self.ball_x + self.ballvx < co[2],
self.ball_y > co[1], self.ball_y < co[3] ))"
Ještě lépe proč raději nevytvořit novou metodu?
if checkRanges(co, self.ball_x, self.ball_y, self.ball_vx, self.ball_vy):
Toto se vůbec nedá luštit. Co to proboha počítá?
d = hex(int(c[0]*256)<<16 | int(c[1]*256)<<8 | int(c[2]*256))
Celkově je ten kód takový neuhlazený, třída "Example" je typický zástupce God object
D. Knuth vyslovil citát: It was nice to learn Python; a nice afternoon. To je možná pravda, ale idiomatic python se za odpoledne nenaučíš, ten příchází až po letech...
Tak jde o to, ze podle meho clanek nema za cil ucit python, ale spis upozornit na zajimavou grafickou knihovnu, algoritmus kolizi se taky hodi pro inspiraci.
Kdo chce a stoji mu to za to, muze si to zkusit prepsat do 'idiomatic python' nebo treba do javascriptu :-)
Ja jsem rad ze si to muzeme se synem rozpitvat, testovat ruzne upravy a treba se neco noveho naucit.
Takze diky za clanek!
Článek jsem jen prolétl, ale ... Závorky kolem jednoduché podmínky jsou nadbytečné, naopak v případě více podmínek jsou závorky, tak jak je píše autor, podle doporučení PEP (lze použít i nedoporučení hodný backslash). Funkce `all()` je dalším řešením -- zkoušel jsi rychlost all() vs "normální" zápis? Vychází mi to v průměru 2 x rychlejší bez volání funkce -- ale to tady není důležité.
Je to otázka zvyku, já používám zpětné lomítko místo závorek, je to jedno, účel stejnej. (Je to dáno asi tím, že sem v pythonu začínal, tedy nemám návyky z jinejch jazyků, s těma sem začal až pak...)
all() bych rozhodně v tomhle případě nepoužíval, už jen proto že rychlost. Je to logické, All je na procházení seznamů, tedy nejprve se seznam musí vytvořit a pak teprve prjít. Při klasickém and se vyhodnocuje z leva do prava, tedy pokud neplatí první podmínka, vrátí se False a dál se nic nevyhodnocuje...