Sleva na školení Naučit se HTML & CSS, JS a Bootstrap
Získej 500 Kč na naše školení. Více zde
Probíhá výprodej HTML & CSS, JavaScript a Bootstrap
Avatar
Tereza Cibulková:9. května 22:41

Ahoj, dělám v rámci své diplomové práce počítačovou hru. Jedná se o téma počítačová hra jako umělecké dílo a hra je pouze jako doplněk mé práce. Nemám znalosti programování proto jsem zvolila program Game maker, kde se dají příkazy nastavit pomocí přednastavených funkcí. Bohužel se neobejdu bez určitých syntaxí, se kterými bych potřebovala pomoci.

Krátký popis hry:
Ve hře se jedná o to, že hráč bude sbírat slova, která se náhodně vygenerují ze seznamu. Nasbíraná slova se budou ukládat, aby tento seznam nasbíraných slov se zobrazil v následujícím kole. Ve druhém kole se zobrazí pouze slova, která jsou nasbíraná v prvním kole. Ve hře se bude pohybovat "altz" (počítač - protivník), který bude tyto slova ničit.

Problémy:

  1. Vygenerování náhodného objektu na náhodné pozice (mám 60 slov, které potřebuji, aby se náhodně zobrazovala na náhodné pozici v herním poli. V jednu chvíli by se měly zobrazovat 2-3 slova) Po sebrání slova se zobrazí nové náhodné slovo. Toto jsem částečně začala řešit, ale je v tom spoustu chyb.
  2. Nevím jak ukládat nasbíraná slova, abych je mohla použít ve druhém kole.
  3. "Nepřátelé" (počítač) budou chtít sbírat také slova dřív než je seberu já. Jde tedy o to abych sebrala slovo dřív než ho zničí počítač.

V odkazu přikládám svou hru, je ve velmi rozpracované fázi a má spoustu chyb, soustředím se teď hlavně na tyto zmíněné chyby výše. Prosím prosím smutně koukám :D

https://uloz.to/…2wHZo2/2-gmk

 
Odpovědět 9. května 22:41
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Tereza Cibulková
TomBen:10. května 9:30

Dělat to ikonama asi moc nepůjde. A když, tak strašně složitě.
Už teď je to nepřehledné a spousta objektů. Normálně se používá položka parent a zvolí se objekt, který definuje chování společné pro všechny. Místo šedesáti objektů pak klikáš jeden.
Ale nevadí.

Pozor, následující text je určen k prostudování a pochopení, ne k bezhlavému opsání.

Generovat náhodně slova ze seznamu je celkem jednoduchá věc. V objektu generator_slov dáš ikonu volně psaného kódu a napíšeš něco jako tohle:

///poloha pri vytvoreni

var n;
n=0; //počitadlo objektu
n+=1; a[n]=jedna; //kazdy objekt se ulozi v poli **a** v poradi **n**
n+=1; a[n]=dva;
//dopsat až do konce;


nahodny_objekt=a[irandom_range(1,n)]; //vybere se nahodne jeden z nich

with(instance_create(0,0,nahodny_objekt)) //vlozi se do mistnosti na pozici 0,0
{
x=irandom_range(48,1296-sprite_width); //a ihned se premisti na pozici mezi hornim levym
y=irandom_range(64,576-sprite_height); //a dolnim pravym koncem herniho pole
move_snap(16,16); //zarovnani do mrizky by asi ani nebylo treba, slova jsou dost velka pro kolizi
}

Slovo se při kontaktu s čímkoli může snadno zapsat do seznamu velice podobným způsobem jako se z něj vytvořilo. Aby objekt nezmizel při opuštění místnosti, musí mít zapnutou vlastnost persistent. Pokud se takto použije generator_slov, vypadalo by to nějak takto:
( pro změnu proměnné v jiném objektu se použije tečka: objekt.promen­na=cislo; )

///kod v objektu generator_slov, event create
pocet_chycenych_slov=0;

///kod v objektu slovo, event kolize s hracem
generator_slov.pocet_chycenych_slov+=1;
generator_slov.b[generator_slov.pocet_chycenych_slov]=object_index;

Nepřátelé jsou svým způsobem podobní hráči, jen bych řekl, že jsou jednodušší .Při kolizi slova s nepřítelem stačí asi slovo zničit. Pak teoreticky asi ještě způsobit vygenerování dalšího slova.

//doporucuji dat kod generovani slov do uzivatelskeho eventu 1 ( zeleny kosoctverec )
with(generator_slov) event_user(1);
instance_destroy();
Nahoru Odpovědět 10. května 9:30
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
Tereza Cibulková:11. května 16:13

Mockrát děkuji za pomoc, s mnoho věcmi mi to pomohlo. Jenom jsem nepochopila tu poslední část a kód se "zeleným kosočtvercem".

____Nevím co přesně dělá uživatelský event______
//doporucuji dat kod generovani slov do uzivatelskeho eventu 1 ( zeleny kosoctverec )
with(generator_slov) event_user(1);
instance_destroy();
_____________­________________________­_____

Dále by mě zajímala varianta s položkou "parent". Položku parent jsem nalezla, ale nepochopila jsem pořád její využití, jak to napárovat na všech 60 slov, bez toho aby to byli jednotlivé objekty.

3. Problém: U nepřátel (počítač) bych potřebovala nastavit, aby se pohybovali ke slovům. Jakmile by se slovo vygenerovalo, tak k dané pozici by v tu chvíli směřoval i nepřítel.

Mohla bych poprosit o další pomoc a nějaké vysvětlení? Předem mockrát děkuji. :)

 
Nahoru Odpovědět 11. května 16:13
Avatar
Tereza Cibulková:11. května 16:59

Tak dědičnost jsem už pochopila. :)
Vytvořila jsem si objekt "slovo" a na všech slovech jsem poté nastavila parent (dědičnost) na objekt "slovo".

 
Nahoru Odpovědět  +1 11. května 16:59
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Tereza Cibulková
TomBen:11. května 21:20

Dobrá práce. Málo lidí čte, přemýšlí a píše ( v tomto uvedeném pořadí).

Uživatelský event je sice podobný těm ostatním ( step, create... ), ale nenastává sám. Prostě čeká, až ho někde něco spustí. Je to dobré jen pro přehlednost. Pomocí event_perform se dá spustit jakýkoli event - třeba umělý klik myší. Jsou ale i další možnosti. Když se má nějaká činnost opakovat, lze ji uložit jako skript a pak spouštět libovolně.

Pokud má generátor slov umět generovat slova, může to mít právě v uživatelském eventu. Ale vzhledem k rychlosti chápání, bych doporučil zkusit ty skripty. Je to snadné a skvělé.
Klikne se na Create script a v textovém poli Name se pojmenuje. Do prázdného textového pole se dá napsat cokoli, co se má dít a pak to mohou různé objekty opakovat. Příklad je vidět na obrázku v příloze. Takový skript by se pak spouštěl napsáním jeho názvu a kulatých závorek. Např: vytvor_slovo()

Když se mají nepřátelé pohybovat ke slovu, je to celkem snadné. Slovo má polohu xy uloženu ve svých proměnných, takže slovo.x a slovo.y
Nepřítel prostě posune své souřadnice xy směrem k souřadnicím slova. Něco jako toto:

x+=sign(slovo.x-x); //sign zaridi, aby posun byl prave o +1, 0, -1
y+=sign(slovo.y-y);

Tyto výpočty posunou objekt, v němž jsou provedeny směrem k poloze slova.

Nahoru Odpovědět 11. května 21:20
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.
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 5 zpráv z 5.