Diskuze: Lekárnička
V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 33 zpráv z 33.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.


Když tam není středník tak ta lékarnička nejde sebrat a nepřičte to
životy 
Vtip?
Aktuálně máš:
pokud je hodnota proměnné global.zivot větší než 50, pak k ní přičti 50...
Je to ale blbost - protože se to vždy řeší tak, že lákarnička přičítá podle velikosti - malá, velká - každopádně nějakou konstatní hodniotu - a pokud je situace, že neumíráš, ale jsi zraněn - a lékárnička by ti přesáhla limit maximálních životů, doplníš je jen na max - ne o konstantu - takže buď použiješ něco jako Math.Min, nebo to uděláš takto:
global.zivot += 50
if (global.zivot > max)
global.zivot = max;
Myslím si, že původní požadavek je doplnit životy do 100, nejvýše však o 50.
global.zivot = min(global.zivot + 50, 100);
Jen pro zajímavost - pod min je podmínka - co?
Jakože - to je ale velká
zkratka... 
Neznám syntaxi GM ani jeho knihovny, nikdy jsem v něm nedělal. Jestli je
to min() nebo Math.min() je mi vcelku jedno, napsal
jsem jen princip.
Operátor +=, /= jsou v objektovém programování
dost nebezpečné, protože občas dělají i to, co nechceme. Zvykl jsem si i
na jazyk, ve kterém se obsah proměnných nedá modifikovat.
eh v čem je += nebezpečné? možná leda tím že je nebezpečně krátké nic jiného mě nenapadá
Viz včerejší převod do izometrického zobrazování. David Hartinger tam před převodem vydělil původní souřadnice. Pokud by ty původní souřadnice potřeboval i někde jinde, třeba v jiné metodě, asi by se divil. Zásadou je, aby metoda měla co nejméně postranních efektů.
Netýká se to tohoto případu. Je však chybou, pokud obsah proměnné modifikuješ dvakrát místo jednou.
Napadlo mě vzít tvůj zápis
global.zivot += 50;
if (global.zivot > max)
global.zivot = max;
a trochu mu upravit okolní podmínky. Řekněme, že programátor bude
chtít ušetřit místo a tak dekladuje global.zivot typu
byte, který je použitelný pro interval -128..127.
Proč ne? Životy budou přece v rozsahu 0..100, tak to stačí.
Hráč bude mít při hře 80 životů a dotkne se lékárny. Hodnota se
navýší o 50, tedy na 130. Jenže to už dojde k přetečení a do proměnné
se uloží hodnota -126. Následující podmínka nebude splněna a korekce se
neprovede. Zdravý hráč při kontaktu s lékárnou chcípne.
Což by se ovšem nestalo, kdyby byla nejprv podmínka a pak změna.
Samotný zápis += s tím zas tak moc nemá do činění, ne?
V daném případě ne. Jsou situace, kdy je naopak použití += žádoucí. Například pokud je += přetíženo na příkaz ADD do objektu nebo databáze. V tom případě by příklad musel vypadat takto:
global.zivot += 50;
Samotné omezení by bylo v setteru. Podle mne by to bylo nejlepší řešení i v této situaci, ale určitě bych tyto dva přístupy nekombinoval.
Jak to s tím souvisí? To se podělá tak jako tak - když to bude byte:
global.zivot = min(-126, 100);
Tak proč to vůbec napadáš? Přeci nebudu debil, a když si dám ten typ byte, tak zvolím jiný postup...
Vysvětli mi, proč používat byte na životy... To rovnou můžeš psát v
0 a 1... 
Já to nenapadám. Jen jsem na tvůj algoritmus nasadil jiné (trochu
extrémní) okolní podmínky. Ty jsi funkci min() nepoužil.
Pokud nedeklaruješ proměnné uvnitř metody, musíš s podobnými zhovadilostmi počítat. Proto je lepší to dát přímo do setteru a přetížit +=, viz výše.
Ukázal jsem, že selhala - vyšlo by z ní záporné číslo - takže jsi napadl mé i tvé řešení... Osobně bych vůbec nedělal v GM - a osobně bych se nezabýval hrami - ale také to sem nepíši... A osobně bych nepoužíval globální proměnné... Kdybych se tu zabýval všemi možnostmi, tak bych se...
Myslím si, že původní požadavek je doplnit životy do 100, nejvýše však o 50.
global.zivot = min(global.zivot + 50, 100);
V případě byte vyjde záporné číslo...
Napadlo mě vzít tvůj zápis
global.zivot += 50;
if (global.zivot > max)
global.zivot = max;
a trochu mu upravit okolní podmínky. Řekněme, že programátor bude chtít ušetřit místo a tak dekladuje global.zivot typu byte, který je použitelný pro interval -128..127. Proč ne? Životy budou přece v rozsahu 0..100, tak to stačí. Hráč bude mít při hře 80 životů a dotkne se lékárny. Hodnota se navýší o 50, tedy na 130. Jenže to už dojde k přetečení a do proměnné se uloží hodnota -126. Následující podmínka nebude splněna a korekce se neprovede. Zdravý hráč při kontaktu s lékárnou chcípne.
Takže k čemu jsi to psal??
Asi už se to posunulo hodně mimo rámec původního dotazu.
GM neumí byte, proměnná global.zivot je sporná sama o sobě
a přetěžování v GM nelze nijak určovat.
Autor dotazu poděkoval a s tím bych to zabalil.
Co psal Kit mi přišlo zajímavé, ale dohadovat se tu skrz to nemusíme.
Ber to trochu s rezervou, protože v C# se operátor +=
přetížit nedá a zřejmě ani v GM ne.
Já stejně nikdy nepochopil potřebu přetěžovat - nebyl jsem v situaci, kdy by nestačilo vytvořit si metodu a tu volat...
V PHP se přetěžování občas hodí:
$a1 = array('jablka' => 8, 'hrusky' => 5);
$a2 = array('jablka' => 6, 'svestky' => 2);
var_dump($a1 + $a2); // array('jablka' => 8, 'hrusky' => 5, 'svestky' => 2)
V C# a Javě se zase běžně přetěžuje "+" u řetězců nebo metoda toString() u objektů.
Ještě, že já v PHP neprogramuji...
Vlastně jednou v začátcích mé
kariéry
, jsem studoval
přetížení výpisu z pole - ale nikdy bych to již nevyměnil za LINQ... A
LINQ je vlastně dobrý nástroj pro obdobu ToString - ovšem s vlastním
nastavením logiky...
Musíš si zažádat o redaktorská práva a dáš jí do kategorie devbookátor jako ukázkovou hru.
Zobrazeno 33 zpráv z 33.