Aplikace C4 Hra Asteroidy objektově

Lekce C4 opakuje programování stejné hry jako v lekci C3, ale tentokrát použijeme při programování struktury dat, které se nazývají objekty. Obsah je jen lehkým úvodem k objektovému programování.

název: C4 Hra Asteroidy objektově
kategorie: C středně pokročilí
ref.číslo: C4
projekt:
verze: 01, 2017-08-22
autor: Ivo Obr, Lanškroun


V lekci C3 jsme měli pouze jednoduché proměnné, co proměnná, to její jiný název. Takže jsme měli například jednu proměnnou pro souřadnici “x” asteroidu1, další proměnná byla souřadnice “y” asteroidu1 atd. Na tuto situaci se můžeme nyní podívat i z druhé strany a říci, že máme asteroid1 (pro nás to bude objekt se jménem “asteroid1”), který bude mít dvě vlastnosti, a to souřadnici “x” a souřadnici “y”.

Jak budeme přistupovat k hodnotám u souřadnic asteroidu1? Postaru to bude takto:

asteroid1_x = 0
asteroid1_y = 0

Objektově to bude následovně. Vytvoříme si objekt (bude v dalším) se jménem asteriod1. Objekt bude mít po vytvoření dvě vlastnosti a to vlastnost x (x-ová souřadnice) a y (y-ová souřadnice). Obecně se k vlastnostem dostaneme tak, že uvedeme název objektu, následuje oddělovač tečka a pak název vlastnosti. Takže zápis bude takto :

asteriod1.x = 0
asteroid1.y = 0

Zatím žádné výhody nevidíme, náš příklad je příliš jednoduchý. Objekt může mít ještě ve svém obsahu další prvky, a těm se říká metody. Jsou to části programového kódu – příkazy, které obvykle pracují s vlastnostmi objektu.

Příkladem je například okno na monitoru. To je objekt, jehož vlastnosti jsou výška okna, šířka okna, pozice okna, zobrazení (minimální, maximální, ….), barva rámu okna, aktivita a spousta dalších vlastností. Metody jsou pojmenované skupiny příkazů, které například okno otevírají, zavírají, posouvají, aktivují a mnoho dalších. V programu pak můžeme vytvářet různá okna, ale jejich soubor vlastností je stejný i metody jsou stejné.

Bylo by velmi nepraktické každé okno znovu popisovat (když jejich struktura je stejná). Proto si na začátku programu nadefinujeme strukturu objektu (nikoliv skutečný objekt) a této struktuře (vzoru) dáme jméno. Říkáme tomu třída objektu a začátek definice vypadá takto :

(dva prázdné řádky)
class Asteroid():

Tato definice třídy objektu musí být na začátku programu. Slovo “class” je začátek popisu struktury (třídy objektu), slovo “Asteroid” je název třídy. Dvě vlastnosti této třídy (vzoru) popíšeme takto :

def __init__(self, sx, sy):
        self.x = sx
        self.y = sy

Zápis funkce “__init__” umožní při vytvoření objektu vložit hodnoty do vlastností nového objektu. Vysvětlení v následujícím popisu vytvoření objektu. Další zápisy popisují metodu třídy Asteroid:

def krok(self):
        self.y = self.y + 1
        if self.y == 5:
            self.y = 0
            self.x = random.randint(0, 4)
(dva prázdné řádky)

 Slovo “def” je začátkem definice (popisu) metody se jménem “krok”. Slovo “self” popisuje sebe sama  a při vytvoření konkrétního objektu se slovo “self” nahradí jménem konkrétního objektu.

Definice třídy objektu musí být na začátku programu.

Toto je zápis vytvoření konkrétního objektu se jménem asteroid1:

asteroid1 = Asteroid(random.randint(0, 4), 0)

Název našeho prvního objektu je “asteroid1”. Vytvoří se z třídy objektu (ze struktury) se jménem Asteroid (v programu můžeme mít více tříd objektů). V kulaté závorce jsou při vytváření objektu dodány dvě numerické hodnoty. Prvá hodnota je pozice souřadnice “x” (sloupec), druhá hodnota je pozice souřadnice “y” (řádek). Pozice sloupce je určena vygenerováním náhodného čísla v rozsahu 0 až 4, řádek je vždy ten horní s indexem 0. Druhý asteroid vytvoříme takto :

asteroid2 = Asteroid(random.randint(0, 4), 2)

Změna je pouze v souřadnici “y”, to je třetí řádek (počítáno od prvého). Vlastnost asteroidu1 – jeho x-ová souřadnice je asteroid1.x a podobně je to s dalšími vlastnostmi.
Aby se asteroid1 nebo asteroid2 pohyboval, stačí použít (volat) jeho metodu se jménem “krok” a to takto:

asteroid1.krok()
asteroid2.krok()

Tady už začínáte vidět výhodu objektového programování, a to v jednoduchosti příkazu. Pokud bychom měli asteroidů více, pak by se výhoda začala stále více projevovat. Vlastní fungování programu je vysvětleno v lekci C3, takže zde je jen ukázka posunu programování ze základního do objektového.

Pokud jste pozorní, můžete nyní vidět, že většina příkazů v MicroPython je vlastně volání metod nebo vlastností jednotlivých objektů. Například “display” je objekt matice 5×5 LED diod. Jedna z metod tohoto objektu má název “show”. Takže náš příkaz na začátku programu

display.show(Image.ARROW_W)

je volání metody “show” v objektu “display” s parametrem předem definovaného obrázku. Obrázek je objekt pojmenovaný “Image” a jedna z vlastností tohoto objektu má název   “ARROW_W”. Objekt “Image” má mnoho vlastností pojmenovaných jako ARROW_W, ARROW_N, ARROW_E .. atd.

Tato lekce by měla sloužit jako nahlédnutí do objektového programování. Nakonec ještě celý program, jak vypadá v objektovém provedení.

 

Posted in aplikace, kat C - středně pokročilí and tagged , .