Obsah poznámek psaných kurzívou si nemusíte pamatovat. Obdobné poznámky budou součástí písemky, a stejně tak komentáře v druhé části.
Následující tři příklady jsou recyklované z minulého cvičení na písemku, která nebyla.
Příklad. Vyrobte vlastní třídu, pro jejíž instance (to znamená, objekty jejího typu) vždy platí x == y
.
Porovnávání má na starosti funkce se speciálním názvem __eq__(self, druhy_porovnavany_objekt)
.
class VzdyckySeRovna: def __eq__(self, other): return True # a na ukázku:>>> a = VzdyckySeRovna() >>> b = VzdyckySeRovna() >>> a == b True
Příklad. Vyrobte vlastní třídu: bod v rovině. Má mít dvě vlastnosti, a to souřadnice x, y
, a ty bude potřeba zadat jako parametry při vytváření objektů téhle třídy.
Konstruktor (funkce na vytváření nových objektů) má speciální název __init__
. První parametr musí být samozřejmě self
, další můžou být, jaké chcete.
class Bod: def __init__(self, x, y): self.x = x self.y = y
Příklad. Doplňte třídu z předchozího příkladu tak, aby rozdíl dvou bodů v rovině byl zase bod v rovině, se souřadnicemi c.x = a.x - b.x, c.y = a.y - b.y
, v případě že bod c
vzniknul voláním c = a - b
.
Funkce na odčítání má speciální název __sub__(self, objekt_ktery_se_odecita)
.
class Bod: def __init__(self, x, y): self.x = x self.y = y def __sub__(self, other): return Bod(self.x - other.x, self.y - other.y) # a na ukázku:>>> a = Bod(2,3) >>> b = Bod(1,-1) >>> c = a - b >>> c.x, c.y (1, 4)
Poznámky z hodiny (ještě je během pondělka doplním).
Příklad. Následující program nakreslí kolečko a potom použije několik kopírovacích operací blit
. Kolik koleček bude vidět na obrazovce po skončení kódu?
Je-li cilova_plocha
objekt typu pygame.Surface
, pak funkce cilova_plocha.blit(zdrojova_plocha, cilova_pozice)
nakreslí obrázek zdrojova_plocha
do obrázku cilova_plocha
, tak, aby se levý horní roh zdrojového obrázku nakreslil na pozici cilova_pozice
v cílovém obrázku. Funkce může přijímat ještě další parametry, které ale nebudeme potřebovat. Vždy se přirozeně kreslí jen ta část, která se do cílového obrázku vejde (například při kreslení většího obrázku do menšího).
Funkce pygame.draw.circle(cilova_plocha, barva, pozice_stredu, polomer)
vykreslí kolečko. Všimněte si, že udáváme střed a poloměr kruhu (a ne například levý horní roh a průměr).
# nutne formality na zacatek import pygame pygame.init() # vyrobime okno velikosti 200 x 200 pixelu screen = pygame.display.set_mode((200, 200)) cervena = pygame.Color(255, 0, 0) # vyrobime plochu velikosti 100 x 100 pixelu, ktera ale neni videt kolecko = pygame.Surface((100, 100)) # vykreslime kolecko cervenou barvou pres celou mensi plochu pygame.draw.circle(kolecko, cervena, (50, 50), 50) # nasledujici ctyri operace jsou to, cim byste si meli lamat hlavu screen.blit(kolecko, (100, 0)) screen.blit(kolecko, (100, 0)) kolecko.blit(screen, (0, 0)) screen.blit(kolecko, (0, 0)) # poprosime pygame, aby plochu screen opravdu ukazal uzivateli pygame.display.update() # vterinu pockame a pak zavreme okno (nehledejte tady chytak) pygame.time.wait(1000) pygame.quit()Řešení zjistíte sami, když kód spustíte.
Příklad. Napište program využívající Pygame, který na obrazovku nakreslí následující obrázek:
Šířka obrázku je 200 pixelů. Obrázek nestahujte na disk, kód ho musí nakreslit sám od sebe. Začněte z kódu předchozího příkladu a jenom ho upravte.
# nutne formality na zacatek import pygame pygame.init() # vyrobime okno velikosti 200 x 200 pixelu screen = pygame.display.set_mode((200, 200)) cervena = pygame.Color(255, 0, 0) # vyrobime plochu velikosti 100 x 100 pixelu, ktera ale neni videt kolecko = pygame.Surface((100, 100)) # vykreslime kolecko cervenou barvou pres celou mensi plochu pygame.draw.circle(kolecko, cervena, (50, 50), 50) # kolecko nakreslime ctyrikrat ruzne posunute, takze samo sebe prekryje screen.blit(kolecko, (0, 0)) screen.blit(kolecko, (0, 50)) screen.blit(kolecko, (50, 0)) screen.blit(kolecko, (50, 50)) # poprosime pygame, aby plochu screen opravdu ukazal uzivateli pygame.display.update() # vterinu pockame a pak zavreme okno pygame.time.wait(1000) pygame.quit()