Re: [Tutor PyCZ] Milované Livewires - A najednou tam lezou třídy

Tomáš Bělonožník rebelme na gmail.com
Pátek Březen 3 12:28:48 CET 2006


Díky vám oběma za pomoc. Ten kód co jsem posílal do mailu byl trošku
pravda trošku zvláštní, mě to normálně fungovalo, ale asi jsem omylem
do toho mailu vložil upravený kód který sem nezkoušel...spravil sem
tam pár věcí a už to šlo.

K geonovým radám:

>  >
>  > def vyrobRobota():
>  >     xr=random.randint(8, 631)
>  >     yr=random.randint(8, 471)
>  >
>  >     xr_round = xr / 10
>  >     xh_round = xh / 10
>  >     yr_round = yr / 10
>  >     yh_round = yh / 10
>  >     while xr_round == xh_round:
>  >         while yr_round == yh_round:
>  >             xr=random.randint(8, 631)
>  >             yr=random.randint(8, 471)
>  >
>
> "nezamrzá" ti to někdy? - může to být tímto cyklem - protože z něho není
> cesty ven - musíš měnit i xh_round, ....

Ještě mi to nikdy nezamrzlo, ale to bude asi tím, že případ kdy se
vygenerují téměř stejná čísla není moc častý. Přidal jsem tedy ještě
hrac.x = random.randint......

> a neni lepší (zkus přijít na rozdíl)??:
> while xr_round == xh_round and yr_round == yh_round:

Jj jasně, sice jesem o boolean operátorech veděl, ale bůhvíproč mě
nenapadlo to tu použít, to je cenná informace.

>  >     Robot_telo = box(xr-5,yr-5,xr+5,yr+5, filled=1,
> colour=Colour.dark_blue)
>  >     return xr, yr, Robot_telo
>  >
>
> tady něco chybí, tady je chyba

Teď to vypadá
"robot.telo = box(robot.x-5,robot.y-5,robot.x+5,robot.y+5, filled=1,
colour=Colour.dark_blue)
return robot"
ale jestli je tam chyba tak ji nevidím a asi zůstala...

