NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
rosina.jakub
Člen
Avatar
rosina.jakub:19.7.2015 18:20

čaute. robím v hre malý obchod a mám problém.
Predstavte si, že máte obchod kde je na výber viacero postáv pre hráča. Vy si kúpite jednu a naskočí obrázok že to máte kúpené. Potom kliknete znova a tá postava sa vám aktivuje a v obchode sa zmení sprite (naskočí tam fajka)
Keď si kúpite inú postavu tak na ňu kliknete. Naskočí sprite, že ju máte kúpenú ale ešte nie aktivovanú. Stále je aktivovaná tá prvá. Akonáhle kliknete na druhú postavu, ktorú ste si kúpili tak vám sa druhá postava aktivuje a tá prvá deaktivuje(takže fajka je len pri druhej)
A tu je problém. Mne sa všetko darí okrem toho, že keď si aktivujem druhú postavu tak fajka ostane na oboch postavách.
Pridávam sem aj kód.
Ďakujem

Prvá postava

Create

image_speed=0;
{
ini_open("c&s.ini")
s=ini_read_real("Shop","c_1",0)
if (s>0)
{
image_index=0
}
else
{
image_index=12;
}
a=ini_read_real("Active","active",0)
if (a=1)
{
image_index=13;
}
else if (a>1)
{
image_index=0;
}
ini_close();
}

Left Pressed

{
ini_open("c&s.ini")
s=ini_read_real("Shop","c_1",0)
coins=ini_read_real("Coins","coins",0);

if (s=0) && (coins>=10)
{
a=ini_write_real("Active","active",0)
coins-=10
s=ini_write_real("Shop","c_1",1)
ini_write_real("Coins","coins",coins);
image_index=0
}
else if (coins<10) && (s<1)
{
msg = show_message_async("You do not have enough money!")
}
a=ini_read_real("Active","active",0)
if (s=1) && (a>=0)
{
a=ini_write_real("Active","active",1)
image_index=13;
}
ini_close();
}

Druhá postava

Create

image_speed=0;
{
ini_open("c&s.ini")
s=ini_read_real("Shop","c_2",0)
if (s>0)
{
image_index=1
}
else
{
image_index=12;
}
a=ini_read_real("Active","active",0)
if (a=2)
{
image_index=14;
}
a=ini_read_real("Active","active",0)
if (a>2) && (a<2)
{
image_index=1;
}
ini_close();
}

Left Pressed

{
ini_open("c&s.ini")
s=ini_read_real("Shop","c_2",0)
coins=ini_read_real("Coins","coins",0);

if (s=0) && (coins>=15)
{
a=ini_write_real("Active","active",0)
coins-=15
s=ini_write_real("Shop","c_2",1)
ini_write_real("Coins","coins",coins);
image_index=1
}
else if (coins<15) && (s<1)
{
msg = show_message_async("You do not have enough money!")
}
a=ini_read_real("Active","active",0)
if (s=1) && (a>=0)
{
a=ini_write_real("Active","active",2)
image_index=14;
}
ini_close();
}
 
Odpovědět
19.7.2015 18:20
Avatar
TomBen
Tvůrce
Avatar
TomBen:21.7.2015 11:22

Přestože jde o banalitu, těžko ti v tom někdo tu chybu najde. Máš totiž strašlivě neintuitivní kód. Mračna ifů a celé špatně navržené. Už v prvním eventu mi to mozek odmítl číst. Pokud na svém způsobu psaní kódu opravdu trváš, nezbude, než aby sis taky sám odbugovával. Jinak doporučuji celý kód přestavět. Do ini bych nelezl při každém prdu a většinu opakovaných postupů přepsal do samostatných skriptů.
Pak totiž píšeš místo

if ini_kdesi image_index=cosi else image_index=kdesi
else ini_kamsi image_index=kdosi else image_index=kdysi

jen něco jako

"if enabled(postava) set_active(postava);

Nebo alespoň můžeš doplnit komenty.
Kdo má proboha vědět, co je třeba image_index=12?

Nahoru Odpovědět
21.7.2015 11: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
rosina.jakub
Člen
Avatar
rosina.jakub:21.7.2015 19:22

Ja sa omlúvam. Viem, že kód nie je najlepší ale momentálne som naučený na takýto štýl. Viem, že sa musím od tohto odnaučiť a začať to písať trochu inak. Pridal som tam poznámky, dúfam, že to tak stačí. Budem rád za každú pomoc.
Ďakujem

Prvá postava

Create

