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:

meno_premennej = 0
b = 1

def meno_funkcie():
	global meno_premennej
	jednotlive
	prikazy
	funkcie
	meno_premennej = 2
	b = 2

meno_funkcie() # zavolame funkciu s danym menom
print(meno_premennej, b) # vypíšeme "2 1".
 # Prvá premenná sa vykonaním funkcie zmenila, druhá však nie, lebo nebola označená za globálnu

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.

import time
import sys

time.sleep(2000)
sys.exit()