Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
MrOrisek
Člen
Avatar
MrOrisek:1.1.2013 13:16

Dobrý den a rovnou šťastný nový rok přeji, ale teď k věci
Udělal jsem si lékarničku úplně normálně funguje akorát mi to píše jeden error nevíte co mám špatně prosím ???

if global.zivot>50;
{
    global.zivot+=50
}

ERROR --

ERROR in
action number 1
of Collision Event with object o_medik
for object o_hrac:

Error in code at line 1:
   if global.zivot>50;
                    ^
at position 19: Statement expected.

Díky předem :)

 
Odpovědět
1.1.2013 13:16
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na MrOrisek
TomBen:1.1.2013 13:22

Nemá tam být ten středník u podmínky.

Nahoru Odpovědět
1.1.2013 13:22
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
MrOrisek
Člen
Avatar
Odpovídá na TomBen
MrOrisek:1.1.2013 13:27

Když tam není středník tak ta lékarnička nejde sebrat a nepřičte to životy :(

 
Nahoru Odpovědět
1.1.2013 13:27
Avatar
Kit
Tvůrce
Avatar
Odpovídá na MrOrisek
Kit:1.1.2013 13:31

Protože tu podmínku máš obráceně.

Nahoru Odpovědět
1.1.2013 13:31
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
MrOrisek
Člen
Avatar
Odpovídá na Kit
MrOrisek:1.1.2013 13:32

Jak jako obráceně ? :-D

 
Nahoru Odpovědět
1.1.2013 13:32
Avatar
Kit
Tvůrce
Avatar
Odpovídá na MrOrisek
Kit:1.1.2013 13:36

Protože potřebuješ oživit jen pokud máš méně než 50.

Nahoru Odpovědět
1.1.2013 13:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na MrOrisek
matesax:1.1.2013 13:38

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;
Editováno 1.1.2013 13:42
 
Nahoru Odpovědět
1.1.2013 13:38
Avatar
MrOrisek
Člen
Avatar
MrOrisek:1.1.2013 13:42

Aha .... Problem byl v něčem jiném. Měl sem to v kolyzi z hračem a lékarničkou místo Lekárnička z hráčem. I tak děkuji za váš čas a nápomoc :)

 
Nahoru Odpovědět
1.1.2013 13:42
Avatar
Kit
Tvůrce
Avatar
Odpovídá na MrOrisek
Kit:1.1.2013 13:43

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);
Nahoru Odpovědět
1.1.2013 13:43
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:1.1.2013 13:45

Jen pro zajímavost - pod min je podmínka - co? :) Jakože - to je ale velká zkratka... :)

 
Nahoru Odpovědět
1.1.2013 13:45
Avatar
MrOrisek
Člen
Avatar
MrOrisek:1.1.2013 13:47

Děkuju vám moc :)

 
Nahoru Odpovědět
1.1.2013 13:47
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:1.1.2013 14:02

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.

Nahoru Odpovědět
1.1.2013 14:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
MrOrisek
Člen
Avatar
MrOrisek:1.1.2013 14:09

Mohl bych se ještě zeptat jak mám nahrát do pozadí menu hudbu ?

 
Nahoru Odpovědět
1.1.2013 14:09
Avatar
vodacek
Tvůrce
Avatar
Odpovídá na Kit
vodacek:1.1.2013 14:13

eh v čem je += nebezpečné? možná leda tím že je nebezpečně krátké nic jiného mě nenapadá

 
Nahoru Odpovědět
1.1.2013 14:13
Avatar
Kit
Tvůrce
Avatar
Odpovídá na vodacek
Kit:1.1.2013 14:24

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.

Nahoru Odpovědět
1.1.2013 14:24
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:1.1.2013 14:59

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.

Nahoru Odpovědět
1.1.2013 14:59
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na Kit
TomBen:1.1.2013 15:07

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?

Editováno 1.1.2013 15:08
Nahoru Odpovědět
1.1.2013 15:07
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na TomBen
Kit:1.1.2013 15:24

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.

Nahoru Odpovědět
1.1.2013 15:24
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:1.1.2013 15:25

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... :)

Editováno 1.1.2013 15:28
 
Nahoru Odpovědět
1.1.2013 15:25
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:1.1.2013 15:28

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.

Editováno 1.1.2013 15:31
Nahoru Odpovědět
1.1.2013 15:28
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:1.1.2013 15:34

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

Editováno 1.1.2013 15:35
 
Nahoru Odpovědět
1.1.2013 15:34
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:1.1.2013 15:36

Jak jsem napadl své řešení?

Nahoru Odpovědět
1.1.2013 15:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:1.1.2013 15:38
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??

 
Nahoru Odpovědět
1.1.2013 15:38
Avatar
TomBen
Tvůrce
Avatar
TomBen:1.1.2013 15:38

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.

Nahoru Odpovědět
1.1.2013 15:38
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na TomBen
matesax:1.1.2013 15:40

Však na to jsem reagoval i já...

 
Nahoru Odpovědět
1.1.2013 15:40
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na matesax
TomBen:1.1.2013 15:44

Co psal Kit mi přišlo zajímavé, ale dohadovat se tu skrz to nemusíme.

Nahoru Odpovědět
1.1.2013 15:44
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na TomBen
Kit:1.1.2013 16:31

Ber to trochu s rezervou, protože v C# se operátor += přetížit nedá a zřejmě ani v GM ne.

Nahoru Odpovědět
1.1.2013 16:31
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na Kit
TomBen:1.1.2013 16:37

V GM se toho vůbec moc nedá. :)

Nahoru Odpovědět
1.1.2013 16:37
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:1.1.2013 16:50

Já stejně nikdy nepochopil potřebu přetěžovat - nebyl jsem v situaci, kdy by nestačilo vytvořit si metodu a tu volat...

 
Nahoru Odpovědět
1.1.2013 16:50
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:1.1.2013 17:05

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

Nahoru Odpovědět
1.1.2013 17:05
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:1.1.2013 19:51

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

Editováno 1.1.2013 19:52
 
Nahoru Odpovědět
1.1.2013 19:51
Avatar
hondre
Člen
Avatar
hondre:2.1.2013 12:57

Vím, že se to nevstahuje k této debatě, ale chtěl bych se zeptat, když chci do té soutěže poslat hru, co mám udělat ?

 
Nahoru Odpovědět
2.1.2013 12:57
Avatar
Odpovídá na hondre
Neaktivní uživatel:3.1.2013 9:57

Musíš si zažádat o redaktorská práva a dáš jí do kategorie devbookátor jako ukázkovou hru.

Nahoru Odpovědět
3.1.2013 9:57
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 33 zpráv z 33.