image_speed=0;
{
ini_open("c&s.ini")
s=ini_read_real("Shop","c_1",0)
if (s>0)
{
image_index=0 //kupene ale neaktivovane
}
else
{
image_index=12; // zamknute
}
a=ini_read_real("Active","active",0)
if (a=1)
{
image_index=13; // aktivovane
}
else if (a>1)
{
image_index=0; // neaktivovane ale kupene
}
ini_close();
}

Left Pressed

{
ini_open("c&s.ini")
s=ini_read_real("Shop","c_1",0)
coins=ini_read_real("Coins","coins",0);

if (s=0) && (coins>=10) /kupovanie
{
a=ini_write_real("Active","active",0)
coins-=10
s=ini_write_real("Shop","c_1",1)
ini_write_real("Coins","coins",coins);
image_index=0 //kupene
}
else if (coins<10) && (s<1)
{
msg = show_message_async("You do not have enough money!")
}
a=ini_read_real("Active","active",0)
if (s=1) && (a>=0) //kupene ale neaktivovane
{
a=ini_write_real("Active","active",1)
image_index=13; //aktivovane
}
ini_close();
}

Druhá postava

Create

image_speed=0;
{
ini_open("c&s.ini")
s=ini_read_real("Shop","c_2",0)
if (s>0)
{
image_index=1 //kupene
}
else
{
image_index=12; //zamknute
}
a=ini_read_real("Active","active",0)
if (a=2)
{
image_index=14; //aktivovane
}
a=ini_read_real("Active","active",0)
if (a>2) && (a<2)
{
image_index=1; //kupene ale neaktivovane
}
ini_close();
}

Left Pressed

{
ini_open("c&s.ini")
s=ini_read_real("Shop","c_2",0)
coins=ini_read_real("Coins","coins",0);

if (s=0) && (coins>=15) //kupovanie
{
a=ini_write_real("Active","active",0)
coins-=15
s=ini_write_real("Shop","c_2",1)
ini_write_real("Coins","coins",coins);
image_index=1 //kupene
}
else if (coins<15) && (s<1)
{
msg = show_message_async("You do not have enough money!")
}
a=ini_read_real("Active","active",0)
if (s=1) && (a>=0) //kupene ale neaktivovane
{
a=ini_write_real("Active","active",2)
image_index=14; //aktivovane
}
ini_close();
}
 
Nahoru Odpovědět
21.7.2015 19:22
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na rosina.jakub
TomBen:21.7.2015 20:52

Mě se neomlouvej, ty to píšeš špatně. A kompletně špatně.
Chyby se tam tvoří právě tím stylem psaní.

Můžeš mi vysvětlit, co by asi tak dělala podmínka :

if (a>2) && (a<2)
Nahoru Odpovědět
21.7.2015 20:52
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
rosina.jakub
Člen
Avatar
rosina.jakub:21.7.2015 20:56

Ak je "a"väčšie a ak je "a" menšie. Viem, že to nie je dobre, musím sa to naučiť písať inak a hlavne správne!!

 
Nahoru Odpovědět
21.7.2015 20:56
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na rosina.jakub
TomBen:21.7.2015 20:59

A jaké a je podle tebe větší než 2 a současně menší než 2?
Já ti to řeknu: žádné.

Nahoru Odpovědět
21.7.2015 20:59
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
rosina.jakub
Člen
Avatar
rosina.jakub:21.7.2015 21:01

Mysli na to, že tých postáv tam bude 12. Preto je tam väčšie aj menšie

 
Nahoru Odpovědět
21.7.2015 21:01
Avatar
rosina.jakub
Člen
Avatar
rosina.jakub:21.7.2015 21:01

Ja som nenapísal, že tých postáv na nákup bude viacej

 
Nahoru Odpovědět
21.7.2015 21:01
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na rosina.jakub
TomBen:21.7.2015 21:14

To jsi pravda nenapsal, ale to mi došlo. Na tom ale nesejde.
Měl bys to smazat a začít znovu.
Vyjdi z tohoto:

if !koupeno && player.money>=cena_postavy { koupeno=true; player.money-=cena_postavy; }
else { with(vsechny_postavy) { active=false; } active=true; }

A koukám, že nesmyslnost té podmínky jsi stále nepochopil. Zkusím to napsat jinak.
Čísla 0,1,-1,-2 jsou menší než 2. Čísla 3,4,5,10,28 jsou větší než 2.
Neexistuje žádné číslo, které je menší než 2 a současně větší než 2.

A místo psaní se nad tím chvíli zamysli. Já mám moc práce - jdu se koukat na film. :-)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
21.7.2015 21:14
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
rosina.jakub
Člen
Avatar
rosina.jakub:21.7.2015 21:24

Aha..no jasné.. diky moc

 
Nahoru Odpovědět
21.7.2015 21:24
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 10 zpráv z 10.