>
>  >         if "2" in klavesy:
>  >             xh = xh + 0
>  >             yh = yh - 10
>  >             sleep(0.2)
>  >             teleportace = teleportace + 0
>  >             return xh, yh, teleportace
>  >         ......
>  >         elif teleportace < 5:
>  >             if "t" in klavesy:
>  >                 xh = random.randint(8, 631)
>  >                 yh = random.randint(8, 471)
>  >                 teleportace = teleportace + 1
>  >                 sleep(0.1)
>  >                 return xh, yh, teleportace
>  >             else:
>  >                 xh = xh + 0
>  >                 yh = yh + 0
>  >                 teleportace = teleportace + 0
>  >                 return xh, yh, teleportace
>  >         else:
>  >             xh = xh + 0
>  >             yh = yh + 0
>  >             teleportace = teleportace + 0
>  >             return xh, yh, teleportace
>
> v této funkci se zbytečně stokrát opakuje return xh, .... Nešlo by to
> dát až na konec funkce? Je tam dvakrát stejný else... myslím že
> zbytečně... nemusí tam být ani jednou, nebo ano?
>
Jasně, dal jsem "return hrac, teleportace" až na konec funkce a
najednou už else nepotřebuju.
>
>
>  >
>  > def posunRobota(xr, xh, yr, yh, Robot_telo):
>  >     if xr < xh:
>  >         if yr == yh:
>  >             xr = xr+5
>  >             yr = yr+0
>  >             move_to(Robot_telo, xr, yr)
>  >             sleep(0.2)
>  >             return xr, yr
>  >         elif yr < yh:
>  >             xr = xr+5
>  >             yr = yr+5
>  >             move_to(Robot_telo, xr, yr)
>  >             sleep(0.2)
>  >             return xr, yr
>  >         elif yr > yh:
>  >             xr = xr+5
>  >             yr = yr-5
>  >             move_to(Robot_telo, xr, yr)
>  >             sleep(0.2)
>  >             return xr, yr
>  >         else:
>  >             return xr, yr
>  >     elif xr > xh:
>  >         if yr == yh:
>  >             xr = xr-5
>  >             yr = yr+0
>  >             move_to(Robot_telo, xr, yr)
>  >             sleep(0.2)
>  >             return xr, yr
>  >         if yr < yh:
>  >             xr = xr-5
>  >             yr = yr+5
>  >             move_to(Robot_telo, xr, yr)
>  >             sleep(0.2)
>  >             return xr, yr
>  >         if yr > yh:
>  >             xr = xr-5
>  >             yr = yr-5
>  >             move_to(Robot_telo, xr, yr)
>  >             sleep(0.2)
>  >             return xr, yr
>  >         else:
>  >             return xr, yr
>  >     elif yr < yh:
>  >         yr = yr+5
>  >         xr = xr+0
>  >         move_to(Robot_telo, xr, yr)
>  >         sleep(0.2)
>  >         return xr, yr
>  >     elif yr > yh:
>  >         yr = yr-5
>  >         xr = xr+0
>  >         move_to(Robot_telo, xr, yr)
>  >         sleep(0.2)
>  >         return xr, yr
>  >     else:
>  >         xr = xr+0
>  >         yr = yr+0
>  >         return xr, yr
>  >
>
> nemám tady u sebe konečné řešení, ale tahle "kalkulační matematika
> přibližování"
> by také měla jít zjednodušit, asi takto:
> Když bude souřasdnice hráče menší než souřadnice robota, přičti k
> souřadnici robora nějaký krok. A to se musí udělat zvlášť pro x a y a
> zvlášť pro menší a větší. Takže tohle je vlastně 1/4 této části
>
>     if robot.x < hrac.x:
>         robot.x=robot.x+krok/2
>
>
Na tohle se ještě podívám, to vypadá ze všech těch věcí nejsložitěji.
>
>  > def posunHrace():
>  >     move_to(Hrac_telo, xh, yh)
>  >
>  > # Funkce znemožňující hráčův pohyb za okraj hrací plochy
>  > def kontrola_plochy(xh, yh, Hrac_telo):
>  >     if xh < 8:
>  >        xh = 8
>  >        yh = yh+0
>  >        move_to(Hrac_telo, xh, yh)
>  >        return xh, yh
>  >     .............
>  >     else:
>  >        return xh, yh
>
> a tady podobně:
>   if hrac.x<0:  hrac.x=0
>
> Stačí nastavit jen x-sovou souřadnici ne? Ostatní zůstávají nemění se...

Upravil jsem, zrušil else, dal return na konec funkce, hurá, zas je to
o něco přehlednější..
>
>
>  >
>  > # Kontrola srážky s robotem
>  > def kontrola_srazky(xr, xh, yr, yh, konec_sub):
>  >     xr_round = xr / 10
>  >     xh_round = xh / 10
>  >     yr_round = yr / 10
>  >     yh_round = yh / 10
>  >     if xr_round == xh_round:
>  >         if yr_round == yh_round:
>  >             print "Prohrál jsi!"
>  >             konec_sub = 1
>  >             return konec_sub
>  >         else:
>  >             pass
>  >     else:
>  >         pass
>
>
>
> zase mi připadají ty dvě else: pass nějaké navíc ....

Else pryč, return o odstavec výš, while uděláno s "and".
>
>  > xh, yh, Hrac_telo = vyrobHrace()
>  > xr, yr, Robot_telo = vyrobRobota()
>  >
>  > while konec != 2:
>  >     while 1:
>
> není to while 1: zbytečné??
>
>  >         if konec_sub == 1:
>  >             konec = 2
>  >             break
>
> není to break zbytečné???

Všechno opraveno, to while 1 byla vskutku zbytecnost.

Předěláno do tříd mám, ještě promyslet ten pohyb robotů a hurá na
přidávání více nepřátel.


Další informace o konferenci Tutor