Domáca úloha 1 – Simon says
Termín odovzdania – 11.11.2018 22:00
Prvou domácou úlohou bude naprogramovať hru “Simon says”. Vyzerať by mala nasledovne: Youtube ukážka.
Odovzdanie: Váš program mi pošlite do uvedeného termínu na mailovú adresu zaba@ksp.sk. Do predmetu napíšte [4EVL-2018] DU1
a podpíšte sa. Do mailu tiež skúste odhadom napísať, ako dlho vám vypracovanie úlohy trvalo. Úlohu môžete odovzdávať aj skôr, vtedy sa vám k tomu vyjadrím a budete môcť zapracovať pripomienky. Rátať sa bude posledné riešenie odovzdané pred termínom. Za riešenia sa samozrejme dajú dostať aj čiastkové body a podúlohy nemusíte riešiť v uvedenom poradí.
Bodovanie: Plný počet bodov za úlohu je 15. Samozrejme, získať môžete menej aj viac, podľa toho ako vám to pôjde. Vyhradzujem si však právo strhnúť alebo pridať až 5 body podľa toho, ako si dáte na úlohe záležať. Ak naprogramujete funkcionalitu naviac, budete to mať extra pekné, proste keď si dáte záležať, dostanete body naviac :) Samozrejme, ak to odfláknete a bude to ledva robiť to čo má, tak vám zase nejaké body strhnem.
Čo môžete (ne)použiť pri riešení: Samozrejme neodpisujte jeden od druhého! Kód, ktorý mi odovzdáte by mal byť váš. Inak však používajte čokoľvek, čo vám pomôže. Google? Samozrejme, ako si myslíte, že som to riešil ja :D. Ste úplne zaseknutý a neviete čo ďalej? Tak mi napíšte a ja vám poradím. Pošlite mi aj svoj kód a ja vám poradím o to konkrétnejšie. Spýtate sa spolužiaka a ten vám povie, ako to robil? Aj to je v pohode (s mierou). Chcem však, aby ste sa nakoniec posadili k počítaču a naprogramovali to sami.
A nejaké dobré rady – riešte to priebežne a skôr ako večer pre deadlinom (vtedy vám ťažko pomôžem), prečítajte si najskôr celé zadanie, googlite, robte zadanie postupne, inšpirujte sa riešeniami k príkladom, ktoré zverejňujem na stránke.
Podúloha 1 (3 body)
Začnime tým, že si vytvoríme dve náhodné premenné – počet potrebných stlačení modrého a červeného tlačidla. Následne vykreslíme základné prvky našej hry – hlavičku s textom zadania a mriežku. Vykresľovanie hracej plochy naprogramujte tak, aby sa ľahko dala zmeniť jeho veľkosť. To znamená, že veľkosť okna je udaná premennou definovanou na začiatku programu.
Podúloha 2 (4 body)
Vytvorte funkciu, ktorá vyberie náhodné umiestnenie modrého a červeného štvorca a vykreslí ich do plochy. Každý štvorec musí byť umiestnený do samostatnej štvrtiny obrazovky. Vytvorte tiež (pravdepodobne dve) premenné, v ktorých si zapamätáte, v ktorej štvrtine je modrý, a v ktorej červený štvorec. Tieto premenné môžu byť definované v hlavnej časti programu, vo funkcii však nezabudnite označiť ako globálne.
Určite si spomeniete, že funkcia je kus kódu, ktorý sa vykoná vždy, keď ho zavoláme. Funkcia začína definíciou def
a jej názvom. Súčasťou názvu funkcie môžu byť aj argumenty, v tomto prípade ich však potrebovať nebudete. Funkciu môžete potom zavolať z ľubovoľného miesta programu zavolaním jej mena. Keď vo funkcii označíme premennú za globálnu, povieme funkcii, že má používať premennú definovanú v hlavnej časti programu a nie si vytvárať vlastnú novú. To nám umožňuje prenášať informáciu medzi rôznymi funkciami. Jednoduché použitie funkcie by teda vyzeralo takto:
Podúloha 3 (2 body)
Váš program by mal reagovať na to, že hráč stlačil myšou niektorý z herných štvorcov. Vytvorte funkciu, ktorá sa zavolá pri každom stlačení myši, a ktorá následne prekreslí plochu – zvolí nové pozície modrého a červeného štvorca. Dajte si pozor, aby program nič nerobil, ak hráč stlačil hlavičku. Skúste takisto zistiť, do ktorej štvrtiny hracej plochy hráč klikol a vypísať informáciu o to pomocou print()
.
Podúloha 4 (6 bodov)
Pridajte samotnú hernú funkcionalitu. Hra bude sledovať klikanie hráča a kontrolovať, či správne plní úlohu. Jeho úlohou je najskôr niekoľkokrát stlačiť modré tlačidlo a potom niekoľkokrát červené tlačidlo. Ak sa niekedy v tomto postupe hráč pomýli – stlačí niektoré tlačidlo priveľakrát, klikne na tlačidlo bez farby, poruší poradie stláčania – hra sa ukončí a vypíše, že hráč prehral. Až keď hráč úspešne splní zadané pokyny, hra mu pogratuluje a ukončí sa.
Ak chcete ukončiť program, môžete použiť funkciu sys.exit()
. Ešte predtým by ste však mohli chvíľu počkať, čo spravíte cez príkaz time.sleep(cas_v_sekundach)
. A dobrá rada, ak sa vám niečo nevykresľuje, skúste pridať canvas.update()
, ktorý program donúti prekresliť celú plochu.