Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 12. diel - Aréna s mágom (dedičnosť a polymorfizmus)

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Jan Duchenka
Člen
Avatar
Jan Duchenka:19. marca 14:59

U této lekce, když ji spustim tak mi to ukazuje pokaždé jiné životy u Zalgorena i Gandalfa

Avatar
Žaneta Janáčová:9. júna 22:00

bylo zmatené co kam zapisovat/opra­vovat. ve třídě bojovník - mág

Avatar
Barbora Zdvihalová:28. júna 18:53

:D :D :D Ja se musim smat :D
Clovek ma na zvladnuti 41 lekci OOP 14 dni, to jsou 3 lekce na den, coz je dost narocny, i kdyby clovek nepracoval nebo se nemusel starat o deti...
A rada zni "Je to tezky, snazte se programovat prubezne svy vlastni programy, protoze ty nase tady jsou moc narocny" :D
Skvele zvladnutej kurz, moc! :D
Ja chapu, ze se to na nas nikdo jinej nenauci, ale opravdu by neslo alepson prodlouzit ten cas, ktery na to je? :)
Proc chcete zpetnou vazbu, kdyz s tima lekcema nic nedelate? :)

Editované
Avatar
DarkCoder
Člen
Avatar
DarkCoder:28. júna 20:03

Výuka bude vždy neefektivní, budete-li do výkladu motat věci které nejsou nutné. Jako například herní principy.

Když zmíníte programátorský pojem, tak ho vysvětlete nebo ho vůbec neuvádějte.

V Pythonu jsou všechny metody - řečeno terminologií jazyků C++, C# - virtuální.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Lukáš Chaloupek:5. júla 21:52

Nejsem si jistý, jestli se zde snažíme pochopit základy OOP. Čím více lekcí, tím větší chaos v hlavě. Programování her mi jako úplnému začátečníkovi moc nepomáhá. Samozřejmě si vše přečtu znovu, ale jsem si jistý, že se základy budu muset doučit jinde, jestli se mi tento kurz podaří zdárně dokončit.

Odpovedať
Úspěch není konečný, selhání není fatální. Důležité je mít odvahu pokračovat.
Avatar
Pavel Baru
Člen
Avatar
Pavel Baru:23. júla 8:39

Ani po dvacátém přečtení jsem nepochopil, co mi měl tenhle odstavec sdělit. :-D

"U potomků není nutné vždy volat konstruktor předka.
Náš konstruktor musí mít samozřejmě všechny parametry potřebné pro
předka plus ty nové, co má navíc potomek, takže ho volat budeme. Některé
potom předáme předkovi a některé si zpracujeme sami. Konstruktor předka se
vykoná před naším konstruktorem."

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Pavel Baru
DarkCoder:23. júla 13:03
# Třída předka
class Bojovnik:
    def __init__(self, jmeno, zivoty, utok):
        self.jmeno = jmeno
        self.zivoty = zivoty
        self.utok = utok

    def utoc(self):
        print(f"{self.jmeno} útočí fyzicky za {self.utok} bodů.")

# Následník s magií
class MagickyBojovnik(Bojovnik):
    def __init__(self, jmeno, zivoty, utok, mana, magicky_utok):
        super().__init__(jmeno, zivoty, utok)
        self.mana = mana
        self.magicky_utok = magicky_utok

    def kouzli(self):
        if self.mana >= 10:
            print(f"{self.jmeno} kouzlí za {self.magicky_utok} bodů.")
            self.mana -= 10
        else:
            print(f"{self.jmeno} nemá dostatek many.")

Použití:

bojovnik = Bojovnik("Ragnar", 100, 15)
bojovnik.utoc()

mago = MagickyBojovnik("Merlin", 80, 10, 30, 25)
mago.utoc()     # zděděná metoda
mago.kouzli()   # vlastní metoda
mago.kouzli()
mago.kouzli()   # spotřebuje manu

Když se vytváří instance magického bojovníka, tak:

Krok Co se stane
---- --------------------------------------------------------
1️⃣ Vytvoří se prázdný objekt
2️⃣ Zavolá se __init__ z MagickyBojovnik
3️⃣ super().__init__() nastaví atributy z Bojovnik
4️⃣ MagickyBojovnik přidá další atributy
5️⃣ Vrací se hotová instance s děděnými i novými vlastnostmi
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
DarkCoder:23. júla 13:22

Jinak tohle je zrovna příklad, kdy dědičnost není vhodná ale používá se kompozice. 😆

Ukázka kompozice:

class FyzickyUtocnik:
    def __init__(self, utok):
        self.utok = utok

    def utoc(self, jmeno):
        print(f"{jmeno} útočí fyzicky za {self.utok}!")

class MagickaSlozka:
    def __init__(self, mana, magicky_utok):
        self.mana = mana
        self.magicky_utok = magicky_utok

    def kouzli(self, jmeno):
        if self.mana >= 10:
            print(f"{jmeno} sesílá kouzlo za {self.magicky_utok}!")
            self.mana -= 10
        else:
            print(f"{jmeno} nemá dostatek many.")

class Lecitel:
    def __init__(self, leciva_sila):
        self.leciva_sila = leciva_sila

    def lec(self, jmeno):
        print(f"{jmeno} léčí spojence za {self.leciva_sila} životů.")

class Postava:
    def __init__(self, jmeno, zivoty):
        self.jmeno = jmeno
        self.zivoty = zivoty
        self.fyzika = None
        self.magie = None
        self.leceni = None

    def nastav_fyziku(self, utok):
        self.fyzika = FyzickyUtocnik(utok)

    def nastav_magii(self, mana, magicky_utok):
        self.magie = MagickaSlozka(mana, magicky_utok)

    def nastav_leceni(self, leciva_sila):
        self.leceni = Lecitel(leciva_sila)

    def utoc(self):
        if self.fyzika:
            self.fyzika.utoc(self.jmeno)
        else:
            print(f"{self.jmeno} neumí fyzicky útočit.")

    def kouzli(self):
        if self.magie:
            self.magie.kouzli(self.jmeno)
        else:
            print(f"{self.jmeno} neumí kouzlit.")

    def lec(self):
        if self.leceni:
            self.leceni.lec(self.jmeno)
        else:
            print(f"{self.jmeno} neumí léčit.")

A použití:

# Čistý bojovník
bojovnik = Postava("Ragnar", 100)
bojovnik.nastav_fyziku(20)

# Magický léčitel
mystik = Postava("Aeris", 80)
mystik.nastav_magii(40, 25)
mystik.nastav_leceni(15)

# Všestranný mág-bojovník
paladin = Postava("Arthas", 120)
paladin.nastav_fyziku(15)
paladin.nastav_magii(30, 20)

# Akce:
bojovnik.utoc()      # Ragnar útočí fyzicky
bojovnik.kouzli()   # Ragnar neumí kouzlit
bojovnik.lec()      # Ragnar neumí léčit

mystik.kouzli()     # Aeris sesílá kouzlo
mystik.lec()        # Aeris léčí spojence
mystik.utoc()       # Aeris neumí fyzicky útočit

paladin.utoc()      # Arthas útočí fyzicky
paladin.kouzli()    # Arthas sesílá kouzlo
paladin.lec()       # Arthas neumí léčit
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Kristian Mockovčiak:1. augusta 10:52

určité části jsou zmatené a já sám jsem nevěděl kde daný kód mám nebo nemám dopsat.

Avatar
Enaad Majed Alblawi:19. augusta 22:06

The code didn't run correctly even after copying every single code on the course and I had to spend hours fixing it on my own trying to figure it out where it all went wrong.

Odpovedať
Life's too short make the most of it.
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 41.