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 – 9. diel - Bojovník do arény v Pythone

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
Barbora Zdvihalová:27. júna 18:46

Ahoj, muzete mi nekdo vysvetlit ta cisla?

bojovnik = Bojovnik("Zal­goren", 100, 20, 10, kostka)
souper = Bojovnik("Shadow", 60, 18, 15, kostka)

Dekuji.

Editované
Avatar
Barbora Zdvihalová:27. júna 18:50

Muzu se jeste zeptat, jak muzeme mit uder za 24 hp, kdyz mame jednu desetistrannou kostku, tj. maximalni hodnota je 10?
Z vaseho kodu toto neni jasne.
"Shadow útočí s úderem za 24 hp."

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Barbora Zdvihalová
DarkCoder:27. júna 19:34

self._zivot představuje aktuální životy, self._max_zivot představuje počet životů pokud je jednotka nezraněna. Nejsou tedy vždy stejné. Budou různé pokud jednotka je zraněna.

Teď k metodě graficky_zivot() která je by mohla být napsána o dost lépe.

  • nevhodně pojmenovaná proměnná, naprosto postrádá význam toho co představuje.
  • je lokální, což je nevhodný návrh. takováto proměnná by měla být třídním atributem.
  • autor mohl použít funkci ceil() místo podmínek. Je to elegantní a působí to profesionálně.
def graficky_zivot(self):
    pocet = math.ceil((self._zivot / self._max_zivot) * Bojovnik.DELKA_UKAZATELE_ZIVOTA)
    return f"[{'#' * pocet}{' ' * (Bojovnik.DELKA_UKAZATELE_ZIVOTA - pocet)}]"

'#' * pocet - znamená opakuj # tolikrat kolik je počet
' ' * (Bojovnik.DEL­KA_UKAZATELE_ZI­VOTA - pocet) - znamená opakuj znak mezera tolikrát kolik zbývá do celkové délky

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Barbora Zdvihalová
DarkCoder:27. júna 19:38

1. f-string zápis
print(f"Život po útoku: {bojovnik.gra­ficky_zivot()}")

f"..." znamená formátovaný řetězec (f-string). Vloží do řetězce přímo výsledek výrazu uvnitř {}

2. .format() metoda
print("Život: {0}".format(bo­jovnik.grafic­ky_zivot()))

"{0}" je zástupný znak (placeholder) v řetězci. .format(...) vloží argument(y) na místa těch zástupných znaků. 0 znamená první argument předaný do .format()

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:27. júna 19:43

bojovnik = Bojovnik("Zal­goren", 100, 20, 10, kostka)
souper = Bojovnik("Shadow", 60, 18, 15, kostka)

Vytváříš instance a nastavuješ jejich atributy pomocí argumentů předaných do konstruktoru.
def __init__(self, jmeno, zivot, utok, obrana, kostka):

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Barbora Zdvihalová
DarkCoder:27. júna 19:54

Muzu se jeste zeptat, jak muzeme mit uder za 24 hp, kdyz mame jednu desetistrannou kostku, tj. maximalni hodnota je 10?

Celkový útok (úder) je dán součtem útoku a vrhu kostkou. Shadow má útok 18 a hod kostkou byl 6. Proto 24.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Barbora Zdvihalová:27. júna 20:23

Vytváříš instance a nastavuješ jejich atributy pomocí argumentů předaných do konstruktoru.
def __init__(self, jmeno, zivot, utok, obrana, kostka):

Diky za odpovedi.
Presto, co znamena zivot 100, utok 20, obrana 10?
Myslela jsem, ze zivot na zacatku je 20 (proc tedy 100?) a ze utok a obranu nam generuje kostka?

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Barbora Zdvihalová
DarkCoder:27. júna 20:31

Každá jednotka (instance) má nějaký počet životů. To právě představuje atribut zivot. Čím větší hodnota, tím více jednotka snese zranění než padne. Útok je část celkového útoku a udává, jak velké zranění může protivníkovi způsobit. Obrana představuje redukci zranění. Kostka je dodatečný modifikátor útoku a obrany..

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Barbora Zdvihalová
DarkCoder:27. júna 20:38

Proměnná celkem = 20 (později správně pojmenovaná jako DELKA_UKAZATE­LE_ZIVOTA) představuje:

Maximální počet dílků (segmentů) v grafickém indikátoru života
Je to vizuální délka ukazatele zdraví — kolik "čtverečků" (např. #) maximálně můžeš zobrazit v indikátoru zdraví, bez ohledu na skutečný počet životních bodů.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Barbora Zdvihalová:27. júna 20:47

takze ty atributy si musim zvolit na zacatku? A proc ma kazdy bojovnik jine, kdyz se tam zadavaji rucne? :D Pardon, ja sem asi trochu natvrdla.

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 93.