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
Daniel Martinek:3.12.2016 22:07

Ahoj, malinko jsem si to vylepšil.
Přidal jsem si do třídy Bojovnik "duše" - každý má 3 duše, když umře, tak 1 ztratí.
Je to takhle v pořádku, nebo by jsi to udelal jinak ?

class Bojovnik:
    """
    Třída reprezentující bojovníka do arény.
    """

    def __init__(self, jmeno, zivot, utok, obrana, duse, kostka):

        self._jmeno = jmeno
        self._zivot = zivot
        self._max_zivot = zivot
        self._utok = utok
        self._obrana = obrana
        self._duse = duse
        self._kostka = kostka
        self.__zprava = ""

    def __str__(self):
        return str(self._jmeno)

    def __repr__(self):
        return str("Bojovnik({0}, {1}, {2}, {3}, {4})".format(self._jmeno,
                                                              self._max_zivot,
                                                              self._utok,
                                                              self._obrana,
                                                              self._kostka))

    @property
    def nazivu(self):
        """
        Vrátí True, pokud je bojovník naživu.
        Jinak vrátí False.
        """
        return self._zivot > 0

    def graficky_zivot(self):
        celkem = 20
        pocet = int(self._zivot / self._max_zivot * celkem)
        if(pocet == 0 and self.nazivu):
            pocet = 1
        return "[{0}{1}]       Duše: {2}".format("#"*pocet, " "*(celkem-pocet),
                                                  self._duse)
    def bran_se(self, uder):
        zraneni = uder - (self._obrana + self._kostka.hod())
        if zraneni > 0:
            zprava = "{0} utrpěl poškození {1} hp.".format(self._jmeno,
                                                           zraneni)
            self._zivot = self._zivot - zraneni
            if self._zivot <= 0:
                if self._duse == 1:
                    self._duse = self._duse - 1
                    self._zivot = 0
                    zprava = zprava[:-1] + " a zemřel."
                else:
                    self._duse = self._duse - 1
                    self._zivot = self._max_zivot
        else:
            zprava = "{0} odrazil útok.".format(self._jmeno)
        self._nastav_zpravu(zprava)

    def utoc(self, souper):
        uder = self._utok + self._kostka.hod()
        zprava = "{0} útočí s úderem za {1} hp.".format(self._jmeno, uder)
        self._nastav_zpravu(zprava)
        souper.bran_se(uder)

    def _nastav_zpravu(self, zprava):
        self.__zprava = zprava

    def vrat_posledni_zpravu(self):
        return self.__zprava

    def __nastav_duse(self, duse):
        if self._zivot == 0:
            souper.__duse = souper._duse + 1

    def konec_hry(self):
        return self._duse < 5

Dal jen duse Mag vydedil a pri vytvareni jsou nastaveny duse na "3":

zalgoren = Bojovnik("Zalgoren", 50, 20, 10, 3, kostka)
gandalf = Mag("Gandalf ", 40, 15, 12, 3, kostka, 30, 45)

Diky moc a omlouvam se za dlouhy zdrojak... :D

Editované
Avatar
Paul
Člen
Avatar
Paul:30.7.2018 14:57

Myslím, že by v metodě bran_se() měla být podmínka uprava na

if self._zivot <= 0:

V současné době nemáme ošetřeno, když se posledním útokem hodnota života dostane na 0.
Pak dojde k tomu, že se hra ukončí, ale nedojde k vypsání o tom, že jeden z hráčů zemřel.

Avatar
Rastislav Kish:18.11.2018 16:19

Ahoj, nemala by metóda graficky_ukazatel byť skôr vnútorná? S vonkajškom nijako nesúvisí, je to len pomocná metóda, ktorú využíva logika triedy pre spracovanie výsledkov, programátor používajúci našu triedu by k nej nemal mať prístup.

Avatar
Jakub Faktoriál Dvořák:12.3.2019 23:44

Já jsem zas duše implementoval pomocí upravení funkce nazivu(self), přijde mi to trochu elegantnější, ale nevím zda to má nevýhody...

@property
def nazivu(self):
    """
    Vrátí True, pokud je bojovník naživu a má ještě duši k dobru.
    Jinak vrátí False.
    """
    return self._zivot > 0 and self._duse >= 0

mimojiné je třeba upravit funkci bran_se(self, uder)

if zraneni > 0:
    zprava = "{0} utrpěl poškození {1} hp.".format(self._jmeno,
                                                    zraneni)
    self._zivot = self._zivot - zraneni
    if self._zivot < 0:
        self._zivot = 0
        zprava = zprava[:-1] + " a zemřel."
        if self._duse > 1:
            self._duse = self._duse -  1
            zprava = zprava + " Dostal další ŠANCI."
            self._zivot = self._max_zivot // 2
else:
    zprava = "{0} odrazil útok.".format(self._jmeno)
self._nastav_zpravu(zprava)
Avatar
Matěj Štolfa:22.5.2019 18:52

Ve třetím odstavci pod nadpisem Konstruktor potomka je v první větě překlem v prvním slově.
>

Avatar
Matěj Štolfa:22.5.2019 19:12

Opět jako minule ti to napíše gandalf utrpěl.. ale hp se odečte hrdinovi.. Zpomalil jsem ty pauzy na 1s a všiml jsem si, že na konci je to způsobeno tím, že prvně se to ubere a potom co se to ubere se odečte hp.. Ale ten snímek s tím odečtením zároveň zobrazí i utoc(), takže to je matoucí, když chceš zpomalit pauzy, aby to bylo záživnější. Bylo by lepší to zmodifikovat na to, aby se další útok vypsal až po tom, co se odebere život, místo toho, aby se provedly současně.

Avatar
Jaroslav Toninger:16.9.2022 12:13

Konec jsem opravdu nepochopil, ani když jsem potom projížděl kód autora, nenašel jsem patřičné zorientování. I tak děkuji autorovi.

Odpovedať
Bez extrému by nebyl pokrok v přírodě.
Avatar
Jakub Urbánek:26.9.2022 13:03

Myslím si, že jako tutoriál zbytečně komplikované. Více času člověk tráví přemýšlením nad detaily hry, než nad funkčností probíraných témat.

Avatar
Marie Formánková:18.11.2022 15:14

...tohle není vysvětlení jak funguje OOP ale návod jak si vytvořit hru...

Avatar
Petr Vácha
Člen
Avatar
Petr Vácha:17.1.2023 16:54

Vyšperkovat se zápas dá nekonečně daleko, ale jen mě zarazilo, že jsme neošetřili počáteční manu mága. Někdy má plno a někdy nula, ale třeba to byl záměr.

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.